본문 바로가기

Linux/OS

[커널] 알아봅시다, `커널(Kernel)`

OSS 2013-05-16 15:24:57 3717
2013
디지털타임스

글: 이형근 | bass007@dt.co.kr / 2013-05-15


인간과 하드웨어간 `통역사` 역할…
운영체제의 핵심…셀과 상호작용 커널 효율성이 `기기 성능` 좌우


커널 개념도


마이크로소프트 `윈도', `리눅스' 등 운영체제에 대해서 알아보면 `커널(Kernel)'이라는 용어가 자주 등장합니다. 커널(kernel)은 운영체제의 핵심 부분을 말합니다. 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공하는 역할을 하며, 메모리나 저장장치 내에서 운영체계의 주소공간을 관리합니다.


커널이라는 단어가 가진 사전적인 의미 자체가 `알맹이', `핵심'입니다. 커널의 주요 역할은 컴퓨터 하드웨어와 프로세스의 보안을 책임지는 `보안', 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 하는 `자원 관리', 비슷한 종류의 하드웨어에 공통된 명령어를 제공하는 `추상화' 기능 등이 있습니다. 커널은 시스템을 운영하기 위한 가장 기본적인 코드가 포함돼 있어야 장치 혹은 시스템의 기능과 관련된 변화가 있을 경우 새로운 커널이 필요합니다.


커널은 쉘(Shell)과 대비될 수 있는데, 쉘은 운영체계의 가장 바깥부분에 위치하고 있으면서, 사용자 명령에 대한 처리를 담당하는 역할을 하며, 커널은 하드웨어와 관련된 내부적인 역할을 담당합니다.


일반적으로, 커널에는 종료된 입출력 연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 `인터럽트 처리기'와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 `스케줄러', 그리고 스케줄이 끝나면 실제로 프로세스들에게 컴퓨터의 사용권을 부여하는 `수퍼바이저'등이 포함돼 있습니다. 커널은 또한 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 `메모리 관리자'를 가지고 있습니다. 커널을 유지하기 위한 코드는 지속적으로 사용되기 때문에, 보통 커널은 자주 사용되지 않는 운영체계 안의 보호된 메모리 영역에 적재됩니다.


초창기의 컴퓨터에서 운영체제에서 커널은 필수적인 것이 아니었습니다. 초기 프로그램은 하드웨어 추상화나 운영 체제의 지원을 받지 않고도 컴퓨터만으로 명령을 실행될 수 있었습니다. 이는 운영체제가 관리해야 하는 하드웨어의 수가 많지 않았고, 수행명령 역시 단순했기 때문입니다. 하지만 복잡하고 많은 명령을 수행하는 환경으로 이동하면서 메모리를 초기화하기 위해 컴퓨터의 전원을 다시 켜야 했고, 이같은 문제를 해결하기 위해 메모리 등 자원관리를 할 수 있는 커널이 등장하게 됐습니다.


커널은 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 `단일형 커널', 하드웨어 추상화에 대한 간결한 작은 집합을 제공하고 더 많은 기능은 응용 소프트웨어를 통해 제공하는 마이크로커널, 마이크로커널에 성능 향상을 위해 추가적인 코드를 넣은 `혼합형 커널', 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공하는 `엑소커널' 등이 있습니다.


유닉스, 윈도 등에 주로 사용되는 단일형 커널은 하드웨어 위에 높은 수준의 가상 계층을 정의합니다. 가상 계층은 기본 연산 집합과 관리자 모드에 작동하는 모듈인 프로세스 관리, 동시성, 메모리 관리 등의 운영 체제 서비스를 구현하기 위한 기능 등으로 구성돼 있습니다. 이 연산들을 제공하는 모든 모듈이 전체로부터 분리돼 있더라도 모든 모듈이 같은 주소 공간에서 실행되기 때문에 코드의 집적도가 높기 때문에, 수정하기 어렵고 한 모듈의 버그는 시스템 전반을 멈추게 할 수 있다는 문제점이 있습니다. 하지만 기능 구현이 신뢰할 수 있을 정도로 높아지면, 내부 시스템 이용을 효과적이게 만들어 높은 효율을 보장한다는 것이 장점입니다.


가장 많이 사용하는 마이크로소프트의 윈도 운영체제 경우 하드웨어와 연동만을 제어하는 `마이크로 커널'이 구성돼 있으며, 나머지는 `객체 관리자', `입출력 관리자', `가상 메모리 관리자' 등 각각 내부 관리자(Manager)를 통해 운영되는 방식이 적용됩니다.


리눅스나 솔라리스와 같은 최신의 단일형 커널은 실행 모듈을 실시간으로 읽어 들일 수 있으며, 허용하는 범위 내에서 손쉽게 확장할 수 있게 커널 공간의 코드의 양을 최소한으로 유지시켜 주는 장점이 있습니다.


커널은 복잡성과 방대함 때문에 개인이 개발하기에는 무리가 있습니다. 이 때문에 마이크로소프트와 같은 글로벌 기업 또는 리눅스처럼 오픈소스 방식으로 전세계 개발자들이 협력해 발전시키고 있습니다.



/필/자/소/개/

이형근bass007@dt.co.kr (프리지아 랩)

디지털타임스의 기자로 활동하고 있다. 디지털타임스 블로그 http://blog.dt.co.kr/blog/?mb_id=bass007를 운영한다.




※ 본 내용은 (주)디지털타임스(http://www.dt.co.kr/)의 저작권 동의에 의해 공유되고 있습니다.
Copyright ⓒ 디지털타임스. 무단전재 및 재배포 금지


[원문출처 : http://www.dt.co.kr/contents.html?article_no=2013051502011860718002]

맨 위로
맨 위로