리눅스 커널은 모놀리식이지만, 모듈화를 통하여 동적으로 기능을 추가하거나 제거할 수 있다
dm_mod, Device Mapper Module 에서 리눅스 커널에 모듈을 동적으로 불러오는 명령어가 있어 질문함.
리눅스 커널은 기본적으로 모놀리식 커널(monolithic kernel)의 특성을 가지고 있지만, 모듈식 커널(modular kernel)의 기능도 함께 제공합니다. 이 두 가지 개념이 함께 사용될 수 있는 이유와 이를 어떻게 구현하는지 설명하겠습니다.
1. 모놀리식 커널의 개념#
모놀리식 커널은 전통적으로 모든 운영체제의 핵심 기능(파일 시스템, 프로세스 관리, 메모리 관리, 장치 드라이버 등)을 하나의 커널 이미지 내에서 실행하는 방식입니다. 모든 기능이 커널에 통합되어 있어 하나의 큰 실행 파일처럼 동작합니다.
- 특징: 모든 운영체제의 주요 기능과 드라이버가 커널에 직접 포함되어 있으며, 커널이 실행되는 동안 사용자 공간과는 구분되어 높은 권한으로 실행됩니다.
2. 모듈식 커널의 개념#
모듈식 커널은 커널의 주요 기능을 동적으로 추가하거나 제거할 수 있는 방식입니다. 커널을 컴파일할 때 모든 기능을 포함하지 않고, 필요할 때 커널 모듈을 로드하여 기능을 추가할 수 있습니다. 이렇게 동적으로 로드되는 모듈들은 디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등 다양한 기능을 제공합니다.
- 특징: 커널의 핵심 기능은 유지하면서도, 새로운 기능을 동적으로 추가하거나 제거할 수 있어 유연성이 높습니다. 예를 들어, USB 장치를 연결했을 때 관련 드라이버가 자동으로 로드되거나 수동으로 로드될 수 있습니다.
3. 리눅스 커널: 모놀리식이면서 모듈식#
리눅스 커널은 기본적으로 모놀리식 커널입니다. 이는 커널의 핵심 기능이 단일 커널 내에서 실행된다는 의미에서 모놀리식이라는 것이죠. 하지만, 리눅스 커널은 모듈성을 지원하는 모놀리식 커널입니다. 즉, 리눅스는 기본적으로 커널이 실행될 때 필요한 기본 기능들을 모놀리식 구조로 제공하지만, 필요에 따라 커널 모듈을 동적으로 로드하고 제거할 수 있는 기능을 추가적으로 제공합니다.
- 모듈의 장점: 리눅스는 모든 기능과 드라이버를 커널에 미리 포함시키는 대신, 필요할 때만 해당 기능을 모듈로 로드할 수 있습니다. 이렇게 하면 커널의 크기를 줄이고, 메모리 사용을 절약하며, 새로운 하드웨어나 기능이 필요할 때 유연하게 대처할 수 있습니다.
4. 리눅스의 모듈화 기능 예시#
리눅스에서 모듈은 주로 하드웨어 장치 드라이버나 파일 시스템, 네트워크 프로토콜 등을 다룰 때 사용됩니다. 예를 들어:
- USB 장치 드라이버: USB 장치를 연결할 때 해당 장치에 맞는 드라이버 모듈이 자동으로 커널에 로드됩니다.
- 파일 시스템: 특정 파일 시스템을 지원하기 위한 모듈을 동적으로 로드할 수 있습니다.
- Device Mapper: 앞서 언급한
dm_mod
는 LVM과 관련된 장치 매핑을 지원하는 모듈로, 필요할 때 커널에 로드할 수 있습니다.
5. 모듈을 로드하고 관리하는 도구#
리눅스는 모듈을 동적으로 관리하기 위해 몇 가지 도구를 제공합니다:
- modprobe
: 모듈을 커널에 로드하거나 제거하는 명령어입니다.
- lsmod
: 현재 로드된 커널 모듈 목록을 확인하는 명령어입니다.
- rmmod
: 커널 모듈을 언로드(제거)하는 명령어입니다.
요약#
리눅스 커널은 기본적으로 모놀리식이지만, 모듈화를 통해 동적으로 기능을 추가하거나 제거할 수 있는 유연성을 가지고 있습니다. 따라서 "리눅스 커널이 모놀리식이다"는 말은 맞지만, 리눅스는 모놀리식 구조 내에서 모듈화된 기능을 지원하여 필요에 따라 커널 모듈을 동적으로 로드하거나 제거할 수 있습니다.