임베디드 레시피

Egloos | Log-in





모놀리틱 커널(Monolithic kernel)과 마이크로 커널(Micro kernel) 차이점은?

뭘 알아야 이해를 하지

호스트 피시와 같이 임베디드 시스템에도 오에스(Operating System)를 많이 사용하는 추세랍니다. 오에스가 필요한 이유는 여러 가지가 있지요. 가령 한가지 예를 든다면, 전자사전으로 MP3 음악을 들으면서 단어 검색을 한다면 두 가지 일을 동시에 실행되는 것과 같아요. 하지만 시피유가 대부분 하나이기 때문에 동시에 두 가지 일을 한다는게 논리적으로 맞지 않지만 지금 우리들이 사용하는 전자사전은 그렇게 사용되고 있다는 겁니다. 논리적으로 맞지는 않지만 가능한 이유가 무엇일까요? 바로 오에스라는 멋진 시스템 소프트웨어 덕분이랍니다. 오에스를 사용하면 마치 동시에 두 가지 일을 하는 것처럼 만들어 주죠. 즉, 두 가지 일을 매우 짦은 시간동안 한번씩 갈이 가면서 실행을 하는데, 사용자는 마치 동시에 일을 하는 것 처럼 느껴진답니다. MP3-단어검색-MP3-단어검색-MP3 이러한 패턴이 매우 짧은 시간 동안 이루어지게 스케줄이 된답니다.
그럼 임베디드 시스템에 맞는 오에스는 뭐가 있을까요? 또 어떤 종류의 오에스가 임베디드 시스템에서는 많이 사용되고 있을까요?

그럼 이러한 오에스의 특성은 무엇일까요?
일반적으로 어떠한 임베디드 시스템을 만들 것인가에 따라서 오에스 선택도 다양하답니다. 예를 들면, 리얼타임을 요구하는 특수한 미사일 시스템 같은 경우는 일반적인 오에스가 아닌 리얼타임 오에스(Real Time OS)를 사용해야 됩니다. 미사일을 타겟 목적지로 쏫아다고해서 끝이 아니라 최종 목적지로 나아가는 도중에 실시간으로 목적지 조절이 가능하도록 만들기 때문이지요.
알티오에스(RTOS)는 시간에 따라 코드 실행을 정확하게 동작하도록 관리하고, 각 타스크(Task)마다 시스템 자원을 관리하며, 보다 편리하게 어플리케이션 프로그램 개발을 위한 기반을 제공하는 일종의 시스템 소프트웨어랍니다. 이러한 알티오에스의 주요 특성으로는 신뢰성, 확장성, 예측성, 간결성, 고성능 등이랍니다.
신뢰성이란 오동작시 치명적인 문제를 일으킬 수 있으므로 높은 신뢰성이 요구가 되지요. 확정성은 필요에 따라 기능을 추가, 삭제 할 수 있는 유연함이 요구 된답니다. 예측성은 실시간 요구사항을 만족하기 위해서 일정 수준이상의 동작이 예측 가능해야 한답니다. 간결성은 자원의 한계로 인해 간결하게 설계하는 것이 요구 된답니다. 고성능은 시간 제약을 만족하기 위해서 충분히 고성능이어야 하지요. 이러한 특성을 갖추기 위해서는 알티오에스의 핵심인 커널이 아주 잘 설계가 되어 있어야 해요. 커널을 이루는 구성요소는 메일박스, 타스크, 메시지 큐, 스케쥴러, 세마포어, 타이머, 이벤트, 뮤텍스, 아에스알 등으로 이루어져 있답니다.
 
 

 
임베디드 시스템에서 오에스를 선택할 때 커널이 어떤 구조로 만들어졌는지를 살펴봐야 해요. 임베디드 오에스의 커널은 크게 모놀리틱 커널(Monolithic kernel)과 마이크로 커널(Micro kernel)로 나눌 수 있어요. 모놀리틱 커널은 오에스가 관리하는 모든 서비스들을 가지고 있는 구조랍니다. 모놀리틱 커널은 커널 내부에 시스템 운영에 필요한 많은 서비스 루틴들을 포함한 구조이며, 시스템을 보다 효율적으로 관리할 수 있도록 만들어져 있답니다. 마이크로 커널은 커널의 기능을 최소화하고 가장 핵심적인 기능만을 모아 놓은 구조이며, 리얼타임성이 강한 커널이랍니다. 또한 모놀리틱 커널에 비해 상대적으로 커널의 크기가 작다는 특징을 가졌답니다. 아래의 그림은 임베디드 오에스에서 사용되는 커널의 예입니다.
 
 

 
두 개의 커널에서 가장 큰 특징은 모놀리틱 커널의 경우는 커널과 어플리케이션이 단계별로 나누어져 되어 있는 반면 마이크로 커널은 하나의 구조로 단일 통합되어 있답니다. 즉, 모놀리틱 커널은 커널과 어플리케이션 바이너리가 따로 만들어지는 반면 마이크로 커널은 커널과 어플리케이션이 하나의 바이러리로 만들어 집니다. 그래서 리얼타임 성능적인 부분에 있어서 마이크로 커널이 모놀리틱 커널보다 휠씬 월등하답니다. 아무래도 임베디드 시스템은 리얼타임 기능을 많이 요구하는 시스템이기에 근래까지도 마이크로 커널을 가진 알티오에스가 많이 사용되고 있답니다.
 임베디드 시스템에서 대표적으로 사용되는 모놀리틱 커널은 임베디드 리눅스(Embedded Linux), 심비안(Symbian), 윈씨이(WinCE), 윈모바일(WinMobile) 등이 있답니다. 마이크로 커널은 마이크로 오에스투(uCOS/2), 뉴클리어서(Nucleus), 렉스(Rex), 브이엑스웍스(VxWorks), 맥오에스(Mac OS) 등이 있어요. 개발자가 프리웨어로 구할 수 있는 알티오에스가 있는가 하면 상용화된 알티오에스도 있답니다. 마이크로 커널 중에 마이크로 오에스투 같은 경우는 누구나 싶게 웹에서 다운을 받아서 직접 포팅을 해 볼 수가 있답니다. 대신 제품을 만들 때는 비용을 지불해야 합니다. 모노리틱 커널 중에는 임베디드 리눅스가 대표적인 프리웨어로 쉽게 구할 수가 있답니다. 
 
최근에는 임베디드 시스템에 하이퍼바이저(Hypervisor) 기술이 접목되고 있어요. 하이퍼바이저는 다수의 운영체제를 동시에 실행하기 위한 가상 플랫폼을 말하는데, 쉽게 말씀 드리면 윈도우즈 XP에 리눅스를 설치하도록 만들어주는 VMware 또는 Virtual box 소프트웨어 같은 거라고 보시면 됩니다. x86, ARM, MIPS 프로세서를 지원하며, 종류로는 OKL4, TRANGO, Xen, KVM 등이 있어요.
 대표적인 오에스로 OKL4가 있는데, 커널은 마이크로 커널이며 하나의 시피유에 두 개 이상의 오에스가 동작되도록 해주죠. 일반적으로 임베디드 시스템에 두 개의 오에스를 포팅하려면 두 개의 시피유가 있어서 각각 오에스를 포팅하지만, OKL4 커널을 사용할 경우에는 하나의 시피유에 OKL4 커널을 올리고 그 위에 다른 오에스를 올릴 수가 있답니다. 이러한 오에스의 특징은 마치 모놀리틱 커널과 유사한 시스템으로 구성되어 있으며 리얼타임성도 보장이 된답니다. 마이크로 커널이 가져야 할 최소한의 핵심 기능만 구현한 최소 커널과 서비스 프로세서로 구성되어 있답니다. 서비스 프로세서들은 작은 서버 모듈로 나누어 설계되고, 최소 기능만을 커널 내부에 포함하므로 기능 확장 및 타 시스템 재사용이 쉬워진답니다.
최근에 OKL4 위에 Rex, OKL4 위에 Linux, OKL4위에 Andoid 등 활발한 움직임이 있어요. 점점 마이크로 커널이 이러한 구조로 변경되고 있고 시장에서 이러한 오에스 요구가 증가되고 있는 추세랍니다. 아래 그림은 임베디드 시스템에 있어 모놀리틱 커널과 하이퍼바이저인 마이크로 커널의 예입니다.
 
 

 
 모놀리틱 커널과 하이퍼바이저인 마이크로 커널은 커널 영역Kernel area)과 유저 영역(User area)으로 나누어 져요. 커널 영역은 오에스에 대한 전반적인 실행 코드가 있는 부분이라고 보시면 되고 유저 영역은 어플리케이션이 실행 코드가 있는 영역이랍니다. 암 프로세서로 하나의 임베디드 시스템 개발한다면, 중요하게 살펴 봐야 될 사항이 두 가지가 있는데 바로 시스템 콜과 암 프로세서 모드(ARM Processor mode)랍니다.
첫 번째, 시스템 콜이랍니다. 시스템 콜이란 유저 영역에서 커널 영역으로 진입하기 위해서는 어플리케이션에서 반드시 사용해야 될 함수를 말하죠. 그럼 왜 시스템 콜이라는 함수를 꼭 사용해야 될까요? 여기서도 여러가지 이유가 있지만 최우선적으로 고려되야 될 사항이 바로 시스템 신뢰성을 보장하기 위해서랍니다. 어플리케이션이 반드시 커널 자원을 사용할 때는 정해진 규칙인 시스템 콜을 쓸 때만 커널이 허용해 주게 해주고, 그 규칙을 따르지 않았을 때 커널은 어플리케이션을 실행하지 않게 하죠. 왜냐하면 잘 못된 어플리케이션이 실행 하게 되면 임베디드 시스템이 멈추거나 리셋이 발생할 수가 있기 때문에 사전에 방지하기 위해서 어플리케이션을 실행 시키지 않는답니다.
두 번째, 암 프로세서 모드랍니다. 암 프로세서 모드는 6가지가 있는데 그 중에서 커널 영역 일때는 SVC 모드로 암프로세서는 동작하며, 유저 영역일 때는 USR 모드에서 암 프로세서는 동작하죠. 암 프로세서 모드에 따라서 동일한 메모리 주소라도 읽기나 쓰기 권한을 따로 줄 수가 있답니다. 읽기나 쓰기 권한을 따로 주는 이유 또한 신뢰성을 보장하기 위해서랍니다. 예를 들면, 커널은 어플리케이션 있는 주소에다 읽거나 쓰기를 언제든지 할 수 있지만 어플리케이션은 커널을 언제든지 읽거나 쓰기를 할 수 없게 만드는 거죠. 말 그대로 커널이 대장이죠. ㅎㅎ
이렇게 해야만이 높은 신뢰성을 보장 받을 수가 있답니다. 암 프로세서 모드에 대한 자세한 내용은 암 프로세서 분석 부분에서 다루도록 할게요.
 
 

by 히언 | 2010/07/24 13:57 | SOTO Story | 트랙백 | 핑백(1) | 덧글(10)

Linked at 친절한 임베디드 시스템 개발자.. at 2010/07/24 13:59

... sp; 309 캐시를 인에이블(Enable)하려면? 4장 RTOS 아나토미 400 모놀리틱 커널(Monolithic kernel)과 마이크로커널(Micro kernel)의 차이점은? 401 임베디드 오에스(OS)의 용어 정의 ... more

Commented by highseek at 2010/07/24 15:56
학부 3학년땐가, 과제로 uCOS/2를 VS 환경에 포팅하는 걸 한 적이 있었죠.

기억이 새록새록 납니다 :)
Commented by soto at 2010/07/24 21:09
아...그렇군요...ㅋㅋㅋ
Commented by at 2010/07/26 16:03
아하!!!! ㅋㅋ
감사합니다.
Commented by soto at 2010/07/26 17:22
네!!
월요일이네요.
즐거운 하루 되세염...^^
Commented by Ruring at 2010/07/27 11:56
목요일날 강남역이에욤~

강남역에서 뭘하죠;;;?
Commented by soto at 2010/07/27 22:28
뭘할까요? ㅋㅋ
기대됩니당...
Commented by soo at 2010/07/28 16:42
잘 보고 갑니다.
감사 감사
Commented by soto at 2010/07/30 11:28
즐거운 주말 되세용~~!!
Commented by Joy at 2010/08/13 10:30
한번씩 갈이 가면서 ... ^^ 이거 오타인 듯 한데... 맞나요?
Commented by soto at 2010/08/17 05:50
앗...ㅋㅋ
글쿤요...^^
감사요~~!!
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.

◀ 이전 페이지          다음 페이지 ▶