<임베디드 시스템>기고-실시간 OS「리눅스」의 약점

◆애스톤리눅스 CTO 김동국

리눅스는 기존의 상용 실시간 운용체계(OS)에 비해 장점을 갖고 있다 하더라도 기본적으로 범용OS로 시스템의 평균성능을 극대화하기 위해 각 동작들이 자원의 사용시간을 공평하게 분할하도록 설계돼 있다. 물론 범용 리눅스도 기본적인 연성 실시간 기능을 제공한다.

그러나 리눅스 커널 수준에서 동작의 우선순위(priority) 지정과 선점(preemption)과 같은 기능을 제공하지 않기 때문에 상용 실시간 OS와 같이 경성 실시간 기능을 제공하기 위해서는 새롭게 설계되어야 한다. 리눅스는 실시간 OS로서 몇가지 약점을 갖고 있다.

우선 범용 리눅스 커널은 하나의 동작이 장시간 데이터를 사용하도록 한다. 따라서 다른 동작은 해당 동작이 완료될 때까지 기다려야 한다.

이것이 동일한 데이터에 대한 접근을 필요로 하는 실시간 동작의 수행을 지연시킨다.

둘째, 범용 리눅스는 시스템 호출 동안에는 어떠한 동작수행을 위한 자원의 선점도 허락하지 않는다. 범용 리눅스는 높은 우선순위의 동작이 낮은 우선순위의 동작이 자원을 반환할 때까지 기다려야 한다.

셋째, 범용 리눅스의 스케줄링은 우선순위와 무관하게 가장 중요하지 않고 짧은 프로세스에 시간을 할당한다. 가령 시스템 로그파일을 삭제하는 프로세스는 높은 우선순위 프로세스가 프로세서의 수행시간을 사용할 수 있다고 하더라도 먼저 수행이 완료된다.

또 범용 리눅스는 다수의 프로세스로부터의 요구를 하드웨어 자원의 효율적인 사용을 위해 재순서화한다.

예를 들어 낮은 우선순위로부터의 디스크 접근 요구가 디스크 헤드 이동의 최소화 또는 오류 복구의 성능을 향상시키기 위해 높은 우선순위 프로세스로부터의 동작에 우선할 수 있다.

이와 같은 몇가지 문제점으로 인해 범용 리눅스를 실시간 OS로 사용하기에는 무

리가 있다. 따라서 실시간 OS로서 사용하기 위해서는 범용 리눅스 시스템을 수정하거나 기능을 추가해야 한다.

범용 리눅스에서 실시간 기능을 제공하기 위한 방법으로는 두가지가 있다. 하나는 범용 리눅스 커널을 완전하게 수정하는 것이다. 이와 같이 실시간 리눅스로 완전히 재설계 및 구현하는 것은 소스코드가 공개되어 있기 때문에 가능하다. 그러나 이러한 수정은 리눅스의 기본구조를 변화시켜야 하는 어려운 작업이다.

다른 방법은 두개의 커널을 제공하는 이중 커널 구조다. 이중 커널 구조는 범용 OS가 실시간 OS하에서 하나의 작업(태스크)으로 동작하는 것이다. 이 가운데 커널구조에서 범용 OS는 디스크 입출력, 직·병렬 및 LAN 통신기능 제어, 시스템 초기화 등과 같은 동작을 수행하고 실시간 OS는 동작 수행순서 제어와 같은 스케줄링 기능을 담당한다.

이 구조에서는 실시간 OS의 기능을 추가해도 범용 리눅스의 특성을 그대로 유지할 수 있다. 이중 커널 구조의 대표적인 시스템이 FSMLab의 RTLinux와 밀라노 대학의 RTAI다. 두 시스템의 기본적인 구조는 거의 동일하다.

차이점은 실시간 특성을 리눅스에 포함하는 방법에 있다. RTLinux는 리눅스 커널의 원시코드를 직접 수정하는 것이고 RTAI는 리눅스의 하드웨어 인터럽트 벡터에 포인터로 연결되는 HAL(Hardware Abstraction Layer)을 추가하는 것이다. 따라서 RTLinux는 RTAI에 비해 상대적으로 많은 원시코드를 수정해야 하는 어려움이 있다.

임베디드 리눅스에 대한 관심이 증가하면서 실시간 리눅스 개발도 활기를 띠고 있다. 이제는 임베디드 리눅스와 실시간 리눅스를 동일시하는 경향도 나타나고 있다. 단순한 임베디드 리눅스보다 차별화된 실시간 기능을 통해 리눅스의 가능성을 확대시키고 있는 것이다.

현재 출시된 제품으로는 FSMLabs의 RTLinux, 리니오의 임베딕스 리얼타임, 몬타비스타의 하드햇리눅스, 온코어의 리눅스포리얼타임, 레드소닉의 레드아이스리눅스, 루비스테크놀로지의 SRLinux 등이 대표적이다.

현재 사용 가능한 상용 실시간 시스템들은 대부분의 경우 공개 프로젝트의 결과를 기반으로 개발돼 기본적인 시스템 구조 및 성능은 매우 유사하다. 따라서 개발환경 도구와 다양한 응용프로그램 제공이 상용화 성공의 중요한 요소가 될 것으로 생각된다.

또한 기존 상용시스템에서 제공하는 풍부한 응용프로그램을 이용하기 위해서는 상용 실시간 OS와의 호환성도 해결해야 할 과제다.