내부를 알 수 없는 하나의 코드 덩어리를 의미합니다. 유닉스가 이 구조입니다. 유닉스는 크게 System programs 와 kernel 두 부분으로 나눌 수 있습니다. 커널의 기능이 엄청 많아서 차지하는 비율이 큽니다. 예전 유닉스 시스템은 아래처럼 두 파트로만 나뉜 구조였습니다.
현재 리눅스 구조는 조금 더 나뉜 구조입니다.
Monolithic 의 장단점은
단점에 비해 장점이 압도적이라 지금도 많이 사용됩니다.
OS를 layer(level) 에 따라 나누고 각 레이어에서 처리하는 방식입니다. 컴퓨터 네트워크에서는 성공한 방식입니다. 대표적으로 ISO - OSI 7 layer 이 대표적입니다. 네트워크 통신을 7단계 (PHY, Data Link, Network, Transport, Session, Presentation, Application)로 나누어 처리합니다. 하지만 OS 에서는 정의와 오버헤드의 문제 때문에 성공하지는 못했습니다.
말 그대로 작은커널 입니다! 커널을 유저 영역으로 좀 더 이동한 방법입니다. 시스템 자원 관리(메모리, 디스크, 입출력) 같은 핵심 기능들만 커널 내에 구현하고, 그 외 기능들은 커널 외부(유저 영역)에서 실행될 수 있도록 모듈화 합니다. message passing을 사용하여 유저 모듈 사이의 통신을 합니다.
장점으로는
하지만 단점이
Micro-architecture(Mach) 가 마이크로 커널의 한 예시라고 할 수 있습니다.
리눅스가 바로 이 구조라고 할 수 있습니다. 현대의 많은 OS는 Loadable Kernel Modules (LKMs) 로 구현하고 있습니다.
이런 식으로 커널에 객체들이 붙어있는 느낌입니다.
요즘의 운영체제는 하나의 모델만을 사용하진 않습니다. 성능, 보안, 사용성을 위해 여러 구현 방식을 결합해서 구현됩니다. 예를 들어
맥의 경우를 그림으로 나타내면
이런 느낌입니다.
디버깅은 에러나 버그를 찾고 고치는 과정을 의미합니다. 운영체제는 에러 정보를 포함하는 log file을 생성합니다. Failure에는 2가지가 있습니다.