W pocisku wyposażonym w komputer funkcji nie wyznacza już sam schemat elektryczny. Zachowanie powstaje z połączenia sprzętu, pamięci rozruchowej, programu procesora, obrazu FPGA, danych kalibracyjnych, parametrów oraz narzędzi, które te artefakty wytworzyły i zainstalowały. Dwa fizycznie podobne egzemplarze mogą więc zachowywać się inaczej, choć oba przechodzą prosty test zasilania.
Ewolucja od regulatorów przewodowych i pamięci wytwarzanej fizycznie do elektrycznie ładowanej konfiguracji radykalnie obniżyła koszt zmiany funkcji. Nie zmniejszyła odpowiedzialności za tę zmianę. Przeniosła jej środek ciężkości z kontroli samej części sprzętowej na kontrolę zależności między sprzętem, kodem, danymi, narzędziami i konkretnym egzemplarzem.
To jest główna teza artykułu: wykonywalna konfiguracja nie jest jednym plikiem, lecz grafem powiązanych artefaktów, a poprawne ładowanie oznacza ustanowienie zatwierdzonego stanu całego grafu. Suma prawidłowych plików nie gwarantuje prawidłowego zestawu.
Tekst omawia architekturę, historię i zapewnienie zgodności. Nie podaje procedur dostępu do współczesnej broni, złączy serwisowych, kluczy, sekwencji odblokowania ani operacyjnych pakietów danych.
Ostrzeżenie: nieznanego modułu uzbrojenia nie wolno zasilać, podłączać do programatora, otwierać ani próbować odczytywać. Może zawierać inicjatory, baterie, zgromadzoną energię i mechanizmy zabezpieczające. Należy odsunąć ludzi i przekazać obiekt właściwym służbom oraz uprawnionemu personelowi.
Mapa pojęć i wielkości
Artykuł prowadzi od tożsamości artefaktu do znaczenia wykonywanego przez konkretny egzemplarz. Czytelnik powinien po lekturze umieć odróżnić integralny plik od zgodnego zestawu, wyjaśnić zmianę roli pamięci od programu wykonywanego fizycznie do pamięci elektrycznie przeprogramowywalnej, policzyć prosty budżet czasu i błędów oraz wskazać dowód zdolny obalić twierdzenie o poprawnym wydaniu.
| Symbol lub termin | Znaczenie | Jednostka albo rola |
|---|---|---|
| $G=(V,E)$ | graf wykonywalnej konfiguracji: artefakty i zależności | model strukturalny |
| $R_i,C_i,B_i,T_i$ | czas odpowiedzi, wykonania, blokowania i okres zadania | s |
| $T_{ret}$ | wymagany czas zachowania danych bez zasilania | s, h lub lata |
| $N_{PE}$ | liczba cykli programowania i kasowania komórki albo bloku | cykle |
| $p_b$, $n$, $P_0$ | prawdopodobieństwo błędu bitu, liczba bitów i prawdopodobieństwo braku błędu | wielkości bezwymiarowe |
| obraz | wykonywalny program, konfiguracja FPGA albo kontrolowany zbiór danych przeznaczony do instalacji | artefakt wersjonowany |
| manifest | maszynowy opis tożsamości, zależności, zgodności i zatwierdzenia składników | dowód zestawu |
| wydanie | określony wynik procesu dopuszczony do zdefiniowanego użycia | stan kontrolowany |
| stan wykonany / utrzymywany | konfiguracja po produkcji / po późniejszych naprawach i zmianach | stan egzemplarza |
Wartości w przykładach są neutralne i dydaktyczne. Nie opisują pamięci, czasu rozruchu, interfejsów ani procedur ładowania żadnego współczesnego systemu uzbrojenia.
Wykonywalna konfiguracja jako graf zależności
Minimalny model obejmuje co najmniej:
- sprzęt i jego rewizję;
- niezmienną pamięć pierwszego etapu rozruchu;
- program ładujący i oprogramowanie urządzeń peryferyjnych;
- obraz konfiguracji logiki programowalnej;
- system czasu rzeczywistego oraz aplikację;
- dane kalibracyjne konkretnego egzemplarza;
- dane konfiguracyjne i misji;
- manifest zgodności, wyniki prób i decyzję o dopuszczeniu;
- wersje kompilatorów, bibliotek, generatorów i narzędzi FPGA.
Graf można zapisać jako $G=(V,E)$, gdzie wierzchołki $V$ są artefaktami, a krawędź $a\rightarrow b$ oznacza, że znaczenie lub poprawność $b$ zależy od wersji $a$. Zatwierdzony pakiet nie jest więc zbiorem dowolnych wersji, lecz spójnym podgrafem spełniającym reguły zgodności.
Jeżeli aplikacja oczekuje innego formatu kalibracji niż zapisany, oba pliki mogą mieć poprawną sumę kontrolną, lecz połączenie jest błędne. Jeżeli nowy obraz FPGA zmienia mapę rejestrów, stary program procesora może komunikować się poprawnie elektrycznie i zarazem czytać dane o innym znaczeniu.
Właściwe pytanie nie brzmi zatem „jaka wersja programu znajduje się w pamięci?”, lecz „jaki zatwierdzony zestaw sprzętu, obrazów i danych jest aktywny oraz jaki dowód łączy go z wymaganiami?”.
Od logiki przewodowej do programu jako części wyrobu
Wczesne układy sterowania realizowały funkcję przez połączenia, elementy analogowe, krzywki i nastawy. Nie miały pliku programu, ale miały konfigurację: schemat, wartości elementów, sposób okablowania, ustawienia, przyrządy kalibracyjne i stan konkretnego egzemplarza. Zmiana funkcji wymagała zmiany fizycznej, dzięki czemu była kosztowna i łatwo widoczna.
Pamięć magnetyczna rozdzieliła stan roboczy od stałego programu. W pamięci typu core rope informacja wynikała z fizycznego sposobu przeprowadzenia przewodów przez rdzenie, więc program był w praktyce wyrobem produkcyjnym. Apollo Guidance Computer jest dobrze udokumentowanym cywilnym przykładem tej granicy między projektem logicznym a fizycznie wykonywaną pamięcią.1 Nie jest komputerem pocisku, ale pozwala zrozumieć, że „kompilacja zakończona” i „pamięć poprawnie wyprodukowano” były odrębnymi dowodami.
Mask ROM utrwalał zawartość podczas produkcji układu. PROM umożliwiał jednorazowe programowanie później, EPROM — kasowanie poza systemem, a EEPROM i Flash — wielokrotne przeprogramowanie elektryczne. Każdy krok skracał drogę od poprawki do egzemplarza, lecz dodawał nowe stany: zapis częściowy, zużycie komórek, pomyłkę wariantu, nieautoryzowaną zmianę i niezgodność kilku obrazów.
Historia ta nie jest prostą drogą od „gorszej” do „lepszej” pamięci. Pamięć trudna do zmiany daje silną stabilność konfiguracji, ale kosztowną modernizację. Pamięć łatwa do zmiany ułatwia naprawę błędów i rozwój, lecz potrzebuje silniejszego procesu identyfikacji, autoryzacji i odtwarzania.
Minuteman: pamięć jako problem utrzymania wielu generacji
Rodzina Minuteman pokazuje inny wymiar historii niż jednorazowa produkcja pamięci Apollo: system pozostawał w służbie podczas kolejnych zmian komputera, układu naprowadzania, oprogramowania i wyposażenia wsparcia. Materiały historyczne US Air Force opisują nowe systemy naprowadzania w kolejnych odmianach Minuteman oraz zwiększanie zdolności przechowywania zestawów danych.6 Dla tej monografii ważna jest nie zawartość tych danych, lecz konieczność jednoznacznego związania ich formatu z generacją sprzętu.
W programie wymiany układu naprowadzania Minuteman III dawny zestaw NS-20 zastąpiono NS-50. Oficjalny komunikat US Air Force mówi o wymianie komputera i oprogramowania przy zachowaniu istniejącej platformy żyroskopowej oraz o wdrożeniu nowych zestawów w całej eksploatowanej populacji.7 Taka modernizacja nie jest zamianą jednego pudełka: trzeba utrzymać zgodność mechanicznych i elektrycznych interfejsów, danych, procedur kontroli, urządzeń wsparcia, dokumentacji oraz stanu każdego egzemplarza.
Osobna modernizacja wyposażenia naziemnego objęła pamięciowy programator i drukarkę, zastępując starszy nośnik napędem pamięci nieulotnej.8 Publiczne źródło potwierdza zmianę klasy technologii i cel utrzymania systemu; nie jest tu odtwarzana procedura ładowania ani zawartość danych. Przypadek pokazuje, że długie życie systemu wymusza koegzystencję starego interfejsu, nowego nośnika i zatwierdzonego znaczenia danych.
Z tych trzech etapów wynika wspólna zasada. Pierwsza generacja może wiązać funkcję z fizyczną organizacją pamięci, kolejna z elektrycznie ładowanym obrazem, a jeszcze późniejsza z nowym zestawem komputera i oprogramowania. Ciągłość nazwy systemu nie oznacza ciągłości formatu, narzędzia ani dowodu. Modernizacja pozostaje bezpieczna tylko wtedy, gdy ewidencja potrafi wskazać, które kombinacje generacji są zatwierdzone i jakie próby je uzasadniają.
Rodzaje pamięci i ich role
Klasy pamięci trzeba rozróżniać według funkcji, nie tylko technologii.
| Rola | Wymagana cecha | Typowe ryzyko |
|---|---|---|
| pierwszy etap rozruchu | mała zależność od innych bloków, stabilność | trwały błąd lub brak drogi odzyskania |
| magazyn obrazu wykonywalnego | retencja, integralność, możliwość odczytu zwrotnego | bit rot, przerwany zapis, zużycie |
| pamięć robocza | opóźnienie, przepustowość, determinizm | błąd ulotny, konflikt dostępu, utrata po zaniku zasilania |
| konfiguracja FPGA | zgodność z układem i narzędziami | niewłaściwy obraz konfiguracyjny lub częściowa konfiguracja |
| kalibracja | związek z numerem seryjnym i jednostkami | poprawny format z niewłaściwym znaczeniem |
| dane misji | świeżość, autorytet, układ odniesienia | dane stare, z innego wariantu lub czasu |
| dziennik diagnostyczny | atomowość i trwałość przy awarii | zużycie pamięci albo utrata pierwszej przyczyny |
Pamięć SRAM jest ulotna i szybka; DRAM wymaga odświeżania; pamięć Flash przechowuje stan bez zasilania, lecz ma ograniczoną liczbę cykli zapisu i specyficzne tryby uszkodzenia. Bloki RAM w FPGA są zasobami konfigurowalnymi o różnych trybach portów. Monografia Salauyou i Klimowicza pokazuje, że sposób opisu HDL wpływa na to, czy narzędzie zrealizuje rejestry, RAM, ROM albo FIFO oraz jakie przyjmie zachowanie równoczesnego odczytu i zapisu.2
Technologia nie przesądza o roli. Ta sama pamięć nieulotna może przechowywać kod, parametry i dziennik, ale każda z tych klas potrzebuje innej częstotliwości zapisu, polityki odzyskania i kontroli znaczenia danych.
Retencja, zużycie i ECC: trzy różne budżety
Retencja opisuje zdolność zachowania danych przez czas bez odświeżenia zapisu. Trwałość cykliczna (endurance) określa, ile cykli programowania lub kasowania znosi komórka albo blok w określonych warunkach. Kod korekcyjny ECC ogranicza skutki części błędów odczytanych bitów. Żadna z tych cech nie zastępuje pozostałych: kod może skorygować pojedynczy błąd, ale nie odnawia zużytej warstwy tunelowej, a duży zapas cykli zapisu nie gwarantuje długiej retencji po intensywnym cyklowaniu.
Załóżmy dydaktycznie, że kontrolowany obszar ma $n=10^6$ bitów, a przy jednym sprawdzeniu prawdopodobieństwo błędnego bitu wynosi $p_b=2\cdot10^{-8}$. Przy założeniu niezależności, które w rzeczywistym układzie trzeba osobno uzasadnić, prawdopodobieństwo braku błędu wynosi
$$P_0=(1-p_b)^n\approx e^{-np_b}=e^{-0{,}02}\approx0{,}9802.$$
Prawdopodobieństwo co najmniej jednego błędu wynosi więc około $1-P_0=1{,}98\%$, chociaż oczekiwana liczba błędów to tylko $np_b=0{,}02$. Mała wartość oczekiwana nie znaczy zatem, że można pominąć wykrywanie. Ten rachunek nie prognozuje konkretnej pamięci: pokazuje tylko, jak pojemność zmienia ryzyko systemowe przy zadanym modelu błędu.
Jeżeli dane są chronione słowami SECDED, pojedynczy błąd w słowie można poprawić, a podwójny wykryć.10 Dla hipotetycznego słowa o $m=72$ chronionych bitach i tego samego $p_b$ przybliżone prawdopodobieństwo dokładnie dwóch niezależnych błędów w jednym odczycie jest rzędu
$$P_2\approx {72\choose2}p_b^2 =2556\,(2\cdot10^{-8})^2\approx1{,}0\cdot10^{-12}.$$
Liczba jest mała, ale model może być fałszywy przy błędach wspólnej przyczyny, uszkodzeniu całego wiersza, promieniowaniu obejmującym sąsiednie komórki albo awarii samego toru ECC. Dlatego dowód obejmuje rozmieszczenie bitów, przeplot, test logiki korekcji, telemetrię liczby korekcji i reakcję na błąd niewłaściwy do skorygowania, a nie tylko nazwę zastosowanego kodu.
Osobny budżet dotyczy zapisów. Dla fikcyjnej pamięci o deklarowanym $N_{PE}=10\,000$ cykli jedna aktualizacja dziennie przez dziesięć lat, pomnożona przez współczynnik cyklu życia równy 2, daje
$$N_{użyte}=365\cdot10\cdot2=7300 \text{cykli}.$$
Arytmetyczny zapas wynosi 2700 cykli, czyli zaledwie $10\,000/7300\approx1{,}37$ względem założonego obciążenia. Równomierne rozłożenie zapisów na cztery niezależne bloki zmniejszyłoby średnią do około 1825 cykli na blok, lecz tylko wtedy, gdy algorytm rzeczywiście wyrównuje zużycie, metadane nie tworzą gorącego miejsca, a przerwane transakcje i ponowienia zostały ujęte w budżecie. Materiały producentów podkreślają, że trwałość cykliczna jest parametrem zależnym od warunków i sposobu użytkowania, a nie uniwersalną liczbą przepisywaną między rodzinami pamięci.9
W wymaganiu trzeba więc rozdzielić co najmniej: czas retencji po określonej historii zapisów i w określonej temperaturze, liczbę cykli z zapasem na narzut dodatkowych zapisów (write amplification), pokrycie ECC, częstotliwość kontroli i okresowego poprawiania danych (scrubbing) oraz stan graniczny wywołujący obsługę. Wydanie oprogramowania zmieniające rytm dziennika może zużyć ten budżet bez jakiejkolwiek zmiany schematu elektrycznego.
FPGA: obraz konfiguracji nie jest programem procesora
Program procesora jest sekwencją instrukcji wykonywanych przez istniejącą mikroarchitekturę. Obraz FPGA ustanawia natomiast samą strukturę połączeń, funkcje tablic LUT, pamięci, trasowanie połączeń i część bloków sprzętowych. Zmiana obrazu konfiguracyjnego (bitstreamu) może więc zmienić równoległość, opóźnienia, interfejsy i zachowanie resetu.
Pełny przepływ ma postać:
$$\text{wymagania}\rightarrow\text{HDL i ograniczenia} \rightarrow\text{synteza}\rightarrow\text{implementacja} \rightarrow\text{obraz konfiguracyjny}\rightarrow\text{konfiguracja układu}.$$
Wynik zależy nie tylko od HDL, ale również od ograniczeń czasowych, wersji IP, ustawień, narzędzia, docelowego układu i niekiedy ziarna procesu rozmieszczania. The FPGA Programming Handbook przedstawia tę drogę od specyfikacji przez środowisko testowe, syntezę i implementację do obrazu konfiguracyjnego oraz testu na płytce.3 Dane osiągowe z jego platformy dydaktycznej nie są przenoszone na system rakietowy.
Obraz konfiguracyjny dla podobnego, lecz innego układu nie jest automatycznie zgodny. Obraz testowy z dodatkową instrumentacją nie musi mieć identycznego rozmieszczenia i czasów jak wydanie. Weryfikacja powinna identyfikować docelowy układ, ograniczenia, wygenerowane produkty, wersję narzędzi i dokładny skrót kryptograficzny ocenionego artefaktu.
Pamięć robocza i czas wykonania
Pamięć nie jest biernym magazynem. Opóźnienie, arbitraż, cache, odświeżanie DRAM i konflikty banków wpływają na czas funkcji. Średni czas wykonania nie wystarcza, gdy wynik musi powstać przed terminem.
Najgorszy czas odpowiedzi zadania można schematycznie zapisać jako
$$R_i=C_i+B_i+\sum_{j\in hp(i)} \left\lceil\frac{R_i}{T_j}\right\rceil C_j,$$
gdzie $C_i$ jest czasem własnego wykonania, $B_i$ blokowaniem przez zasób, a suma obejmuje zadania wyższego priorytetu o okresach $T_j$. Pamięć i magistrala wpływają zarówno na $C_i$, jak i $B_i$.
Rozważmy neutralny proces sterowania i, dla którego $C_i=4 \mathrm{ms}$, blokowanie przez współdzieloną pamięć wynosi początkowo $B_i=1 \mathrm{ms}$, a jedno zadanie wyższego priorytetu ma $C_h=2 \mathrm{ms}$ i okres $T_h=10 \mathrm{ms}$. Iteracja równania daje
$$R_i^{(0)}=C_i+B_i=5 \mathrm{ms},$$
$$R_i^{(1)}=5+ \left\lceil\frac{5}{10}\right\rceil2 =7 \mathrm{ms},$$
a kolejna iteracja pozostaje przy $7 \mathrm{ms}$. Dla fikcyjnego terminu $D_i=8 \mathrm{ms}$ istnieje więc margines jednej milisekundy.
Po zmianie obrazu FPGA arbiter przyznaje dłuższe, nieprzerywalne okno innemu klientowi pamięci. Kod zadania i jego wynik matematyczny nie zmieniają się, ale blokowanie rośnie do $B_i=3 \mathrm{ms}$. Wtedy
$$R_i^{(0)}=7 \mathrm{ms},\qquad R_i^{(1)}=7+ \left\lceil\frac{7}{10}\right\rceil2 =9 \mathrm{ms}.$$
Nowy punkt stały przekracza termin o jedną milisekundę. Nie wolno więc przenieść wyniku czasowego starego obrazu do nowego tylko dlatego, że interfejs rejestrów i testy funkcjonalne pozostały bez zmian. W manifeście potrzebny jest związek między dokładnym obrazem, polityką arbitrażu, wersją aplikacji i raportem analizy albo pomiaru czasu.
Zmiana kompilatora, układu pamięci lub obrazu FPGA może więc naruszyć argument czasowy bez zmiany funkcji matematycznej programu. Temat planowania czasu jest szerzej omawiany w osobnym artykule; tutaj ważny jest skutek konfiguracyjny: wydanie musi wiązać obraz z pomiarami oraz analizą wykonanymi dla tego obrazu.
Rozruch jako maszyna stanów
Rozruch jest procesem ustanawiania zaufanego i spójnego stanu. Typowy model funkcjonalny, bez odtwarzania konkretnego pocisku, obejmuje:
- stan po resecie i minimalne źródła zegara;
- samokontrolę zasobów potrzebnych do dalszego startu;
- identyfikację sprzętu i wybór zgodnego zestawu;
- sprawdzenie integralności oraz autoryzacji obrazu;
- konfigurację logiki programowalnej i urządzeń;
- inicjalizację pamięci roboczej oraz danych trwałych;
- test interfejsów i zgodności wersji;
- przejście do stanu gotowości albo jawnego trybu odzyskania.
Każdy krok ma warunek wejścia, wynik i ograniczony czas. Brak zegara może wyglądać jak uszkodzona pamięć, a źle skonfigurowane FPGA — jak błąd procesora. Kolejność jest grafem zależności, nie tylko listą czynności.
Stan READY nie powinien wynikać wyłącznie z wykonania ostatniej instrukcji. Musi oznaczać, że aktywne wersje, dane i testy odpowiadają zatwierdzonej konfiguracji. Tryb awaryjny również wymaga jednoznacznej sygnalizacji; cichy powrót do starszej partycji może pozostawić system pozornie sprawny w nieplanowanym stanie.
Integralność, autentyczność i poprawność to trzy różne pytania
Suma kontrolna lub CRC wykrywa wiele przypadkowych zmian, ale nie mówi, kto zatwierdził plik ani czy jest on właściwy dla wariantu. Kryptograficzny skrót silnie identyfikuje treść, lecz sam nie ustanawia autorytetu. Podpis cyfrowy może potwierdzić pochodzenie i integralność, ale nadal nie dowodzi poprawności wymagań lub kodu.
Rozdzielenie wygląda następująco:
| Pytanie | Przykładowy dowód | Czego nie dowodzi |
|---|---|---|
| czy bity zmieniły się? | odczyt zwrotny, CRC, skrót kryptograficzny | zgodności wariantu i jakości funkcjonalnej |
| czy pakiet pochodzi z uprawnionego procesu? | podpis i łańcuch zatwierdzeń | braku błędu w zatwierdzonym pakiecie |
| czy składniki są zgodne? | manifest i macierz kompatybilności | spełnienia wymagań w działaniu |
| czy zachowanie jest poprawne? | V&V, testy, analiza i kwalifikacja | identyczności wszystkich egzemplarzy bez CM |
Współczesne wytyczne NIST dotyczące odporności oprogramowania układowego porządkują funkcje ochrony, wykrywania i odzyskania.4 Są ogólnym wzorcem platformy, nie instrukcją dostępu do uzbrojenia.
Pakiet wydania i macierz zgodności
Pakiet powinien zawierać manifest maszynowy oraz dokument przeznaczony dla człowieka. Manifest identyfikuje obrazy, ich skróty, schematy danych, obsługiwane rewizje sprzętu, zależności, sposób weryfikacji i stan zatwierdzenia. Dokument wersji wyjaśnia cel zmiany, zakres prób, znane ograniczenia i wpływ na obsługę.
Zgodność jest relacją wielokierunkową:
- nowa aplikacja na starej rewizji sprzętu;
- stara aplikacja na nowej rewizji;
- program ładujący z nowym formatem obrazu;
- obraz FPGA z mapą rejestrów aplikacji;
- algorytm z wersją danych kalibracyjnych;
- wyposażenie naziemne z pakietem i egzemplarzem.
Poniższa neutralna macierz pokazuje, jak czytać taką relację. Symbole nie odpowiadają żadnemu istniejącemu wyrobowi. H oznacza rewizję sprzętu, F — obraz FPGA, A — aplikację, a K — schemat i rekord kalibracji. Status dotyczy całego wiersza; nie wolno go rozciągać na inną kombinację przez podobieństwo nazw.
| Zestaw | H | F | A | K | Decyzja i podstawa |
|---|---|---|---|---|---|
| R0 | H0 | F0 | A0 | K0 | dopuszczony; pełna próba integracyjna i kwalifikacyjna |
| R0a | H0 | F0 | A1 | K0 | warunkowo dopuszczony; zmiana aplikacji nie narusza mapy rejestrów ani interpretacji K0, potwierdzono regresją |
| X1 | H0 | F1 | A0 | K0 | odrzucony; F1 publikuje mapę rejestrów oczekiwaną dopiero przez A1 |
| X2 | H1 | F1 | A1 | K0 | odrzucony; A1 oczekuje schematu K1, choć każdy artefakt osobno przechodzi kontrolę integralności |
| R1 | H1 | F1 | A1 | K1 | dopuszczony po zamknięciu prób sprzęt–logika–program–kalibracja |
Macierz ujawnia różnicę między integralnością a zgodnością. Zestaw X2 może zawierać cztery pliki o poprawnych skrótach i podpisach, lecz nadal jest funkcjonalnie niespójny. Z kolei R0a nie staje się dopuszczony dlatego, że A1 ma wyższy numer, tylko dlatego, że analiza wpływu i regresja zamknęły dokładnie te krawędzie grafu, które zmiana mogła naruszyć.
Numer wyższy nie oznacza automatycznie wersji lepszej dla każdego wariantu. Mechanizm zapobiegania cofnięciu może chronić przed przywróceniem znanego błędu, lecz zbyt prosta reguła monotoniczna może zablokować prawidłowy pakiet innej gałęzi. Decyzja musi używać tożsamości wariantu i zatwierdzonej macierzy, nie samej liczby.
Aktualizacja transakcyjna i zanik zasilania
Zapis nieulotny może zostać przerwany w dowolnej chwili. Po powrocie zasilania system musi rozróżnić kopię kompletną, kopię częściową i poprzedni zatwierdzony stan. Wzorzec transakcyjny rozdziela przygotowanie od aktywacji:
$$\text{zapis nieaktywny}\rightarrow\text{weryfikacja} \rightarrow\text{atomowa decyzja aktywacji} \rightarrow\text{próba rozruchu}\rightarrow\text{zatwierdzenie}.$$
Kopie A/B ułatwiają odzyskanie, ale nie wystarczą bez jednoznacznej metadanej wyboru. Jeżeli znacznik aktywności sam zostanie zapisany częściowo, potrzebuje wersji, integralności i reguły rozstrzygającej. Liczniki monotoniczne oraz dzienniki także zużywają pamięć.
Próba musi odcinać zasilanie w wielu chwilach i sprawdzać wszystkie dopuszczalne wyniki, nie tylko szczęśliwą ścieżkę. Program odzyskiwania jest częścią produktu: jeśli nie obsługuje nowej rewizji sprzętu lub formatu danych, przestaje być barierą.
Kalibracja i dane misji zmieniają zachowanie jak kod
Rekord kalibracji może zawierać offsety, skale, macierze osi, tablice temperaturowe i współczynniki aktuatorów. Musi wskazywać numer seryjny, jednostki, układ współrzędnych, zakres ważności, niepewność oraz wersję algorytmu interpretującego.
Poprawny CRC oznacza tylko, że rekord zachował zapisane bity. Wartość może nadal być fizycznie niemożliwa albo pochodzić z innego egzemplarza. Walidacja semantyczna obejmuje zakresy, relacje pól, monotoniczność tabel i sens macierzy. Po wymianie sensora automatyczne zachowanie starej kalibracji jest błędem konfiguracji.
Dane misji mają zwykle krótszy cykl życia niż oprogramowanie. Potrzebują czasu ważności, autorytetu źródła, jednostek, układu odniesienia i zgodności schematu. Sukces transmisji nie dowodzi aktywowania właściwego zestawu. Niepoprawny znacznik czasu może pozostawić liczby poprawne składniowo i błędne operacyjnie.
Diagnostyka ma zachować dowód awarii
Po błędzie naturalnym odruchem jest reset albo ponowne wgranie. Obie czynności mogą usunąć pierwszą przyczynę. Przed zmianą stanu, o ile zatwierdzona procedura i bezpieczeństwo na to pozwalają, system powinien zachować identyfikatory aktywnych obrazów, przyczynę resetu, stan rozruchu, błędy pamięci, napięcie, temperaturę i wspólny czas.
Bufor cykliczny ogranicza zużycie pamięci, lecz lawina skutków może nadpisać pierwsze zdarzenie. Osobny rekord pierwszej usterki, zapisywany atomowo, chroni chronologię. Należy jednak kontrolować liczbę zapisów, ponieważ częste aktualizowanie pamięci Flash może samo stworzyć awarię.
BIT ma ograniczone pokrycie. CRC kodu wykrywa zmianę bitów, ale nie błąd logiczny; test RAM może niszczyć zawartość; test interfejsu może potwierdzić komunikację, nie znaczenie danych. Oprogramowanie testowe ma własną wersję i musi znać aktualną konfigurację.
Od źródła do odtwarzalnego wydania
Repozytorium kodu nie jest pełnym zarządzaniem konfiguracją. Build zależy od kompilatora, linkera, bibliotek, generatorów, podmodułów, wersji IP, ograniczeń FPGA, ustawień i środowiska. Znacznik czasu, ścieżka lub losowe ziarno mogą zmienić wynik.
Odtwarzalność bitowa jest pożądana, lecz nie zawsze możliwa. Wtedy trzeba jawnie zdefiniować równoważność funkcjonalną i strukturalną oraz wykazać ją analizą. Archiwum powinno zawierać działające narzędzia lub wiarygodny sposób ich odtworzenia, nie tylko niekompletny instalator.
Stan produktu przechodzi przez kilka nazw:
- zatwierdzony zapis (commit) — określona wersja źródeł;
- wynik budowania (build) — artefakty uzyskane w konkretnym procesie;
- wydanie (release) — wynik budowania dopuszczony do określonego użycia;
- wdrożenie (deployment) — instalacja wydania na egzemplarzu;
- as-built — stan w chwili produkcji;
- as-maintained — stan po naprawach i aktualizacjach.
Każde przejście potrzebuje osobnego dowodu. Wysłanie pliku nie dowodzi instalacji, a odczyt napisu z numerem wersji nie dowodzi zawartości pamięci, jeżeli napis jest ręcznie wpisaną stałą.
MIL-HDBK-61B porządkuje identyfikację konfiguracji, kontrolę zmian, ewidencję statusu i audyty jako proces całego cyklu życia.5 Jest podręcznikiem dobrych praktyk, a nie automatycznie obowiązującym wymaganiem każdego programu.
Studium 1: V-2/A4 — konfiguracja przed oprogramowaniem
V-2/A4 nie miał cyfrowego programu ładowanego do pamięci. Jego zachowanie zależało jednak od schematów, regulatorów, wiązek, nastaw, przyrządów i jakości konkretnego wykonania. Zachowane obiekty Smithsonian dokumentują m.in. żyroskopowe elementy układu naprowadzania i ich związek z pomiarem przyspieszenia oraz sygnałem wyłączenia ciągu.11 Zmiana przewodu lub wartości elementu była zmianą funkcji równie realną jak współczesna zmiana kodu.
Studium pokazuje trwałą zasadę: konfiguracja bazowa istniała przed repozytorium. Musiała odpowiadać fizycznemu egzemplarzowi, a test końcowy nie mógł naprawić niejednoznacznej dokumentacji. Dzisiejszy obraz FPGA jest łatwiejszy do skopiowania niż analogowy regulator, ale jego związek ze sprzętem nadal wymaga tej samej dyscypliny identyfikacji.
Historyczne szczegóły systemu A4 opisano szerzej w osobnym artykule serwisu; tutaj przypadek służy wyłącznie porównaniu modeli konfiguracji, nie instrukcji odtwarzania urządzenia.
Studium 2: FPGA i procesor jako jeden wyrób
Wyobraźmy sobie moduł, w którym FPGA przygotowuje dane, a procesor wykonuje algorytm. Nowy obraz FPGA zmienia format słowa statusowego, lecz aplikacja zachowuje poprzednią definicję. Obie części uruchamiają się, test magistrali przechodzi, CRC obu plików jest poprawny, a mimo to bit alarmu zostaje odczytany jako dana.
Naprawa nie polega na dodaniu jeszcze jednej sumy kontrolnej. Interfejs potrzebuje kontrolowanej wersji schematu, testu kontraktowego i manifestu zabraniającego niezgodnej pary. Symulacja FPGA sprawdza logikę, test procesora — aplikację, a test zintegrowany — znaczenie wymienianych danych.
Książki Salauyou–Klimowicz oraz Bruno–Eschemann dobrze pokazują, że kod HDL, środowisko testowe, ograniczenia, synteza, implementacja i zasoby pamięci tworzą jeden przepływ.2,3 W systemie krytycznym należy do niego dodać identyfikację narzędzi, formalne wydanie i dowód zgodności dokładnego obrazu konfiguracyjnego z aplikacją.
Studium 3: przerwana aktualizacja egzemplarza
Załóżmy, że pakiet zawiera bootloader, aplikację, obraz FPGA i nowy schemat kalibracji. Zasilanie zanika po zapisaniu aplikacji, ale przed obrazem FPGA. Po restarcie każda zapisana część może być integralna, lecz zestaw jest niezgodny.
Transakcja powinna najpierw zapisać wszystkie składniki do nieaktywnego zestawu, zweryfikować ich skróty kryptograficzne i zgodność, a dopiero potem zmienić atomowy wskaźnik. Pierwszy rozruch jest próbny. Jeżeli test stanu nie zakończy się w dozwolonym czasie, system wraca do poprzedniego kompletnego zestawu i zapisuje przyczynę.
To studium pokazuje różnicę między integralnością pliku a atomowością wydania. Pokazuje również granicę powrotu do poprzedniej wersji (rollbacku): poprzedni zestaw musi być nadal zgodny z aktualnym sprzętem i danymi. Szczegółowa sekwencja konkretnego wyrobu pozostaje informacją kontrolowaną.
Flota i koegzystencja wariantów
W praktyce nie wszystkie egzemplarze są aktualizowane jednocześnie. Część pozostaje w magazynie, część w naprawie, część ma nowszą rewizję sprzętu. Ewidencja powinna rozróżniać pakiet wydany, dostarczony, zapisany, zweryfikowany, aktywowany i dopuszczony do służby.
„Aktualizację wysłano” nie znaczy „flota ma nową konfigurację”. Stan as-maintained musi być możliwy do odczytania i porównania z macierzą dopuszczonych kombinacji. Wyposażenie naziemne oraz jego program ładujący również mają wersje i zakres zgodności.
Zmiana kompilatora, IP, schematu danych albo klucza autoryzującego może dotknąć wiele wariantów. Analiza wpływu obejmuje wymagania, hazardy, czasy, interfejsy, testy regresyjne, procedury obsługi i zdolność odzyskania. Mała poprawka źródła nie oznacza małego wpływu produktu.
Synteza: pamięć ma zachować znaczenie bitów
Najważniejszą funkcją pamięci nie jest samo utrzymanie zer i jedynek. Jest nią zachowanie ich znaczenia przez czas. Bit musi pozostać powiązany z wymaganiem, wersją sprzętu, formatem, testem, decyzją o dopuszczeniu i egzemplarzem.
Kompletny dowód odpowiada na pięć pytań:
- jaki dokładnie zestaw obrazów i danych jest aktywny;
- z jakich źródeł, narzędzi i ustawień powstał;
- z jakim sprzętem oraz wariantem jest zgodny;
- jakie testy i analizy wykonano na dokładnie tym zestawie;
- jak system zachowuje się po przerwanym zapisie, błędzie pamięci i nieudanym rozruchu.
Łatwa aktualizacja jest przewagą tylko wtedy, gdy nie tworzy niekontrolowanych wariantów. Dlatego współczesna konfiguracja bazowa obejmuje nie tylko sprzęt i program, lecz także obrazy logiki, kalibrację, dane, narzędzia oraz stan floty. Dopiero spójność całego grafu pozwala uznać, że pocisk ma określoną wykonywalną konfigurację.
Źródła
Uzupełniająco: NASA Software Engineering Handbook, 7.12 — Qualification of Flight Software, https://swehb.nasa.gov/spaces/7150/pages/16449844/7.12%2B-%2BQualification%2Bof%2BFlight%2BSoftware — związek V&V, testów, assurance, przeglądów i CM. Jest to przykład kosmiczny, nie wymaganie dla uzbrojenia.
pominięto interfejsy serwisowe, klucze, sekwencje odblokowania, konkretne formaty, progi, procedury ładowania oraz dane misji współczesnego uzbrojenia. Studia są historyczne lub hipotetyczne i służą wyłącznie szkoleniu z zarządzania konfiguracją.