title: "**마이크로커널 : Microkernel**"
description: "**마이크로커널 : Microkernel**"
cleanUrl: /sw-engineer/microkernel
ogImage: ""
floatFirstTOC: right
마이크로커널(microkernel)의 정의
커널, 즉 모듈의 기능과 OS의 확장을 위한 기반은 core로만 남아야 한다는 설계 철학
마이크로커널의 특징
- 마이크로 커널 아키텍처의 핵심은 (주소 공간 관리, 스래드 관리, IPC 등의) 가장 핵심적인 OS 기능만을 (커널 모드에서 동작하는) core에 담고 그 외 나머지는 사용자 모드로 넘긴다.
- 서비스라던가 덜 중요한 OS의 기능(device driver, file system, virtual memory manager, windowing system, security service 등)은 서버 프로세스로 구현하되, 이들간 통신은 core를 매개로 하는 메시지 전달(message passing)을 통해 peer 기반에서 이룬다.
- (monolithic 커널과 같은) 기존의 계층적 방식(layered approach)은 수직적 바 방식(vertical bar approach)으로 변경되는데, 이는 계층적 방식이 모듈화를 이루고 있음에도 불구하고 한 계층의 변경이 인접한 타 계층의 변경을 야기하기 때문이다.
- core에 어떤 기능이 포함되어야 한다는 정해진 규칙은 없다. 일반적으로 저수준 메모리 관리, IPC, I/O와 인터럽트 관리 기능이 core에 포함된다.
monolithic kernel과 microkernel의 구조적 비교
![이미지 출처: http://en.wikipedia.org/wiki/Microkernel](https://prod-files-secure.s3.us-west-2.amazonaws.com/7570d2fc-66b1-4e23-bb3c-ff7b56842b0d/c037bf07-7c8c-444b-8105-cd17bec78973/Untitled.png)
이미지 출처: http://en.wikipedia.org/wiki/Microkernel
- 좌측은 monolithic kernel, 우측은 microkernel
- monolithic kernel에서는 시스템 콜을 통해 OS의 기능에 접근하는 반면 microkernel에서는 peer 기반 하의 IPC를 통해 이루어지며 user mode에서 동작하는 service간 통신 역시 IPC를 통해 이루어진다.
마이크로커널의 장점
- 단일 인터페이스(Uniform Interface) : 커널 수준과 사용자 수준의 서비스를 구분하지 않으며, 모든 서비스는 메시지 전달을 통해 이룬다.
- 확장성(Extensiblity): 새로운 서비스 추가를 가능하게 한다.
- 유연성(Flexiblity): 새로운 기능 추가 및 기존 기능의 제거가 용이하다.
- 이식용이성(Protability): 새로운 프로세서로의 시스템 이주에서 필요한 변경은 오직 코어에서만 일어난다
- 신뢰성(Reliability): 모듈적 설계 및 작은 코어커널은 더 엄격하게 테스트될 가능성이 있다.
- 분산 시스템 지원: target machine에 대한 구체적 정보 없이도 메시지 전달이 가능하다.