Komputer pokładowy w programie Apollo

Z Wikipedii, wolnej encyklopedii
Komputer zastosowany w module dowodzenia i w module księżycowym
18 bajtów zawartych w każdym sektorze 5 cm × 7.5 cm, utkanych ręcznie w pierścieniach ferrytowych

Komputery pokładowe programu Apollo ang. Apollo Guidance Computers (AGC) służyły do kierowania Modułem Dowodzenia/Serwisowym ang. Command/Service Module (CSM) i modułem księżycowym ang. Lunar Module (LM). Głównym zadaniem komputerów programu Apollo była realizacja programów zgromadzonych w pamięciach komputerów. Programy były napisane w języku maszynowym i nazywały się Instrukcje Podstawowe. Najmniejszą jednostką adresowalną w AGC było słowo maszynowe o długości 16 bitów. Instrukcje podstawowe mogły być słowami maszynowymi przenoszącymi instrukcje lub słowami maszynowymi przenoszącymi dane.

Chociaż firma IBM wprowadziła pojęcie bajt w latach sześćdziesiątych, to w podręczniku NASA opisującym komputer modułu księżycowego i w podręczniku NASA opisującym komputer modułu dowodzenia, pojęcie bajt się nie pojawia. Dla porównania z pojemnością dzisiejszych twardych dysków i RAM-u, pamięci komputerów programu Apollo można podać w bajtach. W komputerach PC, w zależności od architektury, dla procesora słowem jest przynajmniej[a] 2-bajtowy (16-bitowy) element danych. W każdej misji programu Apollo używano dwóch identycznych komputerów, jeden ang. Command Module Computer (CMC) na pokładzie modułu dowodzenia, drugi ang. Lunar Guidance Computer (LGC) na pokładzie modułu księżycowego.

AGC, które w programie Apollo służyły do kierowania CSM i kierowania LM podczas lądowania na powierzchni Księżyca, nie posiadały żadnego nośnika pamięci masowej używanego obecnie. W celu realizacji oprogramowania komputery posiadały po 74 kB informacji zgromadzonej w toroidalnych rdzeniach ferrytowych.

Odpowiedzialnymi za program komputerowy dla modułu księżycowego byli Peter Adler i Don Eyles z pracowni MIT Instrumentation Laboratory.

Skład komputera[edytuj | edytuj kod]

Komputery modułu księżycowego i modułu dowodzenia zawierały:

Zegar[edytuj | edytuj kod]

Zegar generował wszystkie impulsy synchronizujące konieczne do zapewnienia przepływu danych z jednego obszaru komputera do innego. Zegar również generował inne przebiegi, które były wykorzystywane przez obwody ostrzegawcze komputera i inne obszary statku kosmicznego. Był głównym źródłem czasowych sygnałów produkowanych dla wszystkich podsystemów.

Częstotliwość zegara głównego, generowana przez generator, była podawana do dzielnika czasu zbudowanego na układach logicznych. Logiczny dzielnik czasu, dzielił częstotliwość zegara głównego na impulsy, będące podstawowymi jednostkami czasu komputera. Podstawowa szybkość taktowania zegara wynosiła 1,024 kpps ang. kilo packets per second (kpps). Następnie częstotliwość taktowania zegara była podawana do skalera i do generatora impulsów czasu. Skaler dokonywał dalszego podziału impulsów z wyjścia układu logicznego na impulsy i sygnały które były użyte do bramkowania[b] i do generowania wyjść sygnału tempa taktowania i naliczania czasu. Generator impulsu czasu produkował zestaw powtarzających się impulsów czasu, które określały specyficzne cykle pamięci podczas których, następował dostęp do pamięci i przepływ danych wewnątrz komputera[1].

Licznik czasu rzeczywistego[edytuj | edytuj kod]

W liczniku pamięci czasu głównego był utrzymywany czas rzeczywisty, który był używany w rozwiązywaniu problemów kierowania i nawigacji CSM, CM i LM. Licznik czasu głównego zapewniał 745,65 godzin (w przybliżeniu 31 dni). Przyrostowe impulsy generowane przez zegar były wysyłane do sekcji kontroli priorytetu w celu zwiększania przyrostów głównego licznika czasu. Czas AGC był synchronizowany z upływającym ziemskim czasem ang. Ground Elapsed Time (GET) który zaczynał się, „czas 0”, podczas startu statku kosmicznego. Czas AGC był transmitowany do Centrum Łączności Kierowania Załogowymi Lotami Kosmicznymi (ang.) Manned Space Flight Network (MSFN) raz na sekundę w celu porównania[2].

Generator sekwencji[edytuj | edytuj kod]

Generator sekwencji wykonywał instrukcje zgromadzone w pamięci. Przetwarzał kody instrukcji i generował impulsy kontrolne regulujące odpływ danych z komputera. W skład generatora sekwencji wchodziły generatory:

  1. generator kodu kolejności
  2. generator poleceń
  3. generator impulsów kontrolnych

Generator sekwencji odbierał sygnały kodu kolejności od centralnego procesora i od kontroli priorytetów. Sygnały te były zakodowane przez procesor kodu kolejności i dostarczane do generatora poleceń. Inny zestaw impulsów sterujących był używany do bramkowania sygnałów kodu kolejności do generatora sekwencji na koniec każdej instrukcji. Generator poleceń dekodował impulsy wejściowe i generował instrukcje poleceń, które były dostarczane do generatora impulsów kontrolnych[3].

Procesor centralny[edytuj | edytuj kod]

Procesor centralny:

  • wykonywał operacje arytmetyczne
  • przechowywał informacje wychodzące i przychodzące do pamięci
  • poprzez kontrolę parzystości wykrywał przekłamania w słowach maszynowych przychodzących z pamięci
  • generował bit parzystości w słowach maszynowych zapisywanych do pamięci

Procesor centralny składał się z:

  • rejestrów realizowanych poprzez dwustanowe przerzutniki
    • zapisujące
    • kasujące
  • wzmacniaczy zapisu
  • rejestrów buforów pamięci
  • rejestrów adresów pamięci
  • dekodera
  • logiki parzystości

Generalnie procesor centralny wykonywał operacje dyktowane przez Instrukcje Podstawowe programu zawartego w pamięci stałej. Komunikacja wewnątrz centralnego procesora była realizowana poprzez wzmacniacze zapisu. Dane przepływały do, lub z pamięci do rejestrów, pomiędzy indywidualnymi rejestrami, lub do centralnego procesora z zewnętrznych źródeł. Dane umieszczone na liniach zapisu były kierowane do określonego rejestru lub innej części centralnego procesora do zapisu, kasowania lub odczytu[4].

Pamięci[edytuj | edytuj kod]

Pamięć stała komputerów pokładowych programu Apollo
RAM w Apollo

Każdy komputer posiadał dwa typy pamięci, kasowalną i stałą. Pamięć kasowalna mogła być zapisywana i odczytywana. Pamięć stała służyła tylko do odczytu ang. Read Only Memory (ROM). Zawierała programy użytkowe, wartości stałe, współrzędne selenograficzne i astronomiczne, używała 36 864 terminów lub słów, każdy o długości 16 bitów[c]. W sumie pamięć stała była zawarta w 74 kB. Pamięć kasowalna była pamięcią ferrytową, o dostępie swobodnym ang. Random access memory (RAM) i o destrukcyjnym odczycie. Pamięć kasowalna była użyteczna w gromadzeniu wartości zmiennych, w obliczeniach, lub w rejestrach do operacji logicznych i posiadała tylko 2 048 16 bitowych słów, czyli 4 kB. Dane zgromadzone w pamięci kasowalnej mogły być zmieniane lub aktualizowane. To, co zdecydowanie różni pamięć kasowalną od dzisiaj stosowanej pamięci RAM to fakt, że dane zawarte w pamięci RAM giną po wyłączeniu komputera, a giną, ponieważ informacje w niej zawarte, są stanami układów logicznych, które istnieją dopóki podawane jest napięcie zasilania.

Pamięć stała była wykonana z toroidalnych rdzeni ferrytowych. Elementy programów użytkowych były zakodowane w rdzeniach ferrytowych utkanych ręcznie zgodnie ze wzorem splotu. Pamięć stała była niezniszczalna w zależności od istnienia lub nie, napięcia zasilania. Odczyt danych z tej pamięci nie miał wpływu na jej zawartość[5].

Pamięć kasowalna była zbudowana z podobnych materiałów, lecz inaczej skonstruowana. Dla pamięci kasowalnej gęstość zapisu w zależności od ilości rdzeni ferrytowych do tego wykorzystanych, wynosiła jedno słowo na 16 rdzeni ferrytowych; dla pamięci stałej ten wskaźnik wynosił 8 rdzeni ferrytowych na jedno słowo maszynowe. Informacje zawarte w pamięci kasowalnej nie znikały po odłączeniu napięcia zasilania.

Obydwie pamięci były rdzeniami magnetycznymi służącymi do przechowywania informacji, jednakże rdzenie magnetyczne były wykorzystane różnie w obydwu typach pamięci. Dalszy opis wymaga od czytelnika znajomości podstawowych właściwości ferrytowych rdzeni magnetycznych opisanych przez krzywą pętli histerezy. Rdzeń jest statycznym urządzeniem przechowującym pamięć, posiadającym dwa stany stabilne. Może on być namagnesowany w jednym lub drugim kierunku, prądem o adekwatnym natężeniu przepływającym przez przewód przechodzącym przez rdzeń. Kierunek przepływu prądu definiował kierunek namagnesowania rdzenia. Rdzenie zachowywały namagnesowanie aż do momentu kiedy prąd o przeciwnym kierunku przełączył kierunek namagnesowania. Prądy płynące różnymi przewodami przez ten sam rdzeń powodowały skutki stosowne do prądu będącego ich algebraiczną sumą. Przewody odczytu przechodzące przez przełączany rdzeń[d] indukowały impuls[6].

Każde słowo maszynowe było umiejscowione stosownie do swojego adresu. Adresy pamięci stałej były przypisane do słów maszynowych jako wskazówka kolejności w jakiej były one realizowane; bloki adresów były rezerwowane dla danych takich jak wielkości stałe i tabele. Informacja w pamięci stałej była umiejscowiona na zawsze poprzez utkanie jej według określonego wzoru w magnetycznych rdzeniach. W pamięci kasowalnej informacje były umieszczane poprzez klawiaturę urządzenia DSKY, poprzez sekcję wejścia, lub z programów użytkowych[7][8].

W pamięci słowo maszynowe składało się z jednego bitu parzystości, 14 bitów przenoszących znaczenie, 1 bitu przenoszącego znak. Binarnie 1 w bicie znaku wskazywało liczbę ujemną, a binarnie 0 w bicie znaku wskazywało liczbę dodatnią. Słowa maszynowe przenoszące instrukcje zawierały 12 bitowy kod adresu i 3 bitowy kod polecenia. Normalnie kod adresu przedstawiał lokalizację słowa w pamięci lub w centralnym procesorze. Kod polecenia definiował przepływ danych wewnątrz komputera, a kod adresu wybierał dane, które były użyte do obliczeń.

Kod polecenia reprezentował operację, która była realizowana na danych, których lokalizację reprezentował kod adresu. Kod polecenia każdej instrukcji był wprowadzany do generatora sekwencji, który sterował przepływem danych i wytwarzał różne sekwencje impulsów kontrolnych dla każdej instrukcji. Każda instrukcja była poprzedzona inną instrukcją. Do określenia kolejności, według której instrukcje miały być realizowane normalnie były przechowywane w kolejnych lokalizacjach pamięci. Adres instrukcji, która miała być realizowana jako następna wywodził się od adresu instrukcji aktualnie realizowanej poprzez dodanie do adresu wartości jeden. Zakończenie realizacji instrukcji następowało wtedy, gdy kod realizacji następnej instrukcji został przesłany do generatora sekwencji, a stosowny adres został przesłany do centralnego procesora.

Komputery działały w środowiskach, w których wiele parametrów i warunków zmieniało się w czasie w sposób ciągły. Komputery działały operując nad jednym tylko elementem w tym samym czasie. Dlatego do przetwarzania parametrów, czas przydzielony do określonego sprzętu komputerowego, był dzielony. Przydział czasu był realizowany poprzez wyznaczenie priorytetów dla poszczególnych funkcji procedur każdego komputera[9].

DSKY[edytuj | edytuj kod]

Monitor i klawiatura komputera Apollo

Do współpracy z komputerem astronauci używali urządzenia będącego połączeniem wyświetlacza ang. display i klawiatury ang. keyboard, i z liter tych dwóch pojęć powstała wspólna nazwa DSKY. Klawiatura DSKY nie była typu QWERTY, lecz klawiaturą numeryczną z kilkoma klawiszami funkcyjnymi. W celu wprowadzenia polecenia użytkownik musiał nacisnąć klawisz „Verb”, poprzedzony liczbą, która korespondowała z określonym zadaniem, które miał wykonać komputer lub urządzenie peryferyjne komputera. W celu wprowadzenia danych użytkownik naciskał klawisz „Noun” z odpowiednią liczbą.

System operacyjny[edytuj | edytuj kod]

Zespół TIM opracował wielozadaniowy system operacyjny działający w czasie rzeczywistym. System wykorzystywał przerwania, realizował zadania zaplanowane w czasie, takie jak, punktualne włączenie silnika opadania modułu księżycowego, jak również komputer określał pierwszeństwo wykonania operacji, dla sytuacji gdy zadania kumulowały się w małym przedziale czasowym. Każde zaplanowane zadanie miało pewną ilość przydzielonej pamięci kasowalnej do wykorzystania wtedy gdy nastąpiła taka potrzeba. System został tak zaprojektowany, aby zachowywał najważniejsze informacje potrzebne do restartu komputera, co pozwoliło przetwarzać ważne informacje, nawet po restarcie komputera, po uprzednim zawieszeniu się komputera.

Przy małej ilości dostępnej pamięci kasowalnej, informatycy zmuszeni byli planować użycie tego samego adresu pamięci do różnych celów, w różnych czasach. Przykładowo dane zawierające wysokość nad powierzchnią księżyca w fazie lądowania, mogły być nadpisane na koordynatach obiektów astronomicznych ustalonych przez Optyczny Teleskop Astronomiczny ang. Alignment Optical Telescope (AOT) niezbędnych do zorientowania platformy bezwładnościowej IMU, ponieważ dane te (koordynaty), zostały już wykorzystane, a następna obserwacja gwiazd i orientacja IMU miały się odbyć przed startem członu wznoszenia z powierzchni Księżyca.

Komputer i system operacyjny były tak opracowane, aby trzymały się krytycznych zadań, przykładowo takich jak prowadzenie cyfrowego autopilota, nawet jeśli inne części oprogramowania powodowały problemy. W dniu 20 lipca 1969 r. Neil Armstrong i Buzz Aldrin schodzili modułem księżycowym na powierzchnię srebrnego globu. Byli około 1800 metrów (6000 stóp) nad jego powierzchnią, gdy na wyświetlaczu komputera pojawiło się ostrzeżenie: Błąd nr 1202. Co ten błąd oznaczał astronautów powiadomiła naziemna kontrola lotu, a oznaczał on przeciążenie pamięci. Odpowiedzialność za podejmowanie decyzji, czy błąd był istotny, czy też nie[e], spadał na 26-letniego wówczas geniusza komputerowego Steve'a Balesa, eksperta systemów informacyjnych kierowania lotem modułu księżycowego. Błąd był spowodowany nieoczekiwanym napływem informacji od radaru lądowania i informacje te, jako drugorzędne, można było zignorować, ale nie wynikało to wprost z komunikatu: Błąd nr 1202. W ciągu następnych minut błąd powtórzył się kilka razy, ale nie wstrzymało to lądowania, ani nie zmieniło decyzji Steve'a Balesa. Za podjęcie decyzji o kontynuacji, Bales i trzech astronautów misji Apollo 11 otrzymali Medal Wolności USA[8].

Komputer w LM[edytuj | edytuj kod]

Wnętrze symulatora modułu księżycowego i widok DSKY na pierwszym planie

Modułem LM wykonującym przelot od CSM do powierzchni Księżyca i z powrotem, nawigował i kierował komputer modułu księżycowego ang. LM Guidance Computer (LGC). LGC był centralnym urządzeniem przetwarzania danych, Systemu Kierowania, Nawigacji i Podsystemu Sterowania ang. Guidance, Navigation and Control Subsystem (GN&CS). LGC przetwarzał dane, wydawał komendy i sygnały dla wielu podsystemów. Przechowywał istotne dane do odtworzenia trajektorii lotu podczas opadania na powierzchnię Księżyca, lądowania, podczas startu i wznoszenia z powierzchni Księżyca.

Klawiatura i zestaw wyświetlaczy komputera LM znajdował się na panelu 4 w urządzeniu DSKY. Komputer kierowania LM:

Komputer w CSM[edytuj | edytuj kod]

Wyświetlacz i klawiatura komputera modułu dowodzenia zamontowane na panelu głównym

System komputerowy modułu dowodzenia składał się z:

  • komputera modułu dowodzenia ang. Command Module Computer (CMC)
  • dwóch urządzeń będących połączeniem wyświetlacza z klawiaturą (DSKY)

CMC wraz z jednym DSKY znajdowało się na panelu głównym, a drugie DSKY znajdowało się w dolnej wnęce modułu dowodzenia.

CMC wykonywał następujące operacje:

  • orientował stabilny człon platformy bezwładnościowej modułu dowodzenia (IMU).
  • pozycjonował ustawienia sekstantu
  • rozwiązywał zagadnienia związane z kierowaniem CSM lub CM
  • gromadził dane związane z profilem lotu konieczne do zakończenia misji
  • wydawał głównemu silnikowi modułu CSM komendy odnośnie do jego włączania i wyłączania oraz kierunku ciągu
  • wydawał komendy silnikom RCS odnośnie do ich włączania i wyłączania
  • zbierał dane od przyśpieszeniomierzy systemu bezwładnościowego i dostarczał zmiany prędkości do CMC w celu oszacowania prędkości całkowitej[11]

Komputer w C-8 Crusader[edytuj | edytuj kod]

AGC w samolocie C-8 Crusader

Komputer pokładowy programu Apollo był użyty w pierwszej fazie eksperymentalnego programu wdrażania techniki cyfrowego fly-by-wire przeprowadzanego na samolocie F-8 Crusader, komputer był centralnym elementem nowych technologii użytych w tym programie. Komputer AGC przepracował ponad 2000 godzin bez uszkodzeń. Kłopoty, które występowały w pierwszych lotach, zostały naprawione poprzez wymianę pamięci kasowalnej[12][13].

Uwagi[edytuj | edytuj kod]

  1. W szerszym rozwinięciu: W komputerach PC, w zależności od architektury, dla procesora słowem jest 2-bajtowy (16-bitowy), 4-bajtowy (32-bitowy) lub 8-bajtowy (64-bitowy) element danych
  2. Bramkowanie - cyfrowa realizacja dowolnej funkcji logicznej
  3. Każde słowo maszynowe zawierało 2 bajty informacji
  4. Wzbudzanie wybranego rdzenia było dokonywane przez jednoczesne wzbudzenie dwoma prostopadłymi przewodami adresowymi
  5. Problem polegał na szybkim podjęciu decyzji czy przerwać misję, czy kontynuować

Przypisy[edytuj | edytuj kod]

  1. LM 10 Handbook and Subsequent Volume 1. [w:] Central procesor/Timer [on-line]. National Aeronautics and Space Administration Apollo Project Office, 15.12.1968 - 01.04.1971. s. 68. [dostęp 2012-04-18]. (ang.).
  2. LM 10 Handbook and Subsequent Volume 1. [w:] Central procesor [on-line]. National Aeronautics and Space Administration Apollo Project Office, 15.12.1968 - 01.04.1971. s. 69. [dostęp 2012-04-18]. (ang.).
  3. LM 10 Handbook and Subsequent Volume 1. [w:] Sequence generator [on-line]. National Aeronautics and Space Administration Apollo Project Office, 15.12.1968 - 01.04.1971. s. 68. [dostęp 2012-04-18]. (ang.).
  4. LM 10 Handbook and Subsequent Volume 1. [w:] Central processor [on-line]. National Aeronautics and Space Administration Apollo Project Office, 15.12.1968 - 01.04.1971. s. 68. [dostęp 2012-04-18]. (ang.).
  5. LM 10 Handbook and Subsequent Volume 1. [w:] 2.1.4.3.1. LM Guidance Computer [on-line]. National Aeronautics and Space Administration. s. 113. [dostęp 2012-05-29]. (ang.).
  6. Apollo Operations Handbook Blok II Spacecraft. [w:] Command Module Computer/ Memory [on-line]. National Aeronautics and Space Administration, 15-04-1969. s. 79. [dostęp 2012-06-01]. (ang.).
  7. LM 10 Handbook and Subsequent Volume 1. [w:] Memory [on-line]. National Aeronautics and Space Administration. s. 120. [dostęp 2012-05-28]. (ang.).
  8. a b The Lunar Module Computer. Apollo Lunar Surface Journal, 1999. [dostęp 2012-05-20]. (ang.).
  9. LM10. [w:] LM Guidance Computer [on-line]. NASA. s. 113. [dostęp 2012-05-30]. (ang.).
  10. LM 10 Handbook and Subsequent Volume 1. [w:] LM Guidance Computer [on-line]. National Aeronautics and Space Administration Apollo Project Office, 15.12.1968 - 01.04.1971. s. 60. [dostęp 2012-04-18]. (ang.).
  11. Apollo Operations Handbook Blok II Spacecraft. [w:] Computer Subsystem [on-line]. National Aeronautics and Space Administration, 15-04-1969. s. 75. [dostęp 2012-06-01]. (ang.).
  12. Apollo display and keyboard unit (DSKY) used on F-8 DFBW. Dryden Flight Research Center, 5 lutego, 1996. [dostęp 2012-06-15]. [zarchiwizowane z tego adresu (2013-02-27)]. (ang.).
  13. B. A. Peterson, G. E. Krier i C. R. Jarvis: DEVELOPMENT AND FLIGHT TEST OF A DIGITAL FLY-BY-WIRE F8.. Dryden Flight Research Center, Styczeń 1973. [dostęp 2012-06-21]. (ang.).