본문 바로가기

Programming/Linux

커널과 모듈의 개념

커널(kernel)과 모듈(Module)을 간단히 파악해보면


커널이란? 커널이란 운영체제(Operating System)에서 가장 핵심적인 역할인 자원 (메모리, 프로세서등)을 관리하며 시스템이 원활히 돌아갈 수 있도록 제어해 준다. 현재 우리가 리눅스(OS)라고 하는것도 실제적으론 리눅스란 운영체제의 커널 이름을 말하는것인데 이것이 확장된 의미로 사용되어 현재의 '리눅스'란 OS를 지칭하게도 된것이다. 그러므로 Linux = kernel이란 등식이 성립한다.


초창기의 커널은 지원할 하드웨어가 그리 많지 않아서 커널에 하드웨어를 지원하는 코드를 모두 넣어 뒀다. 이후 운영체제가 무거워 지자 하드웨어를 제어하는 코드 중에서 필요할 때만 가끔식 사용하는 코드를 커널에 넣지 않고 별도로 보관했다가 필요할때 호출하게 되는데 이를 모듈(m)이라고 하고 모듈이 아닌 코드를 built-in이라고 한다. 

또 모듈컴파일의 필요성은 커널 컴파일시 많은 시간이 소요되는데 반해 모듈 컴파일은 직접 컴파일한후 적재와 제거가 가능하여서 시간이 많이 단축된다.


커널 컴파일 과정을 요약하면


커널 컴파일은 언제 하나? 커널은 시스템을 운영하기 위한 가장 기본적인 코드가 포함되어 있어야 한다. 즉, 장치 혹은 시스템의 기능과 관련된 변화가 있을 경우 새로운 커널을 생성해야 한다.현재 시스템은 어떠한 장치가 장착되어 있으며, 어떠한 목적으로 시스템을 운영할 것인가에 따라 커널의 구성요소가 달라질 수 있다는 것을 의미하며, 현재 커널에는 어떠한 것들을 지원하는가에 대한 정보는 커널 소스 디렉토리에 존재하는 Documentation 디렉토리에서 해당 정보를 얻을 수 있다.만약 현재 시스템을 운영하기 위해 필요로 하는 장치에 대한 정보나 기능에 대한 핵심 코드가 현재 커널에 존재한다면 굳이 커널을 업그레이드 하거나 새로 생성할 필요가 없다. 하지만 간혹 커널 자체에 보안적 문제가 존재하기도 하는 데, 그러할 경우 꼭 커널 업그레이드를 해야한다.