Apollo Guidance Computer. Komputer, który zabrał człowieka na Księżyc

Strona główna Aktualności
Neil Armstrong przy module księżycowym misji Apollo 11
Neil Armstrong przy module księżycowym misji Apollo 11

O autorze

Na temat komputera pokładowego Apollo 11, który w 1969 roku zabrał człowieka na Księżyc, krążą różne legendy. Najbardziej osławiona jest chyba ta o mocy obliczeniowej porównywalnej do kalkulatora. A jak było naprawdę? 50. rocznica tego wydarzenia to idealna okazja, aby raz jeszcze przeanalizować dokumentację. Oto anatomia Apollo Guidance Computer.

Był 20 lipca 1969 roku, godzina 20:17 uniwersalnego czasu koordynowanego (22:17 w Polsce). Moduł księżycowy LM-5 "Eagle" sięga powierzchni Srebrnego Globu. 6 godzin później astronauta Neil Armstrong wypowie legendarne słowa: "To jeden mały krok dla człowieka, ale wielki skok dla ludzkości". Jako pierwszy człowiek w historii ma szansę spacerować po Księżycu, gdzie ostatecznie spędzi 2 godziny i 32 minuty. Dokładnie o kwadrans dłużej niż drugi Buzz Aldrin.

Trzeci członek misji Apollo 11, pilot Michael Collins, pozostaje na orbicie Księżyca za sterami modułu dowodzenia CSM-107 "Columbia". Choć nie dano mu szansy na kosmiczny spacer, odegra niezwykle istotną rolę – bez niego astronauci nie mogliby bezpiecznie powrócić na Ziemię.

W trakcie całej wyprawy zespołowi trzech astronautów towarzyszy komputer Apollo Guidance Computer (AGC), a właściwie to komputery, gdyż są one dwa. Jeden w module dowodzenia, drugi zaś w module księżycowym. W skrócie: wydają komendy silnikom, koordynują poszczególne fazy lotu, sterują radiolokacją, zbierają dane związane z profilem lotu niezbędne do zakończenia misji. Wszystko to, pomijając sprzęt, dzięki zestawowi programów napisanych w kodzie maszynowym.

Ale jakim cudem zbiór tak odpowiedzialnych zadań może zrealizować sprzęt z lat 60.? – zapytacie. Cudów tu nie ma. Są za to sprytne i często pionierskie rozwiązania techniczne.

Pierwszy taki na świecie

Tak, jak Neil Armstrong przetarł szlaki człowiekowi na Księżycu, tak AGC zapoczątkował erę układów scalonych. Został zaprezentowany w 1966 roku przez MIT Instrumentation Laboratory jako pierwszy komputer pokładowy oparty właśnie na "scalakach", a nie odrębnych tranzystorach.

Ponadto, przy wymiarach rzędu 61 x 32 x 17 cm i masie 32 kg, okazał się sprzętem zaskakująco kompaktowym jak na swoje czasy. Oferował przy tym wygodne urządzenie wejścia-wyjścia zwane DSKY, integrujące klawiaturę z 19 przyciskami i mieszczący do 21 znaków naraz wyświetlacz elektroluminescencyjny. Sprzęt działał oczywiście w trybie tekstowym, ale użytkownik nie wprowadzał komend, a tylko liczby. Określiwszy wcześniej ich znaczenie: rozkaz lub dane.

Komputer szyty na miarę

Niemniej was zapewne interesuje przede wszystkim to jak wydajny był AGC, prawda? To pytanie, na które z perspektywy czasu trudno odpowiedzieć, gdyż już w pierwszej połowie lat 70. rynek nabrał na tyle imponującej dynamiki, że każdy procesor szybko stawał się powolny i przestarzały.

Jak wynika z oficjalnej dokumentacji, komputer Apollo 11 potrzebował 23,4 µs na operację dodawania, którą mógł wykonać w jednej instrukcji. Czyli szczytowo powinien realizować około 42,7 tys. poleceń na sekundę. Intel 4004 z 1971 roku, uważany dzisiaj za pierwszy monolityczny procesor do zastosowań konsumenckich, w teorii w sekundzie radził sobie z ponad 92 tys. rozkazów. W praktyce jednak rzadko dobijał do tej wartości z powodu zbyt wąskiej magistrali zewnętrznej.

Wydajność kultowego modelu 8086 z 1978 roku szacuje się na 330 tys. instrukcji, a dzisiaj nawet wyszydzane czipy niskonapięciowe do laptopów osiągają wartości rzędu kilkudziesięciu milionów. Aczkolwiek to wciąż niewiele mówi o efektywności platformy. Kluczową rolę odgrywa architektura i specyficzne możliwości platformy – a te w AGC zostały od początku do końca zaprojektowane z myślą o realizacji załogowego lotu w komos i w tej roli sprawdziły się wyśmienicie.

Anatomia sukcesu AGC

Jak na swoje czasy, Apollo Guidance Computer był jednostką bardzo zaawansowaną. Składał się z ponad 16 tys tranzystorów. Dla odniesienia, Intel 4004 ma ich zaledwie 2,3 tys. Choć to porównanie jest mocno nieprecyzyjne, gdyż w przypadku AGC mówimy o całym komputerze, a układ Intela to tylko jednostka procesorowa, czyli dekoder i blok arytmetyczno-logiczny (ALU).

Tymczasem w przypadku sprzętu wykorzystanego w misji Apollo, prócz procesora, można wyróżnić jeszcze co najmniej sześć innych zasadniczych elementów: zegar kwarcowy, generator sekwencji stanów logicznych, układ inwersji priorytetów, magistralę wejścia-wyjścia, pamięci i zasilanie. Każdy z nich odegrał absolutnie kluczową rolę dla powodzenia księżycowej wyprawy.

Zegar o taktowaniu 2,048 MHz generował wszystkie impulsy niezbędne do zapewnienia przepływu danych, jak również przebiegi dla innych obwodów kontrolnych i ostrzegawczych. Dzięki zespołowi logicznych dzielników czasu i skalerów, częstotliwości były dostosowywane do konkretnych podsystemów. Procesor pracował z częstotliwością 1,024 MHz, a magistrala wejścia-wyjścia – 512 kHz. Idąc dalej, sygnały o niższych częstotliwościach wykorzystywano do inicjowania pewnych zdarzeń, na przykład 100 Hz to częstotliwość dla zegara czasu rzeczywistego.

Sam procesor też był ciekawy. Miał cztery 16-bitowe rejestry ogólnego przeznaczenia, a do tego całą masę rejestrów wyspecjalizowanych, w tym takie smaczki jak rejestr buforowy będący protoplastą systemu pobrań wstępnych. Choć prawdę mówiąc chodziło tylko o przyśpieszenie obliczeń przez skopiowanie operandów z pamięci do rejestru, a nie operacje na cache jak dzisiaj.

Ale wszystko to nic wobec zastosowanej technologii pamięci, które wykonano z ręcznie splecionych drucikami rdzeni ferrytowych. Stany logiczne warunkowane były kierunkiem namagnesowania, czy to w pamięci stałej czy ulotnej, a nie stanami bramek logicznych. W rezultacie dane uodporniono na utratę zasilania. Zaszkodzić im mogła tylko zmiana kierunku przepływu prądu. Pamięć stała zawierała 36 864 słów, czyli mogła pomieścić 74 kB danych, a pamięć ulotna – 2048 słów, czyli 4 kB.

Kropka nad i, geniusz programistów

Na nieszczęście programistów NASA, piętą achillesową AGC była ilość pamięci. To właśnie z tego powodu misję niemalże przerwano. Astronauci byli zaledwie 1800 metrów nad powierzchnią Księżyca, gdy na wyświetlaczu komputera pojawił się błąd nr 1202. Oznaczał przeciążenie pamięci i – jak wyszło później na jaw – był spowodowany nieoczekiwanym napływem informacji od radaru lądowania. Odpowiedzialność na siebie wziął 26-letni wówczas technik Steve Bales. Uznał, aby kontynuować podejście, za co otrzymał później Medal Wolności USA.

Tak czy inaczej, wszyscy od samego początku wiedzieli, że skromny RAM to problem. Programiści radzili sobie kreatywnymi sztuczkami, takimi jak częste nadpisywanie danych, nawet w obrębie tej samej fazy lotu, czy współdzielenie danych między procesami. A to z kolei umożliwił im przemyślany system operacyjny AGC, który potrafił prowadzić do ośmiu wątków naraz przez łączenie instrukcji na poziomie sprzętowym z poleceniami maszyny wirtualnej. Przy czym na tym etapie dokonywało się też niejako kolejkowanie zadań. System przydzielał priorytety właśnie w oparciu o model optymalnego wykorzystania pamięci. PC-ty nigdy nie doczekały się takiego poziomu optymalizacji.

Ostatecznie, o czym wszyscy doskonale wiemy, misja Apollo 11 zakończyła się sukcesem. AGC do lotów kosmicznych wykorzystywany był aż do roku 1975 roku, kiedy to odbył ostatnią podróż w ramach łączonej misji Sojuz-Apollo. Później jeszcze przez krótki czas służył w lotnictwie przy pracach nad systemem fly-by-wire. Dzisiaj pozostaje swoistym symbolem przekraczania granic w świecie komputerów. Pół wieku temu znalazł się na Księżycu, co nie przestaje imponować.

© dobreprogramy