컴퓨터는 CPU, 메모리, 디스크 등의 다양한 장치들로 구성되어 있다. 이 장치들을 추상화하여 사용자들이 혹은 응용프로그램이 사용하기 쉽도록 해주는게 바로 운영체제이며, 그 운영체제의 핵심이 바로 커널이다.
커널은 컴퓨터에 부착된 장치들을 효율적으로 관리하도록 해주는 관리자의 역할을 한다. 각 장치들은 추상화를 통해 사용자들이 접근할 수 있게 된다.
커널은 크게 두 가지 타입으로 나뉠 수 있다. (하이브리드, 엑소 커널은 여기서는 논외로 하자.)
1. 모놀리식 커널 Monolithic Kernel
이 커널은 시스템을 관리하기 위한 기능들이 하나의 이미지에 내장된 커널을 의미한다. 하드웨어 위에 고수준의 가상 계층을 가지고 있으며, 어플리케이션 영역의 프로그램 구현을 위한 서비스를 제공한다. 이 서비스에는 프로세스 스케줄링, 메모리 관리, 디스크 관리, 장치 관리 등이 있으며, 이를 위하여 시스템 콜(System Call)의 형태로 서비스들을 제공한다.
커널이 하나의 프로세스로써 단일 주소 공간에서 실행되도록 구현되어있으며, 커널 이미지는 일반적으로 단일 정적 바이너리로 존재한다.
커널의 기능들을 서버(Server)라 불리는 분리된 프로세스로 조각내어서 커널 자체의 크기를 줄인 커널이다. 각 서버들은 다른 주소공간에서 실행되도록 분리되어 있으며, 오직 서버만이 각 기능들을 특권 실행 모드(Privileged execution mode)에서 실행할 수 있다. 그러므로 모놀리식 커널에서와 같은 직접적인 함수 호출이 불가능하고, 대신 IPC와 같은 메시지 패싱 기법으로 호출할 수 있다.
IPC 매커니즘이 일반적인 함수 호출에 비해 꽤 큰 오버헤드를 갖고 있고, 또 커널 공간과 사용자 공간의 컨텍스트 전환(Context Switch)이 자주 발생하기 때문에, 모놀리식 커널에서 볼 수 없는 추가적인 처리량을 내재하고 있다.
커널은 컴퓨터에 부착된 장치들을 효율적으로 관리하도록 해주는 관리자의 역할을 한다. 각 장치들은 추상화를 통해 사용자들이 접근할 수 있게 된다.
커널은 크게 두 가지 타입으로 나뉠 수 있다. (하이브리드, 엑소 커널은 여기서는 논외로 하자.)
1. 모놀리식 커널 Monolithic Kernel
이 커널은 시스템을 관리하기 위한 기능들이 하나의 이미지에 내장된 커널을 의미한다. 하드웨어 위에 고수준의 가상 계층을 가지고 있으며, 어플리케이션 영역의 프로그램 구현을 위한 서비스를 제공한다. 이 서비스에는 프로세스 스케줄링, 메모리 관리, 디스크 관리, 장치 관리 등이 있으며, 이를 위하여 시스템 콜(System Call)의 형태로 서비스들을 제공한다.
커널이 하나의 프로세스로써 단일 주소 공간에서 실행되도록 구현되어있으며, 커널 이미지는 일반적으로 단일 정적 바이너리로 존재한다.
2. 마이크로 커널 Micro Kernel
커널의 기능들을 서버(Server)라 불리는 분리된 프로세스로 조각내어서 커널 자체의 크기를 줄인 커널이다. 각 서버들은 다른 주소공간에서 실행되도록 분리되어 있으며, 오직 서버만이 각 기능들을 특권 실행 모드(Privileged execution mode)에서 실행할 수 있다. 그러므로 모놀리식 커널에서와 같은 직접적인 함수 호출이 불가능하고, 대신 IPC와 같은 메시지 패싱 기법으로 호출할 수 있다.
IPC 매커니즘이 일반적인 함수 호출에 비해 꽤 큰 오버헤드를 갖고 있고, 또 커널 공간과 사용자 공간의 컨텍스트 전환(Context Switch)이 자주 발생하기 때문에, 모놀리식 커널에서 볼 수 없는 추가적인 처리량을 내재하고 있다.
Features of Linux Kernel::
리눅스 커널은 모놀리식 커널이지만, 모듈을 동적으로 적재할 수 있도록 지원한다. 모듈은 필요에 따라 그 코드가 적재(Load) 혹은 제거(Unload)될 수 있다.
SMP(Symmetric MultiProcessor)를 지원한다. SMP는 두 개 또는 그 이상의 프로세서가 하나의 메모리 공간을 공유하여 사용하는 다중 프로세서 아키텍쳐이다.
선점형 커널이다. 선점형 커널에서는 시스템 콜 루틴 수행 중간에 인터럽트를 체크해서 인터럽트의 수행을 우선시한다. 비선점형 커널에서는 시스템 콜을 우선시하여, 해당 호출이 끝난 후에 인터럽트를 수행한다.
리눅스에서는 스레드와 프로세스가 서로 다르지 않다. 이는 리눅스에서 스레드의 구현을 light weight process로 구현하기 때문이며, 이에 대해서는 나중에 논하기로 하겠다.
'Tips > Kernel development' 카테고리의 다른 글
VFS : Virtual File System - Introduction (0) | 2012.09.30 |
---|---|
PID Namespace (0) | 2012.03.15 |