Неділя, 22 Грудня, 2024

Як третя висадка людства на Місяць опинилася під загрозою і її врятував програмний хак бортового комп’ютера Apollo 14

Уже майже здійснивши третю в історії людства посадку на поверхню Місяця, місія Apollo 14 опинилася під загрозою зриву. Бортовий комп’ютер космічного корабля передав у центр управління польотом на Землі, що було натиснуто кнопку переривання посадки. Однак екіпаж повідомив, що кнопки не торкалися. Інженерам на Землі вдалося врятувати місію Apollo 14, виконавши один із найбільш геніальних хаків у комп’ютерній історії.

Початок проблем Apollo 14

По суті місія Apollo 14 мала виконати завдання, які були покладені на Apollo 13. Екіпаж – капітан Алан Шепард, пілот місячного модуля Ед Мітчел, пілот командного модуля Стю Рооса, – мав «прилунитися» на схилах Фра Мауро. Це територія поруч з екватором Місяця і трохи на південь від гігантського кратера Коперніка. Вважається, що схили Фра Мауро є викинутою породою під час створення Моря дощів. А це значить, що поверхня схилів може містити породу з глибин Місяця і пролити світло на походження супутника нашої планети.

Через вісім місяців після Apollo 13 інженери додали до Apollo 14 більше кисню та батарей, щоб люди мали більше шансів повернутися на Землю. Також внесли програмні зміни, наприклад, бортовий комп’ютер навчився розпізнавати зміну висоти поверхні Місяця при наближенні до зони посадки.

Підписуйтесь на наш канал в Telegram: https://t.me/techtodayua

О другій половині дня 31 січня 1971 року після 40-хвилинної затримки Apollo 14 стартував на ракеті-носії Saturn V. Особливість місій Apollo – місячний модуль необхідно вивести із захисного відсіку ракети-носія та стикувати його до командного модуля. При виконанні цього маневру два космічні кораблі не змогли стикуватися і затребували кількох спроб.

Наступні чотири дні шляху пройшли без проблем. Через 82 години Apollo 14 опинився на орбіті Місяця і ще за кілька годин для економії пального місячного модуля опустив свою орбіту до 14,5 км у перигеї (найнижча точка орбіти).

За чотири години до відправлення місячного модуля комп’ютери повідомили на Землю, що натиснуто кнопку переривання місії. Шепард доповів, що екіпаж не чіпав клавішу. Це означало одне – глюк у місячному модулі і кінець місії. Натиснення цієї кнопки миттєво запускає двигуни модуля для його старту з Місяця.

The source of all the trouble: the Abort pushbutton (along with its companion the Abort Stage pushbutton). This particular image is of the LM simulator currently residing at the <a href="https://www.cradleofaviation.org/">Cradle of Aviation Museum</a> in Long Island.

Геніальне рішення для порятунку

Бортовий навігаційний комп’ютер Apollo Guidance Computer «просунутий» навіть за сучасними мірками. Попри його надзвичайну повільність – 80 тисяч інструкцій за секунду, – він підтримував технології, які вважаються звичними у сьогоднішніх комп’ютерах. Серед них – підтримка байт-коду, майже як це реалізовано у Java, та оновлення програми дистанційно «по повітрю». При цьому обсяг оперативної пам’яті складав всього 2000 слів (це як 2000 байтів для сучасного комп’ютера).

Apollo Guidance Computer виконував два типи завдань – Jobs та Waitlist Tasks. Перші працювали незалежно за графіком, мали виділену пам’ять та підвищений пріоритет. Більшість програм класу Jobs писали так, щоб вони швидко виконувалися і зазвичай робили лише одну функцію.

Надійна робота Apollo Guidance Computer гарантувалася тим, що він завжди тримав вільні ресурси для виконання завдань. Якщо їх не виявиться, він видає код помилки 1202, що сталося під час місії Apollo 11.

Особливість Jobs полягала в тому, що їх можна було запускати з тієї ж точки, де вони припинили працювати. Дані зберігалися в пам’яті. Це врятувало Apollo 11, чий комп’ютер довелося кілька разів перезавантажувати.

Програми класу Waitlist Tasks були ще простішими та коротшими, ніж Jobs. Завдяки цьому вони не потребували виділеної пам’яті та керування процесами. Вони виконували критичні завдання, наприклад, зчитування дані акселерометра, вимкнення двигунів, перевірка кнопки переривання місії тощо. Ці завдання виконувалися через жорстко задані проміжки часу.

Apollo Guidance Computer міг обробляти до восьми завдань Jobs, п’ять із яких виконувалися незалежно. При цьому більш критичні завдання мали менший пріоритет. Наприклад, програма посадки на поверхню Місяця Program 63 мала один із найменших пріоритетів. Це довга і складна програма, тому її переривання більш пріоритетними програмами дозволяло виконувати нагальні завдання.

Геніальний хак

У NASA порекомендували екіпажу вручну виставити правильне значення комірки пам’яті, що містила прапорець переривання місії LETABBIT. Для цього можна було в потрібний момент перепрограмувати її. Або можна було ретельно постукати по бортовому комп’ютеру, що і зробили космонавти. Дія допомогла, але після одного оберту навколо Місяця проблема проявилася знову.

Стало зрозуміло, що проблема десь у кнопці переривання місії – шматок олова міг випадково замикати контакт. Однак розібрати кнопку в космосі виявилося неможливим.

Програміст Дон Айлс розробив процедуру для скидання прапорця LETABBIT. Для цього потрібна була модифікація програми Program 63, яка викликала низку Jobs та Waitlist Tasks. Одним із активованих нею завдань Jobs була програма SERVICER, яка зчитувала положення та прискорення корабля і планувала Routine R11 спрацьовувати кожні 0,25 секунд. R11, у свою чергу, спершу перевіряла прапорець LETABBIT – прапорець переривання місії.

І ось геніальний хак: змусити R11 вважати, що переривання місії вже в процесі. Тоді програма не реагує на статус кнопки переривання місії.

Проблема була в тому, що нормальна робота двигунів Apollo при зниженні – на тязі 10% протягом 26 секунд. Це дає час для вирівнювання корабля, після чого двигуни запускалися на 100%. При перериванні місії останню дію необхідно було виконати вручну.

Було ще кілька супутніх проблем від такого хаку, однак Айлс розробив способи їхнього пом’якшення.

Менш ніж за дві хвилини після початку процедури посадки команда змогла знову віддати керування посадкою комп’ютеру Apollo Guidance Computer.

Наче було мало проблем

Екіпажу залишалося ще вісім хвилин, щоб прибути на Місяць. Однак через чотири хвилини, перебуваючи на висоті 11 км від поверхні, Шепард та Мітчелл помітили, що є проблеми з радаром. Без нього не можна було визначити точну висоту та швидкість зниження.

Радар не показував висоту – з невідомих причин радар переключився з дальнього на ближній режим. На висоті 9700 метрів Мітчел повідомив Землю про проблему. У центрі керування порадили перезавантажити радар.

На висоті близько 3700 кілометрів вдалося залучити альтернативну систему, яка дозволила здійснити посадку.

Після місії

Програмісти зрозуміли, що потрібний додатковий захист від випадкових збоїв. У код Apollo Guidance Computer додали ще одну змінну, яка дозволяла екіпажу обходити кнопки переривання місії.

Також полагодили радар – йому заборонили перемикатися між режимами, якщо він не міг коректно спозиціонувати себе в поточному режимі.

За матеріалами: Arstechnica

Євген
Євген
Євген пише для TechToday з 2012 року. Інженер за освітою. Захоплюється реставрацією старих автомобілів.

Vodafone

Залишайтеся з нами

10,052Фанитак
1,445Послідовникислідувати
105Абонентипідписуватися