Łatanie oprogramowania na miliard Mil

Czy ktoś mógłby rzucić trochę światła na to, jak NASA projektuje architekturę swoich statków kosmicznych, aby upewnić się, że są w stanie łatać błędy w wdrożonym kodzie?

Nigdy nie budowałem żadnych systemów typu" real time " I to jest pytanie, które przyszło mi na myśl po przeczytaniu tego artykułu:

Http://pluto.jhuapl.edu/overview/piPerspective.php?page=piPerspective_05_21_2010

" jedną z pierwszych głównych rzeczy, które będziemy do when we wake the spacecraft up next tydzień będzie uploading prawie 20 minor poprawki błędów i inne ulepszenia kodu do naszej ochrony przed awarią (lub " autopilota response")."

Author: Maxim Gershkovich, 2010-06-20

5 answers

Byłem twórcą oprogramowania systemu przełączania telefonów publicznych, które ma dość poważne ograniczenia dotyczące niezawodności, dostępności, przetrwania i wydajności, które zbliżają się do tego, czego potrzebują systemy kosmiczne. Nie pracowałem na statkach kosmicznych (chociaż pracowałem z wieloma byłymi programistami wahadłowców, gdy w IBM), i nie jestem zaznajomiony z VXworks, systemem operacyjnym używanym na wielu statkach kosmicznych (w tym łazikach marsjańskich, które mają fenomenalny rekord operacyjny).

Jeden z podstawowych wymagania dotyczące łatkowalności polega na tym, że system powinien być zaprojektowany od podstaw do łatania. Obejmuje to strukturę modułów, dzięki czemu można dodawać nowe zmienne i zastępować metody bez zakłócania bieżących operacji. Często oznacza to, że zarówno stary, jak i nowy kod dla zmienionej metody będzie rezydentem, a operacja łatania po prostu aktualizuje wektor dyspozytorski dla klasy lub modułu.

Jest to po prostu obowiązkowe, aby oprogramowanie do łatania (i un-patchowania) było zintegrowane do systemu operacyjnego.

Kiedy pracowałem nad systemami telefonicznymi, Zwykle używaliśmy funkcji łatania i wymiany modułów w systemie do ładowania i testowania naszych nowych funkcji, a także poprawek błędów, na długo przed zgłoszeniem tych zmian do buildów. Każdy programista w ramach swojej pracy musi czuć się komfortowo z łataniem i wymianą modułów. Buduje poziom zaufania do tych komponentów i upewnia się, że kod łatania i wymiany jest wykonywany rutynowo.

Testowanie tych systemów jest o wiele bardziej rygorystyczne niż cokolwiek, co kiedykolwiek spotkałeś w jakimkolwiek innym projekcie. Kompletne i częściowe makiety systemu wdrożeniowego będą łatwo dostępne. Prawdopodobnie pojawią się również środowiska maszyn wirtualnych, w których można uruchomić i przetestować pełne obciążenie. Plany testowe na wszystkich poziomach powyżej testu jednostkowego będą pisane i formalnie weryfikowane, podobnie jak formalne kontrole kodu (a te będą również rutynowe).

Tolerancja błędów projektowanie systemu, w tym projektowanie oprogramowania, ma zasadnicze znaczenie. Nie wiem dokładnie o systemach kosmicznych, ale coś w rodzaju klastrów wysokiej dostępności jest prawdopodobnie standardem, z dodaną możliwością uruchamiania zarówno zsynchronizowanych, jak i niezsynchronizowanych, oraz z możliwością przesyłania informacji między stronami podczas przełączania awaryjnego. Dodatkową zaletą tej struktury systemu jest to, że można podzielić system (jeśli to konieczne), przeładować nieaktywną stronę z nowym obciążeniem oprogramowania i przetestować go w produkcji system bez podłączenia do sieci systemowej lub magistrali. Gdy będziesz mieć pewność, że nowe oprogramowanie działa poprawnie, możesz po prostu przełączać w tryb awaryjny.

Podobnie jak w przypadku patchingu, każdy programista powinien wiedzieć, jak wykonywać przełączanie awaryjne, i powinien je wykonywać zarówno podczas opracowywania, jak i testowania. Ponadto programiści powinni znać każdy problem z aktualizacją oprogramowania, który może wymusić przełączanie awaryjne, i powinni wiedzieć, jak pisać poprawki i wymianę modułów, które unikają wymaganych przełączników awaryjnych możliwe.

Ogólnie rzecz biorąc, systemy te są projektowane od podstaw (sprzęt, system operacyjny, kompilatory i ewentualnie język programowania) dla tych środowisk. Nie uznałbym systemu Windows, Mac OSX, Linuksa ani żadnego innego wariantu Uniksa za wystarczająco solidny. Częścią tego są wymagania w czasie rzeczywistym, ale cały problem niezawodności i przetrwania jest równie krytyczny.

Aktualizacja: jako kolejny punkt zainteresowania, oto blog jednego ze sterowników łazika marsjańskiego. To da ci perspektywę na codzienne życie utrzymania operacyjnego statku kosmicznego. Fajne rzeczy!

 15
Author: Cylon Cat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 22:04:30

Ja też nigdy nie budowałem systemu czasu rzeczywistego, ale w tych systemach podejrzewam, że ich system nie miałby Mechanizmu Ochrony Pamięci. Nie potrzebują go, ponieważ sami napisali własne oprogramowanie. Bez ochrony pamięci, to będzie trywialne dla programu, aby zapisać lokalizację pamięci innego programu i to może być wykorzystane do hot-patch uruchomiony program (pisanie samododajnego kodu było popularną techniką w przeszłości, bez ochrony pamięci te same techniki używane do samoodtwarzający się kod może być użyty do modyfikacji kodu innego programu).

Linux był w stanie wykonać drobne poprawki jądra bez restartu przez jakiś czas z Ksplice. Jest to konieczne do stosowania w sytuacjach, w których przestoje mogą być katastrofalne. Nigdy nie używałem go osobiście, ale myślę, że technika, której używają, jest w zasadzie taka:

Ksplice może stosować łatki do Linuksa jądra bez ponownego uruchamiania komputera. Ksplice przyjmuje jako wejście unified diff oraz oryginalny kod źródłowy jądra, i aktualizuje działające jądro w pamięć. Korzystanie z Ksplice nie wymaga wszelkie przygotowania przed systemem pierwotnie booted (uruchomione jądro nie musi być specjalnie skompilowane, np.). W celu wygenerować aktualizację, ksplice musi określ, jaki kod w jądrze został zmieniony przez kod źródłowy patch. Ksplice wykonuje tę analizę w warstwie kodu obiektowego ELF, a raczej niż w warstwie kodu źródłowego C.

Aby zastosować plaster, najpierw Ksplice zawiesza wykonywanie komputera tak, aby jest jedynym uruchomionym programem. Na system sprawdza, czy nie ma procesorów byli w trakcie wykonywania funkcje, które będą modyfikowane przez patch. Ksplice modyfikuje początek zmienionych funkcji, tak aby zamiast tego wskaż nowe, zaktualizowane wersje tych funkcji i modyfikuje dane i struktur w pamięci, które muszą się zmienić. Wreszcie Ksplice wznawia każdy procesor pracujący tam, gdzie zostawić wyłącz.

(z Wikipedii)

 6
Author: Lie Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 07:37:04

Cóż, jestem pewien, że mają symulatory do przetestowania i mechanizmy do łatania na gorąco. Spójrz na linked artykuł poniżej-jest całkiem dobry przegląd konstrukcji statku kosmicznego. Sekcja 5 omawia maszyny obliczeniowe.

Http://www.boulder.swri.edu/pkb/ssr/ssr-fountain.pdf

Uwaga:

  • redundantne procesory
  • przełączanie poleceń przez kartę uplink, która nie wymaga pomocy procesora
  • Zasady opóźnione w czasie
 3
Author: G__,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 06:43:20

Nie pracowałem na statku kosmicznym, ale maszyny, na których pracowałem, zostały zbudowane tak, aby miały stabilny stan bezczynności, w którym można na krótko wyłączyć maszynę, aby naprawić firmware. Systemy, które obsługują aktualizacje "na żywo", to te, które zostały podzielone na współdziałające komponenty, w których można obniżyć jeden segment systemu na tyle długo, aby go zaktualizować, a inne komponenty mogą nadal działać normalnie, ponieważ mogą tolerować tymczasowe przestoje serwisowanego systemu komponent.

Jednym ze sposobów, w jaki można to zrobić, jest posiadanie funkcji równoległych (redundantnych), takich jak równoległe maszyny, które wykonują to samo zadanie, tak aby proces mógł być prowadzony wokół maszyny W ramach usługi. Zaletą tego podejścia jest to, że można go obniżyć na dłuższy okres w celu uzyskania bardziej znaczących usług, takich jak regularna konserwacja zapobiegawcza sprzętu. Gdy już masz tę możliwość, obsługa przestojów dla poprawki firmware jest dość łatwa.

 2
Author: Dan Bryant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 13:10:06

Jednym z podejść używanych w przeszłości jest użycie Lispu.

 1
Author: Paul Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-20 21:17:53