임베디드 레시피

Egloos | Log-in





RTOS와 Kernel

예전엔 RTOS라는 말을 많이 사용했던 것 같은데, 요즘은 Kernel이라는 말이 또 많이 사용되는 것 같네요. 도대체 Kernel이란 건 뭘까?요. OS라는 게 뭘 하는 녀석인지 보자면, 예전에 OS라는 게 없을 때는 User가 모든 기능을 Software가 처리 가능하도록 처음부터 끝까지 작성을 했는데, 이러다 보니 너무 까다로운 작업에 Software를 하려는 사람들이 죽을 맛이었겠죠.
 
사람이라는 게 언제나 편한 걸 추구하다 보니, 모든 기능을 처리 하도록 만들기가 불편하니까, 이런 Software를 Hardware에 자동으로 Loading해 주고 실행해 주는 Monitoring 환경을 만들었는데, 그게 바로 OS의 시초라고 봐도 무방할 것 같아요. 원래 Software라는걸 한번에 한가지만 실행할 수 있는 환경에서, 여러 가지 Software에 대해서 실행만 하면 자동으로 Memory에 Loading 해주는 그런 시스템이었던 거죠. 그게 비스므리한 예가 DOS라고 보시면 될 것 같네요.
 
OS라고 부르기에는 뭣 한 그런 거였는데, 한참 쓰다 보니까 모든 Software에는 공통점이 있더라 하는 걸 간파 한 거죠. 그게 뭐냐면 I/O가 부분이었어요. 모든 Software는 Input을 받고 Output을 해주는 Architecture를 많이 사용했는데, 뭐 예를 들면, 키보드나, 모니터는 항상 공통적으로 사용하더란 말이죠. 그래서 이 부분을 Monitoring 환경에 아예 집어 넣고 사용하기 시작했는데, 이 것이 바로 OS의 시작이에요.  Operating System. 아하~  요것도 DOS랑 비슷하죠.
 
그러니까 태초의 Operating System은 DOS형태로서 실행만 해주면 자동으로 Memory에 올려서 실행 가능하게 만들어 주고, 특별하게 뭘 안 해줘도 I/O를 사용할 수 있도록 해 주는 형태였던 게에요. 
 
OS라는 건 뭐 그런 거죠. RTOS라는 것도 마찬가지 인 거에요. Embedded System에서 사용되는 OS인데, Embedded System이라는 게 범용적인 System이 아니고 특정한 목적을 위한 작은 System이다 보니 Real Time 이라는 말이 붙어서 RTOS라고 부르긴 하지만, 어쨌거나 기본적으로 Multi tasking과 Interrupt 처리 기능을 가지고 있는 작은 OS라고 보시면 맞는 거죠. 제 개인적인 의견으로는 RTOS라고 부르기 보다는 Embedded OS라고 부르는 게 더 혼란을 적게 가져오지 않을 까 생각하는데.. 잘 모르겠사옵니다. 
 
이때, RTOS도 하는 일이 많으니까, RTOS중에 중요한 부분들만 따로 떼어서 Kernel이라고 부르는 부분들이 생겨 나고 있는데요. Kernel 이라고 함은 Context Switching, Scheduling, Memory Management, ISR Management 등을 담당하는 부분을 따로 떼어서 Kernel이라고도 부르게 된 거죠. 그런데, 제 생각으로는 Kernel 이라는 게 별거냐 하는 생각이 들어요.
 
제일 중요한 부분은 Kernel이라는 게 대단한게 아닙니다요. 혼자서 돌아가면서 전체적인 System을 관리하는 Software가 아니에요. 혼자 살아 움직이는 뭐 그런 녀석이 아니고요, 어쨌든 간에 Kernel의 API중 어느 것이라도 불려야 동작하는 System을 관리할 수 있는 Software 인 거에요. Kernel 혼자서 살아 움직이는 건 아니고요. 그러니까 Kernel이 활성화 되려면, Application이나, Task, Process등이 Kernel에게 Service를 받기 위해서 Kernel API를 부르던가, Interrupt가 걸려서 Interrupt 처리할 때 Interrupt 처리 routine의 끝에 Kernel의 API가 불리던가 하는 등의 뭐 그런 식인 거지요. 이 부분을 이해 못하면 Kernel은 혼자 살아 움직이는 괴물로 뭉글뭉글 머릿속에 자리 잡을 수도 있으니 조심하세요~.
 
또, Kernel에 대한 용어에 관련한 싸움에 관련해서 Comment하자면, 위키 백과에 Kernel의 정의와 Micro Kernel과 Monolithic Kernel간의 싸움이
 
http://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_(%EC%9A%B4%EC%98%81_%EC%B2%B4%EC%A0%9C)    - 여기 끝에 괄호까지 붙이셔야 제대로 가요. T.T
 
자세하게 나와 있습니다만, 저 나름대로의 정의를 막 내릴 테니, 한번 들어보셔요. RTOS의 경우에는 Compact하고 작으니까, RTOS 자체를 Kernel이라고 불러도 무방할 듯 하긴 한데요,

문제는 L4 같은 Micro Kernel이나, Linux 같은 Monolithic Kernel이 Kernel이라는 이름을 마구 가져다 쓰다 보니까,
도대체 Kernel이 OS랑 뭐가 다르냐! 하고 헷갈릴 수 있어요. 전 엄청 헷갈렸다구요.

그러나, 여전히 Kernel은 핵심 기능을 하는 부분을 OS의 Kernel이라고 부르면 될 것 같고요.
그러니까, OS의 이름으로서는 Linux, L4, uC OS, REX, 뉴클리어스.. 이런 것들이 OS의 이름인 거구요.
쩝.
 
Micro Kernel은 진짜 중요한 부분만 Kernel이라고 부르는 거고, (나머지는 Server라는 Process로 떨어져 나가 있어요)
Monolithic Kernel은 Kernel에 다른 큰 부분들까지 같이 엮여서 부르는 거라고 보시면 될 것 같아요.

이렇게 해도 헷갈리니까 진짜 예를 들면,

Linux는 Monolithic Kernel의 형태이므로 Linux 자체 = Kernel = OS라고 보시면 될 것 같고요,
L4같은 녀석은 Micro Kernel의 형태이므로 진짜 중요한 Core만 Kernel이고, 나머지 Service들은 Server라는 Process 형태로 따로 존재한다고 보시면 될 것 같아요. - 진짜 중요한 Core란 앞에서 말한 Scheduling, Context Switching, Memory관리, Resource 관리, ISR 관리등을 처리하는 부분이요 -

Linux에서 사용하는 Kernel이라는 이름의 정의와 L4같은 녀석이 사용하는 Kernel의 정의가 틀린 거니까, 그걸 이해 하셔야 해요.
 
아 헷갈린다. 횡설수설. 토사구팽~. 뭐, 저는 이제부터 OS라는 용어나 RTOS라는 용어 보다는 Kernel이라는 용어를 즐겨 쓸 거니까, 그렇게 생각해 주시면 된다구요. 그냥 그렇다구요~


이 글은 많은 리플을 낳을 수 있는 글이므로, 마음 껏 자신의 의견을 달아주세요. 달려라 달려!

참고) Window는 Monolithic Kernel일까요, Micro Kernel일까요?  -  답은, Micro Kernel 캬캬. (이거 헷갈리죠?)

by 히언 | 2009/08/07 21:42 | RTOS팩토리(커널) | 트랙백 | 핑백(1) | 덧글(7)

Linked at 친절한 임베디드 시스템 개발자.. at 2009/09/07 22:21

... ⓐ RTOS와 Kernel ... more

Commented by 여우저 at 2009/08/10 16:34
제가 생각하는 견해와 조금 다른점이 있어 덧글을 남깁니다.

RTOS는 임베디드 OS의 한 부분으로 처리시간이 매우 중요할 때 적용되는것으로 알고있습니다.
리눅스만봐도 임베디드 리눅스를 RTOS로 동작하도록 수정한 제품도 존재하고 있습니다.

RTOS의 컨셉에 대해 다시한번 확인을 요청드립니다.
Commented by 히언 at 2009/08/10 20:46
ㅎ RTOS의 처리시간이라기 보담은 응답시간이라고 하는게 더 맞겠지요. 그런 의미에서 RTOS가 Hard와 Soft로 그 구분이 되고 있다는 건 아시겠지요. Hard는 응답시간 자체가 Functional Requirement가 되고요 - 보통 군사용 기기들에서 이런 요구사항이 많이 나옵니다. 이것이야 말로 실시간 OS이지요 -, Soft는 최대한 빨리 응답하기만 하면 요구사항을 맞출 수 있다는 있는 거죠. 여기서 다루는 RTOS라는 건 Soft를 다룬다고 보시면 되는데요, 민간에서 사용하는 Commercial RTOS라는 것들이 대부분 Soft RTOS를 의미 한답니다. 그런 의미에서 최대한 빨리 응답시간을 맞추는 방법으로 선점형 (Preemption)이라는 Scheduling Policy를 채용하는데요, Linux도 마찬가지로 Real Time이라기 보담은 선점형 Scheduling Policy를 채용 한 거죠. 선점형에 관련해서는 강좌뒤에 계속 나와요.
Commented by 히언 at 2009/08/10 20:48
그래서 "RTOS라는 것도 마찬가지 인 거에요. Embedded System에서 사용되는 OS인데, Embedded System이라는 게 범용적인 System이 아니고 특정한 목적을 위한 작은 System이다 보니 Real Time 이라는 말이 붙어서 RTOS라고 부르긴 하지만, 어쨌거나 기본적으로 Multi tasking과 Interrupt 처리 기능을 가지고 있는 작은 OS라고 보시면 맞는 거죠. 제 개인적인 의견으로는 RTOS라고 부르기 보다는 Embedded OS라고 부르는 게 더 혼란을 적게 가져오지 않을 까 생각하는데.. 잘 모르겠사옵니다. " 라는 말이 나오는 건데 선점형이라는 말을 여기에 덧붙이자니 설명없이 붙이는 거 같아 일단 생략 했사옵니다. 피드백 감사.
Commented by 김선영 at 2009/08/10 16:42
너무도 알아듣기 쉬운 강의에 푸욱 빠지겠습니다
앞으로도 멋진 강의 부탁 드립니아~^^
Commented by 히언 at 2009/08/10 20:49
완전 감사합니다. *^^* 자주자주 오세요~
Commented by bro at 2009/08/24 18:00
정말 대단하십니다. 우연히 검색으로 들어왔는데 엄청나네요! 강의 감사히 보겠습니다.
저는 RTOS나 embedded os나 이견은 별로 없습니다. (뭐라 부르든 말씀하신것 처럼 scheduler, 인터럽트 핸들러, 동기화, 메모리관리 등이 있을테니까요.) 응용처가 real time성이 중요하면 deadline을 지킬수 있는 예측가능한 scheduler를 사용해야겠지요. rate monotonic이나 earily deadline first 같은 예로요. 이 경우 사용되는 주어진 task들이 deadline을 지킬 수 있는지 설계 초기에 분석도 해야할것이고요. 기본적으로 반응성을 높이기 위해서 선점형 커널이 되어야 하는 것은 real time이 중요하든 안하든 최근 os의 기본 소양(?)인거 같습니다. 다만 rtos에서는 일반 os에 비해서 우선순위가 낮은 task의 resource lock으로 우선순위가 높은 task가 기다리는 priority inversion문제가 더크게 다뤄져서 IIP (Immediate Inheritance Protocol)나 PIP (Priority Inheritance Protocol)등을 사용하여 처리했으면 하는 세세한 requirement들이 있을것 같습니다.
그렇지만 제 생각에도 딱히 rtos와 embedded os를 구분할 필요는 없을것 같습니다. 강의의 특성상 좀더 범용적인 의미에서 embedded os라고 칭하는게 더 맞을거 같기도 하고요.
여 우저님이 말씀하신 것들은 아마도 예전 리눅스에서 real time상황에 적합하지 않았던 것에서 RM이나 EDF지원, priority inversion지원 등을 추가해서 좀더 deadline 예측가능한 task구성을 할 수 있게 rt-linux라고 만든것이 있으니 구분을 해야하지 않느냐라고 하신거 같습니다. 어쨋든 교수님들 강의에서도 여전히 모호한 구분으로 되어 있기도 하니까요..
계속 좋은 강의 부탁드리고요. 감사합니다!
Commented by 히언 at 2009/08/26 20:31
ㅎ 네~ 감사합니다. RTOS에 관한한 뭐 특별한 OS를 설명하자니, 너무 Special하고 그래서 적당한 수준으로만 논하려고 생각중입니다.!! 코멘트 너무 감사합니다~ 자주 오세요~
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.

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