티스토리 뷰

Study/OS

[Study] Monolithic Kernel / Microkernel

생각많은 소심남 2013. 2. 14. 18:12

Kernel이란 Application과 Hardware를 연결시켜주는 역할을 한다.

<출처 : http://en.wikipedia.org/wiki/Kernel_%28computing%29>


어차피 Application이나 CPU Memory같은 Hardware는 독립적으로 동작하지 못하고, 커널을 통해서 서로 의사소통을 하기 때문에 어찌보면 커널의 역할은 OS에서 가장 중요한 요소로 작용한다. 우리가 흔히 쓰는 윈도우에도 Windows NT라는 커널이 들어있다. 이 커널을 통해서 OS는 사용자가 요구하는 서비스를 호출할 수 있는데 이걸 System Call이라고 하고, 보통 System Call로 Process Control, File Management, Device Management, Information Maintenance, Communication 등의 기능을 수행할 수 있다. 

 그런데 잘 보면 Kernel의 주체는 Kernel 자체 ( 물론 사용자가 Kernel에 명령하는 것이긴 하지만...)이고 Application의 주체는 User가 된다. 하드웨어 입장에서는 Application 보다는 직접적으로 맞물려 있는 Kernel에서 내려온 call을 받아야 할 의무가 있고, 이걸 privilege 라는 개념을 둬서 따로 관리 한다. CPU는 Kernel에서 실행되는 순간을 Privilege Mode 또는 Kernel Mode 라고 하고, Application 에서 수행되는 순간을 Non-Privilege Mode / User Mode라고 한다. OS가 동작한다는 말은 즉, User Mode와 Kernel Mode 사이에 의사소통이 잘 된다는 말로 다르게 표현할 수 있다. 이걸 그림으로 표현하면 다음과 같다.


위와 같이 Kernel Mode 상에서 앞에서 언급한 Process Control과 Memory Management 등이 전부 이뤄지는 Kernel을 따로 Monolithic Kernel이라고 한다. 거의 대부분의 Unix Kernel이 Monolithic일만큼 Unix System에서 Kernel의 역할은 거의 전부라고 해도 맞는 듯 하다. 그런데 물론 Kernel Mode의 동작여부가 전체 시스템 동작여부를 좌우하다보니까 system Component에 대한 의존성이 커진 것이 문제로 작용한다, 일례로 지금은 물론 Runtime 상에서 Device Driver를 module 형식으로 Load를 하는 순이지만, 과거에는 이런 module 형식이 아니었기에 간혹 Driver에 bug라도 있을 경우에는 전체 시스템에 치명적인 영향을 끼쳤다. 거기다가 아무래도 모든 동작이 Kernel을 통해서 이뤄지니 유지 보수하기가 힘들었다. 이밖에도 몇가지 한계점이 존재했다.

 몇년간의 연구를 통해서 Kernel Mode 상의 몇몇 기능을 User Mode에서 구동할 수 있게끔 시도했고 그 결과 나온 것이 MicroKernel이다.

<http://en.wikipedia.org/wiki/Microkernel>


딱 비교해도 알 수 있다시피 Kernel Mode에 대한 의존성이 확 줄고, 필수적인 기능만이 Kernel Mode 상에서 이뤄진다. Monolithic과 Micro의 의미는이 Kernel Mode의 크기라고 보면 될 듯 하다. 물론 여기서 더 축소화시킨 exoKernel도 존재한다.(지금은 연구 진행이 안되는 듯 하지만...)


물론 Kernel의 size와 비중이 줄어든 것도 있지만 무엇보다도 MicroKernel이 나온 계기가 된건 Server의 등장이다. 네트워크의 발달로 인해서 기존의 한계였던 user mode 상에서의 처리를 네트워크 내에서 분산처리할 수 있게 된 것이다. 처음으로 MicroKernel 기반으로 등장한 Mach도 High Speed network 상에서 Small-Scale uProcessor를 묶어서 만든 환경이다.


 전형적으로 프로세서를 처리할 때는 그 프로세스의 state나 기타 환경을 저장하는데 이를 context라고 하고,  보통 다른 프로세스를 수행하려고 할 때는 기존의 context와의 교환이 이뤄진다, 이 과정이 하나의 interrupt를 통해서 이뤄지는데 이걸 context Switching이라고 한다. 당연히 System 상에서 context switching이 일어날 경우에는 interrupt가 overhead로 작용하며, 이는 컴퓨터 성능을 저하시키는 요인이 된다. 하물며 monolithic Kernel은 한개의 시스템내에서도 overhead가 성능 저하로 작용하는데 microkernel 은 그 시스템의 영역이 네트워크를 포함하고 있기에 당연히 성능이 크게 떨어질 수밖에 없다. 그래서 mach도 이런 한계점 때문에 초기 모델이 실패했다.

 특히 memory footprint가 많이 소모되는 단점도 있는데 이 주제는 많은 논쟁 거리를 낳았다. 가장 대표적인 논쟁이 흔히 Tanenbaum-torvalds debate 라고 불려지는 Monolithic Kernel VS. MicroKernel 논쟁이다.  Andrew Tanenbaum은 자신이 개발한 microkernel기반의 minix를 통해서 Linus Torvalds의 monolithic 기반의 linux보다 우월하다고 언급했다. 재미있는 것은 torvalds가 tanenbaum의 제자였고, 서로 화해하는 듯 하다가도 또 싸웠다는 것이다. 아무튼 microkernel이나 monolithic kernel도 계속적으로 발전하는 등 갈길을 잘 찾아가고 있다. 


아무튼 난 토발즈 생각하면 이 사진밖에 생각이 안나서...

'Study > OS' 카테고리의 다른 글

[Study] POSIX  (0) 2013.02.21
[Study] Virtual Memory  (0) 2013.02.20
[Study] Task / Thread  (5) 2013.02.15
[Study] Copy On Write (COW)  (9) 2013.02.14
[OS] Mint64OS 31절 Symmetric I/O mode  (0) 2013.02.12
[OS] Mint64OS 29,30절 Multi Processor 활성화  (0) 2013.02.08
[OS] Mint64OS 28절 Serial Communication.  (0) 2013.02.06
댓글