운영체제 상태와 히스토리
이 논문은 UNIX 계열 커널의 프로세스 전환 코드를 재귀 함수와 이벤트 시퀀스 모델로 정형화하여, 상태와 히스토리를 명시적으로 추적하고, 안전성·활성·실시간성 같은 핵심 속성을 수학적으로 증명하는 방법을 제시한다.
저자: Victor Yodaiken
이 논문은 UNIX‑계열 커널에서 프로세스 전환을 담당하는 switch 루틴을 수학적으로 모델링하고, 그 모델을 통해 시스템의 상태와 히스토리를 명시적으로 추적·검증하는 방법을 제시한다. 먼저, V6 UNIX의 switch 코드를 살펴보면, save() 함수가 현재 실행 중인 프로세스의 컨텍스트를 저장하고 1을 반환한다. if‑문 안에서 resume(next) 를 호출하면, 저장된 상태를 복원하고 다음 프로세스로 전환한다. 이 흐름은 “저장‑복원”이라는 두 단계 이벤트로 나뉘며, 각각을 재귀 함수 형태의 관계식으로 표현한다.
저자는 시스템 전체를 이벤트 시퀀스 w 로 나타내고, w ⊕ a 를 이벤트 a 를 적용한 뒤의 새로운 시퀀스로 정의한다. 이를 기반으로 Count(w) 같은 단순 누적 함수부터, Loc(w;p) 로 프로세스 p 가 현재 어느 코드 라인에 있는지를 나타내는 복합 함수까지 다양한 상태 변수들을 정의한다. 예를 들어, Loc(w;p) = (CFunc(w;p), CLine(w;p)) 은 현재 함수와 라인 번호를 반환하고, V(w;p;x) 는 프로세스 p 의 변수 x 값을 반환한다.
핵심 명세는 Proposition 1.1, 2.1, 2.2 로 구성된다. Proposition 1.1 은 “안전” 속성을 정의한다. 즉, 스위치 진입점에서 목표 프로세스로 전환된 뒤, 다시 원래 프로세스로 돌아오는 경로가 반드시 존재함을 보장한다. 이는 경로 z 를 여러 하위 경로로 분해할 수 있음을 수식으로 표현한다. Proposition 2.1 은 “활성” 속성을 다룬다. 스위치가 호출된 시점 w 로부터 일정 시간 t_switch 이내에 목표 프로세스가 실행 상태가 되도록 요구한다. 이 조건이 만족되지 않으면 시스템이 영원히 멈출 위험이 있다. Proposition 2.2 는 공유와 비공유 변수의 일관성을 보장한다. 스위치 구간 동안 비공유 변수는 변하지 않아야 함을 명시한다.
이러한 명세를 구현하기 위해 저자는 여러 기본 함수들을 가정한다. Reg(w;c;r) 은 코어 c 의 레지스터 r 값을, Mem(w;c;ℓ) 은 메모리 ℓ 의 값을 반환한다. 이를 이용해 현재 실행 중인 프로세스( Running ), 준비 상태( Ready ), 유효성( ValidProcess ) 등을 정의한다. 시간 함수 Time(w) 로 이벤트 간 경과 시간을 측정하고, Waiting(w;p) 를 정의해 프로세스 p 가 Ready 상태가 되기까지 대기한 시간을 누적한다. 시스템이 “live” 하려면 모든 프로세스의 Waiting 값이 사전에 정해진 한계 t_live 이하이어야 함을 제시한다.
다음으로 병렬성 문제를 다룬다. 다중 코어 환경에서 레지스터와 메모리 값이 코어마다 다를 수 있음을 인정하고, 이벤트 시퀀스가 코어 간 독립적으로 진행될 수 있음을 수식적으로 표현한다. 추상 프로세스 모델 f 를 정의해 상태를 Running, Waiting
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기