모노리딕 커널과 마이크로커널

Jin Hur·2021년 8월 17일
0

reference:


모놀리식 커널은 리눅스로 OS를 배운 학부생에게 가장 익숙한 OS이다. Application을 제외한 모든 system 관련 기능들(VFS, IPC, Filesystem 등등)을 커널이 관리하며 각 영역들은 단계적으로 나뉘어 있다. 생각해보면 리눅스 프로세스 하나를 만들 때 VFS에서 제공하는 fopen 라이브러리를 이용해 다른 파일 시스템에 쉽게 접근이 가능했고, IPC를 이용해 다른 프로세스에게 메시지를 전달 하는 것도 척척 해낼 수 있었는데 위 모든것은 커널의 system call을 이용해 했던 방식 들이었다. 커널이 모든 시스템 서비스들을 관리 했기 때문에(모놀리식 커널이기에) 개발자는 커널이 제공하는 함수만 사용해서 쉽게 할 수 있었다. 대표적인 예로는 Unix, Linux가 있다.

하지만 마이크로 커널은 마이크로라는 접두어에서도 의미하듯 핵심적인 기능(스케줄링, 메모리 관리 등등)만 커널에 담고 나머지는 제외해 가볍게 만든 커널이다. 기존에 모놀리식 커널이 갖고 있던 시스템 기능들(VFS, IPC, Device driver)은 커널위의 서버의 형태로 존재한다(위 개념을 받아들이는게 좀 충격이었다). 이러한 방식의 장점은 하나의 서비스가 죽더라도 커널 전체가 panic되지는 않다는 점이다. 예를들어 Device Driver 하나가 죽더라도 전체 커널이 죽는 일은 없다. 리얼 타임성이 중요한 임베디드 시스템에서 주로 사용된다. 대표적으로 MacOS X, Windows NT가 있다.

모놀리식 커널
장점 : 각 Component간의 커뮤니케이션이 효율적이다.
단점 : 디바이스 드라이버를 추가/삭제 하려면 커널을 재빌드 해야 한다. 또한 하나가 죽으면 전체 시스템이 죽는다.

마이크로 커널
장점 : 서버를 추가하는 방식이기 때문에 기능을 추가하기 쉽고, 시스템이 견고하며 리얼타임성이 높다.
단점 : 시스템 기능들이 서버의 형태로 존재하기 때문에 커뮤니케이션 오버헤드가 있다.

위 두가지를 혼합한 구조가 모듈형 커널이라 한다. 쉽게 모듈의 형태로 쉽게 시스템 기능을 추가 할 수 있는 방식인데 윈도우가 가장 대표적이다.

source: https://godffs.tistory.com/m/1438?category=340724

source: https://conatuseus.tistory.com/11

Microkernel과 Monolithic Kernel의 주요 차이점

마이크로 커널과 모놀리식 커널이 구별되는 기본 점은 마이크로 커널이 서로 다른 주소 공간에서 사용자 서비스와 커널 서비스를 구현하고 모놀리식 커널이 동일한 주소 공간에서 사용자 서비스와 커널 서비스를 구현한다는 것입니다.

마이크로 커널의 크기는 커널 서비스만 커널 주소 공간에 있기 때문에 작습니다 . 그러나 모놀리식 커널의 크기는 커널 서비스와 사용자 서비스가 동일한 주소 공간에 있기 때문에 마이크로 커널보다 상대적으로 더 큽니다 .

모놀리식 커널의 실행은 응용 프로그램과 하드웨어 간의 통신이 시스템 호출을 사용하여 설정됨에 따라 더 빠릅니다 . 반면에 마이크로 커널의 실행은 메시지 전달을 통해 시스템의 응용 프로그램과 하드웨어 간의 통신이 이루어짐에 따라 느립니다 .

새로운 서비스가 커널 공간에서 격리된 사용자 주소 공간에 추가되기 때문에 마이크로 커널을 쉽게 확장 할 수 있으므로 커널을 수정할 필요가 없습니다. 모 놀리식커널에 새로운 서비스가 추가되면 전체 커널을 수정해야하는 경우 모놀리식 커널의 경우와 반대입니다.

마이크로 커널은 서비스가 마이크로 커널에서 실패하더라도 운영 체제가 영향을받지 않는 것처럼 모놀리식 커널보다 안전 합니다. 반면에, 서비스가 단일 칩 커널에서 실패하면 전체 시스템이 실패합니다.

모놀리식 커널 디자인은 코드가 적어 버그가 줄어듭니다. 반면에, 마이크로 커널 디자인은 더욱 많은 코드를 필요로합니다.

결론

Microkernel은 모놀리식보다 느리지만 안전하고 안정적입니다. 모든 서비스 장애가 시스템 고장을 일으킬 수 있기 때문에 모놀리식 커널은 빠르지만 덜 안전합니다.

0개의 댓글