커널과 인터페이스 (Kernel & Interface)

운영체제의 핵심 기능인 커널과 커널을 보호하는 인터페이스


Kernel and Interface

커널(Kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로 이는 운영체제 성능에 크게 영향을 끼친다.

인터페이스(Interface)는 사용자가 커널에 직접 접근하지 못하도록 사용자와 커널 사이의 중재자 역할을 한다. 인터페이스는 사용자(응용 프로그램)으로부터 명령을 받아 해당 명령을 커널에게 전달하고 실행 결과를 받아 다시 사용자에게 전달한다.


System Call (syscall)

시스템 호출(syscall)은 커널이 자신을 보호하기 위해 만든 인터페이스이다. 시스템 호출은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 지키기 위해 자원에 직접 접근하는 것을 방지한다. 즉 자원에 접근하고 싶으면 시스템 호출을 통해서 접근할 수 있다.

시스템 호출은 커널이 제공하는 시스템 관련 서비스를 모아놓은 것으로 C언어에서 printf 함수 등이 시스템 호출에 해당한다. 우리가 printf로 문자열을 출력할 때 다른 자원의 침해 없이 안전하게 문자열이 출력되는 이유도 printf가 시스템 호출의 일원이기 때문이다.

  • 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 관련된 함수이다.
  • 사용자나 응용 프로그램은 하드웨어 자원에 접근할 때 시스템 호출을 사용해야 한다.
  • 사용자가 커널 영역에 접근할 수 있는 유일한 방법은 시스템 호출을 통해서 이다.

커널의 구조

커널의 핵심 기능은 매우 복잡하게 얽혀 있다. 이러한 기능들을 어떻게 구현하는 가에 따라 크게 단일형 커널, 계층형 커널, 마이크로 커널로 나뉜다.

단일형 커널 (monolithic kernel)

단일형 커널은 초창기 운영체제가 채택한 커널 구조 방식으로 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다. monolithic-structure-of-operating-system https://www.javatpoint.com/monolithic-structure-of-operating-system

단일형 커널의 대표적인 예로 MS-DOS와 초기 버전의 UNIX가 있다. 모듈들이 거의 분리되어 있지 않기에 모듈간의 통신 속도가 빠르다는 장점이 있지만 아래와 같은 단점으로 현대 운영체제에서는 거의 사용하지 않는다.

단일형 커널의 단점

  • 모든 모듈이 하나로 묶여 있어서 버그나 오류 처리가 쉽지 않다.
  • 운영체제의 여러 기능이 연결되어 있어 상호 의존성이 높다. 이는 작은 결함이 시스템 전체로 확산될 가능이 있다.
  • 다양한 환경의 시스템에 적용하기 어렵다.
  • 운영체제의 구조가 복잡해질 경우 단일형 구조로 구현하기가 어렵다.

계층형 커널 (layered kernel)

계층형 커널은 비슷한 기능을 가진 모듈들을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식이다.

비슷한 기능을 모아 모듈화했기 때문에 단일형 구조보다 디버깅이 쉽다는 장점이 있다.

마이크로소프트의 WINDOWS를 비롯한 현대 운영체제에서 대부분 채택하고 있는 방식이다.

마이크로 커널 (micro kernel)

마이크로 커널의 운영체제는 프로세스 관리, 메모리 관리, 프로세스간 통신 관리 등 가장 기본적인 기능만 제공한다. 이 커널의 구조를 살펴보면 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다.

monolithic-vs-micro https://en.wikipedia.org/wiki/Microkernel

마이크로 구조에서 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈에 문제가 발생해도 전체 운영체제는 멈추지 않는다. 또한 많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능하다(일반적으로 10,000줄 이하의 코드로 구현된다). 대표적으로 애플의 iOS에 탑재 되었다고 한다.


참고 서적

쉽게 배우는 운영체제