아폴로 11 온보드 소프트웨어가 실시간 과부하를 극복한 비밀 – 마가렛 해밀턴의 혁신적인 설계 원리
SEO 키워드: 아폴로 11, 마가렛 해밀턴, 실시간 소프트웨어
# 서론 – “우주선이 멈추면 인류는 멈춘다”
1969년 7월 20일, 인류는 처음으로 달에 발을 디뎠다. 하지만 그 순간, 달 착륙선 아폴로 11의 온보드 컴퓨터인 AGC(아폴로 유도 컴퓨터) 가 갑작스러운 과부하에 직면했다는 사실을 아시나요?
컴퓨터는 “1202”, “1201”이라는 프로그램 알람을 내보냈고, 이는 곧 시스템이 실시간으로 과부하 상태에 놓였다는 경고였다. 만약 이 알람을 무시하고 시스템이 멈추었다면, 달 착륙은 물론 전체 미션이 좌절됐을 것입니다.
이 위기를 극복한 핵심은 바로 마가렛 해밀턴이 설계한 “우선순위 기반 스케줄링”과 태스크 드롭(task dropping) 메커니즘이었습니다. 이번 글에서는 그 원리를 초보자도 이해하기 쉽게 풀어보고, 오늘날 실시간 소프트웨어 개발에 적용할 수 있는 교훈을 정리합니다.
# 1️⃣ 아폴로 11 온보드 컴퓨터, 그 구조와 한계
| 요소 | 설명 |
|------|------|
| CPU | 2 MHz, 16 비트 워드(15 비트 데이터 + 1 비트 짝수/홀수) |
| 메모리 | 72 KB ROM, 4 KB RAM |
| 운영 체제 | 비선점형 코어 루프(interrupt‑driven) |
| 프로그램 | 프라임(항법)와 로버(제어) 두 개의 독립된 소프트웨어 모듈 |
당시 기술 수준을 생각하면, 이 사양은 극히 제한적이었습니다. 특히, 동시에 여러 센서와 엔진을 제어해야 하는 달 착륙 단계에서는 CPU가 매 초마다 수천 번의 연산을 수행해야 했습니다.
# 2️⃣ 과부하 상황과 프로그램 알람이 의미하는 것
착륙 직전, 달 모듈이 데이터 버스 충돌(데이터 전송이 겹쳐서 오류 발생) 로 인해 AGC는 ‘1202’와 ‘1201’ 알람을 발생시켰습니다.
1202 알람: “오버플로우 – 인터럽트가 처리되지 못함”
1201 알람: “오버플로우 – 메모리 접근 오류”
즉, CPU가 할당된 시간 안에 모든 작업을 끝내지 못했다는 뜻이었습니다.
# 3️⃣ 마가렛 해밀턴이 만든 “우선순위 기반 스케줄링”
# 3.1 태스크에 우선순위 부여
해밀턴은 모든 프로그램을 우선순위 레벨(1~4) 로 나누었습니다.
| 레벨 | 담당 작업 | 설명 |
|------|----------|------|
| 1 | 비상 제어 | 엔진 점화, 고도 유지 등 생존에 직결 |
| 2 | 항법 계산 | 위치·속도 추정 |
| 3 | 데이터 수집 | 센서값 읽기 |
| 4 | 로깅·디버그 | 부가적인 기록 |
CPU는 매 사이클마다 가장 높은 우선순위의 작업을 먼저 실행하고, 시간이 부족하면 낮은 우선순위 작업을 버립니다(task dropping).
# 3.2 인터럽트와 비동기 처리
AGC는 인터럽트가 발생하면 현재 실행 중인 작업을 중단하고, 인터럽트 처리 루틴을 실행합니다. 이때도 우선순위가 적용돼, 비상 제어 인터럽트는 언제든지 즉시 처리됩니다.
# 4️⃣ 실제 착륙 시 “태스크 드롭”이 어떻게 작동했나?
착륙 중에 발생한 과부하는 ‘데이터 버스 충돌’ 로 인해 인터럽트가 급증한 것이 원인이었습니다.
우선순위 1(엔진 제어) 작업은 절대로 중단되지 않았습니다.
우선순위 2·3 작업은 일정 시간 동안 CPU가 바빠지면 스킵되었습니다.
우선순위 4(로깅) 작업은 가장 먼저 버려졌고, 이는 알람이 발생해도 시스템이 멈추지 않은 핵심 이유였습니다.
결과적으로, 핵심 제어 로직은 계속 실행되었고, 착륙선은 안전하게 달 표면에 내려앉을 수 있었습니다.
# 5️⃣ 오늘날 실시간 소프트웨어에 주는 교훈
| 교훈 | 현대 적용 예시 |
|------|----------------|
| 우선순위 기반 스케줄링 | 자동차 ECU, 항공기 플라이트 컨트롤 |
| 태스크 드롭 설계 | IoT 디바이스의 전력 관리, 로봇 실시간 제어 |
| 명확한 인터럽트 계층 | 실시간 OS(RTOS)에서 ISR 우선순위 설정 |
특히 실시간 소프트웨어를 개발할 때는 “무조건 모든 작업을 수행한다”는 사고보다 “핵심 작업을 보장하고 부수 작업은 포기한다”는 사고가 더 안전합니다.
# 결론 – 당신도 오늘부터 적용해 보세요!
아폴로 11의 성공은 단순히 하드웨어가 뛰어났기 때문이 아니라, 마가렛 해밀턴이 만든 우선순위 기반 스케줄링과 태스크 드롭이라는 소프트웨어 설계 철학 덕분이었습니다.
프로젝트에 우선순위 레벨을 정의하고, 핵심 로직을 명확히 구분하세요.
실시간 시스템에서는 비상 상황을 위한 인터럽트와 태스크 포기 전략을 미리 구현해 두세요.
기존 코드에 우선순위 기반 스케줄러를 적용해 보며, 과부하 테스트를 반드시 진행하세요.
당신의 다음 프로젝트가 “달에 착륙”하는 순간이 될 수도 있습니다. 지금 바로 우선순위 설계를 시작해 보세요!
이 글이 도움이 되었다면, 댓글과 공유로 더 많은 사람에게 알려 주세요. 그리고 최신 실시간 소프트웨어 개발 팁을 놓치지 않으려면 구독 버튼을 눌러 주세요!
Comments
Join the discussionNo comments yet. Be the first to comment.