LINUX 기준 커널의 기능은 다음과 같습니다.
- 프로세스 관리 : 태스크 생성, 실행, 상태 전이, 스케줄링, 시그널 처리, 프로세스 간 통신 모듈 등의 서비스를 관리 및 제공
- 기억 장치 관리 : 가상 기억 장치, 주소 변환, 페이지 부재, 결함 처리 등
- 가상 파일 시스템 : 파일 생성, 접근 제어, inode 관리, 디렉터리 관리, 버퍼 캐쉬 관리 등
- 디바이스 드라이버 : 주변 장치를 구동하는 드라이버로 구성
단일형 커널은 앞에서 보았던 커널의 기능을 담당하는 모듈들을 커널과 동일한 메모리 공간에 저장, 실행하는 것을 말합니다.
기능들이 한 군데에 모여있어 효율성이 높아 성능이 뛰어납니다.
하지만 버그에 매우 취약해서 어떤 모듈에서 생긴 버그가 시스템 전반을 멈추게 할 수도 있습니다.
즉, 빈틈 없이 잘 짜여진 단일형 커널은 매우 뛰어난 성능을 보입니다.
프로그래머의 역량에 따라 매우 뛰어난 설계 방법이 될 수도, 툭하면 다운되는 매우 불안정한 설계 방법이 될 수도 있습니다.
단일형 커널을 사용하는 운영체제는 UNIX, LINUX 등이 있습니다.
계층형 커널은 [레벨 0 - 하드웨어]부터 [레벨 N - 사용자 인터페이스]로 기능 별로 모듈화하여 구성한 커널입니다.
예를 들어, 5계층으로 나눈다면 아래와 같습니다.
- 데이터 접근, 생성 / 삭제 등 데이터를 관리합니다.
레벨 5 : 데이터 관리(파일 시스템)
- 주변 장치(입출력 장치 등)을 스케줄링하고 입출력의 전반적인 사항을 지시합니다.
레벨 4 : 주변 장치 관리(입출력 스케줄링)
- 프로세스 생성, 제거 등 프로세스를 관리합니다.
레벨 3 : 프로세스 관리
- 기억 공간을 할당, 회수 등 기억 장치를 관리합니다.
레벨 2 : 기억 장치 관리
- 동기화와 프로세서의 스케줄링을 위해 프로세서를 관리합니다.
레벨 1 : 프로세서 관리
소프트웨어가 시스템 콜을 호출하면 커널이 목적에 맞는 모듈을 실행합니다.
계층적으로 설계하면 디버깅에 용이하며, 더 높은 레벨에 있는 계층만 하위 계층을 호출할 수 있습니다.
하지만 운영체제가 복잡해질수록 많은 계층이 발생하여 운영체제가 차지하는 용량이 커지게 됩니다.
계층형 커널은 윈도우, XNU(IOS의 기반 운영체제) 등의 운영체제에서 쓰입니다.
마이크로 커널은 커널에 최소한의 기능만 구현한 구조입니다.
주소 공간 관리, 스레드 관리, 프로세스간 통신으로 이루어져 있습니다.
기존의 단일형 커널의 문제점을 보완하기 위해 등장한 설계 방법으로, 커널은 최소한의 기능만 담당하고 파일 시스템 관리나 디바이스 드라이버 같은 기능들이 사용자 모드에서 서버 형태로 구현됩니다.
커널이 담당하는 영역이 최소화되었기 때문에 기능 추가나 확장이 쉽고 시스템이 견고하며, 실시간성이 강합니다.
하지만 응용 프로그램이 갑자기 다운되면 자료가 증발해버릴 수 있고,
프로그램 간 통신이 많아져 *오버헤드가 늘어날 수 있습니다.
*오버헤드 : 어떤 명령어를 처리하는 데 소비되는 간접적, 추가적인 컴퓨터 자원
마이크로 커널을 사용하는 운영체제는 Minix, AmigaOS, Mach 등이 있습니다.