리눅스는 오픈 소스 기반의 범용운영체제로서 , 실시간성을 제공하는 시스템에는 적합하지 않다 . 그러나 사용의 편이성과 기존의 가용한 응용이 많은 장점 등이 있기 때문에 , 리눅스 운영체제에 실시간성을 지원하기 위한 연구가 지속되어 왔다 . 이러한 연구는 RT-Linux, RTAI, L4/Fiasco, ADEOS, Xenomai, XtratuM 등에서 찾아볼 수 있다 . 리눅스 커널 자체에서 실시간성을 지원하고자 하는 시도는 리눅스 커널 2.2.X 버전부터 도입된 실시간 선점형 (Real-time preemption) 커널이 있다 . 실시간 선점형 커널은 연성 실시간 시스템을 지원하기 위하여 원래의 스핀락 (raw spinlock) 으로 보호되는 임계 영역 (critical section) 이나 ttys 와 같은 오래된 코드들 외에는 커널의 대부분이 선점 가능하도록 한다 . 이를 위해서 대부분의 커널 스핀락 (spinlock) 은 뮤텍스 (mutex) 로 대체되고 , 모든 인터럽트는 커널 쓰레드로 변경된다 .
실시간 운영체제에서는 응용의 수행시간을 예측가능하게 만들기 위하여 우선순위 역전 (priority inversion) 현상이 반드시 제어되어야 한다 . 실시간 선점형 커널에서는 우선순위 상속 (priority inheritance) 이 지원되어 이를 제어하도록 되어 있다 . 그러나 우선순위 상속은 연쇄 블로킹 (chained blocking) 및 데드락 (deadlock) 문제를 해결하지 못하는 단점이 있다 . 본 원고에서는 RT 패치를 적용한 리눅스 커널에 PCP(Priority Ceiling Protocol) 을 구현하여 연쇄 블로킹 및 데드락 문제를 해결하였다 . PCP 의 구현 방법은 두 가지가 있으며 , [8] 에서 제시된 원래의 PCP 와 그 변형인 IPC(Immediate Priority Ceiling) 이다 . 본 원고에서는 이 두 가지를 모두 구현하여 그 성능을 측정 , 비교하였다 .
Ⅱ . 실시간 시스템의 동기화 문제
Ⅲ . 실시간 리눅스와 동기화 프로토콜 구현
Ⅳ . 동기화 프로토콜의 성능 분석