- kernel
커널이란 하드웨어와 소프트웨어 간을 이어주는 역할을 하는, 대다수의 운영 체제의 중핵을 이루는 부분이다.[1]
커널의 주된 임무는 위에서 언급한 대로 CPU, RAM, 입출력 (Input /Output, I/O) 등의 하드웨어 추상화로, 커널을 통함으로서 애플리케이션은 하드웨어의 종류나 구성에 구속되지 않고 다양한 시스템 상에서 가동할 수 있다. 또 다른 커널의 주된 임무로는 애플리케이션의 편의를 위해 프로세스의 추상화 및 프로세스 간의 통신, 시스템 콜 등의 기능을 제공하는 것을 들 수 있다.구글이나 네이버가 있기에 인터넷 상의 여기저기에 흩어진 정보를 손쉽게 찾아 사용할 수 있는 거랑 비슷하다고 생각하면 편하다.
커널의 주된 기능으로는 다음을 들 수 있다.
- 프로세스 관리
- 프로세스는 응용 프로그램이 액세스 할 메모리 영역을 정의한다. 커널에 있어서 프로세스 관리란, 응용 프로그램이 사용할 어드레스 공간을 할당하고, 해당 응용 프로그램의 코드를 지정된 어드레스 공간에 로드하며, 로드된 코드에 대한 콜 스택을 설정한 다음 해당 프로그램의 적절한 위치에 제어를 넘겨주기까지의 처리 과정을 뜻한다.
- 멀티 태스킹이 가능한 커널의 경우, 위의 관리에 더해 각 프로세스가 처리될 순서를 결정하고 처리의 타이밍을 지정해, 마치 복수의 프로세스가 동시에 작동하는 것처럼 보이도록 관리한다. 이러한 관리를 스케줄링이라고 부른다.
- 또한 복수의 프로세스가 서로간에 데이터를 주고받을 수 있도록 프로세스 통신을 제어하는 것 역시 프로세스 관리의 영역에 속한다.
- 메모리 관리
- 커널은 시스템의 모든 메모리[2]를 사용하는 것이 가능한 반면, 유저 프로그램은 보안상의 이유 등으로 인해 메모리 사용이 제한된다. 그런 탓에 커널은 한정된 메모리를 각 프로그램에 할당, 시스템의 안정성을 확보하는 동시에 응용 프로그램이 원활하게 작동하도록 한다.
- CPU에 가까운 메모리 일수록[3] 연산 속도가 빨라지는 반면, 반대급부로 메모리 자체의 용량은 작아지게 된다. 그렇기에 어느 응용 프로그램의 어떤 처리에 어떤 메모리를 할당하느냐에 따라 응용 프로그램 및 시스템 전체의 성능이 좌우되게 되는데, 이러한 중요한 요소의 제어 역시 커널의 주된 임무 중 하나다.
- 장치 관리
- 시스템 콜
- 위의 설명을 보
고 어렴풋하게나마 이해했다면 알 수 있듯, 커널은 시스템 전체에서 중요한 역할을 담당하고 있다. 그렇기에 CPU의 설계에 좌우되는 부분은 있으나, 대부분의 경우 보안상의 이유로 커널 공간과 유저 공간이 분리되어 있어, 유저 프로세스는 함부로 커널에 액세스 할 수 없도록 되어 있다.[4] 그렇기에 커널은 유저 프로세스가 간접적으로 커널의 기능을 사용할 수 있도록 커널을 호출할 수 있는 기능을 내재하고 있다. 이것이 시스템 콜로, 각 커널의 설계에 따라 다양한 방식이 존재하나, 어느 방식이든 유저 프로세스가 미리 지정된 행동을 하는 것으로 커널을 호출할 수 있게 도와준다.
- 위의 설명을 보
커널의 종류로는 모놀리식 커널, 마이크로 커널, 그리고 이 둘을 적절히 혼합한 하이브리드 커널이 있다. 리눅스는 모놀로식 커널이며, 리눅스의 모체가 된 미닉스는 마이크로 커널이었다. 윈도우는 과거 마이크로 커널이었지만 현재는 하이브리드 커널로 분류되고 있다. 참고로 그 티멕스 윈도우는 마이크로 커널이었다.
각주
- ↑ 다만 단순한 임베디드 시스템의 경우 커널이 필요 없기에 커널 없는 운영 체제를 탑재하고 있는 경우도 있다. 물론 Windows CE나 리눅스 커널을 탑재한 임베디드 시스템의 경우는 그런 거 없다
- ↑ RAM은 물론, L1, L2, L3 캐쉬 메모리 및 가상 메모리를 모두 포함한다.
- ↑ 일반적으로는 L1 캐쉬 → L2 캐쉬 → L3 캐쉬 → RAM → 디스크 (가상 메모리)의 순이다. CPU의 구조를 이해는 위키러라면 굳이 설명할 필요도 없겠지만, 물리적으로 CPU에 가까운 순으로 처리 속도가 빨라진다.
- ↑ 굳이 언급할 필요도 없겠지만 반대로 커널은 모든 유저 프로세스에 액세스 할 수 있다.
이 문서의 전체 혹은 일부는 운영 체제 문서에서 가져왔습니다.