SWI 임무용 고신뢰성 소프트웨어를 위한 도메인 전용 언어 hO 매뉴얼

SWI 임무용 고신뢰성 소프트웨어를 위한 도메인 전용 언어 hO 매뉴얼
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

hO는 Oberon을 기반으로 만든 제한된 방언으로, JUICE 임무의 SWI 비행 소프트웨어에 적용돼 C 코드에서 발생할 수 있는 메모리 오류와 논리적 실수를 사전에 차단한다. 문법이 단순하고 정적 분석이 용이하도록 설계돼 코드 가독성을 높이고, 메시지‑패싱과 상태 머신을 언어 차원에서 지원한다.

상세 분석

본 논문은 ESA JUICE 미션의 SWI(Science Wave Instrument) 비행 소프트웨어에 적용된 hO 언어의 설계 배경, 구조, 구현 방식을 상세히 기술한다. hO는 Oberon의 간결한 구문을 그대로 계승하면서 문자열·실수·다차원 배열·레코드 상속·WITH 구문 등 위험 요소가 많은 기능을 전면 제거하였다. 특히 포인터 연산과 동적 메모리 할당을 금지하고, 포트(port) 타입만을 통해 제한된 메시지 전송을 허용함으로써 메모리 누수·버퍼 오버플로·NULL 참조와 같은 전통적인 C 오류를 근본적으로 차단한다.

언어 수준에서 14개의 MISRA‑C 2004 규칙 중 116개를 자동으로 만족시키며, “Power of 5 Ten” 규칙 중 9개를 불필요하게 만든다. 이는 정적 타입 검사와 컴파일러가 생성하는 ANSI C99 코드가 안전성을 보장하도록 설계된 결과이다. hO는 모듈(Module) 개념을 핵심으로 하여 각 모듈이 독립적인 전역 변수 집합을 보유하고, IMPORT 구문을 통해 다른 모듈의 공개 변수에 접근한다. 모듈 인스턴스화가 가능해 동일한 하드웨어 인터페이스를 복수로 구현할 수 있다(예: 두 개의 SpaceWire 인터페이스).

메시지 전달은 포트 타입의 u8 배열(최대 4 KB)로 구현되며, 전송 시 복사가 일어나지 않는다. 포트는 비어 있거나 하나의 메시지만 보유하도록 강제돼, 메시지 큐 오버플로와 메모리 고갈을 방지한다. 런타임 시스템은 약 400 줄의 C 코드로 구성돼, 메모리 블록(4 KB) 풀을 관리하고 NEW/DISPOSE 연산으로 블록을 할당·해제한다. 모든 절차는 인라인 처리되고 전역 변수를 사용하지 않아 메모리 레이아웃이 모듈별로 완전히 독립적이다.

hO 컴파일러는 Scheme 기반으로 구현되었으며, Silex 렉서와 PEG 파서를 이용해 Oberon 방언을 파싱한다. 타입 검사와 정적 분석을 수행한 뒤 ANSI C99 코드를 생성하고, Graphviz를 활용해 모듈 간 메시지 흐름을 시각화한다. 또한 인터페이스만 생성하는 제한 모드도 제공해 순환 의존성을 해결한다.

디자인‑바이‑컨트랙트(Design‑by‑Contract) 기능을 통해 런타임에 전후 조건(REQUIRE, PROVIDE, INVARIANT)을 선언할 수 있다. 계약은 부울 함수 형태이며, VAR 파라미터를 허용하지 않아 부작용을 최소화한다.

결과적으로 hO는 코드 라인 수를 33 636 LOC에서 2 853 LOC로 약 91 % 감소시키면서, 가독성과 검증 가능성을 크게 향상시켰다.


댓글 및 학술 토론

Loading comments...

의견 남기기