
커널은 하드웨어 구성 요소와 소프트웨어 구성 요소 간의 상호 작용을 가능하게 하는 운영 체제의 핵심 부분입니다. 대부분의 시스템에서 커널은 부트로더 다음으로 시작될 때 로드되며 I/O 요청과 키보드, 모니터, 네트워크 어댑터, 스피커 같은 주변 장치를 처리합니다. 일반적으로 커널은 메모리 관리, 프로세스 관리, 장치 관리, 시스템 호출, 보안을 담당합니다. 애플리케이션은 시스템 호출 메커니즘을 사용하여 운영 체제에 서비스를 요청하며, 대부분의 경우 이 요청은 관련 커널 함수를 호출하기 위해 운영 체제가 제공하는 라이브러리를 통해 커널에 전달됩니다. 커널이 이러한 저수준 작업을 수행하는 동안, 애플리케이션 및 기타 시스템 부분에서 접근할 수 없는 보호된 커널 공간이라는 메모리의 별도 영역에 상주합니다. 반대로 브라우저, 텍스트 편집기, 창 관리자 또는 오디오/비디오 플레이어 같은 애플리케이션은 메모리의 다른 별도 영역인 사용자 공간을 사용합니다. 이러한 분리는 사용자 데이터와 커널 데이터가 서로 간섭하여 불안정성과 느려짐을 유발하는 것을 방지하고, 오작동하는 애플리케이션 프로그램이 전체 운영 체제를 중단시키는 것을 방지합니다. 시스템 호출과 리소스를 관리하는 다양한 방식으로 인해 여러 커널 설계가 존재합니다. 예를 들어, 모놀리식 커널은 속도를 위해 모든 운영 체제 명령을 동일한 주소 공간에서 실행하는 반면, 마이크로커널은 모듈성을 위해 사용자 서비스와 커널 서비스에 서로 다른 공간을 사용합니다. 그 외에도 하이브리드 커널, 나노커널, 엑소커널이 있습니다. 하이브리드 커널 아키텍처는 마이크로커널과 모놀리식 커널의 측면을 결합한 것입니다.
리눅스 커널은 오픈 소스이며 모놀리식이고 유닉스 계열 운영 체제 커널로, 리눅스 배포판, 라우터와 같은 다양한 임베디드 시스템, 그리고 모든 안드로이드 기반 시스템에서 사용됩니다. 리누스 토르발스가 1991년에 리눅스 커널을 구상하고 만들었으며, 오늘날에도 수천 명의 개발자가 계속 개발하고 있습니다. 이는 자유 및 오픈 소스 소프트웨어의 대표적인 예이며, 특히 GNU 운영 체제와 같은 다른 자유 소프트웨어 프로젝트에서도 사용됩니다. 리눅스 기반 운영 체제가 컴퓨팅의 대부분을 지배하고 있지만, 리눅스 초창기부터 논쟁이 많았던 몇 가지 설계 결함을 여전히 가지고 있습니다. 예를 들어, 다른 유형의 커널에 비해 가장 큰 풋프린트와 가장 큰 복잡성을 가지고 있습니다. 하지만 이것은 모놀리식 커널이 본질적으로 갖는 설계 특징입니다. 이러한 종류의 설계 문제는 개발자들이 다른 커널이 갖지 않은 새로운 기능과 메커니즘을 리눅스 커널에 추가하도록 이끌었습니다.
표준 모놀리식 커널과 달리 리눅스 커널은 모듈식이기도 하며, 일반적으로 새로운 하드웨어 (장치 드라이버로) 및/또는 파일 시스템 지원을 추가하거나 _시스템 호출_을 추가하는 데 사용되는 로드 가능한 커널 모듈 (LKM) 을 허용합니다. LKM은 런타임 시 시스템에 로드 및 언로드될 수 있으므로 재부팅이나 재컴파일 없이 커널을 확장할 수 있는 장점이 있습니다. 따라서 모듈이 제공하는 커널 기능은 사용되지 않고 메모리에 상주하지 않으며, 관련 모듈을 언로드하여 메모리 및 기타 리소스를 확보할 수 있습니다.
로드 가능한 커널 모듈은 리눅스에서 .ko (커널 오브젝트) 확장자를 가지고 /lib/modules에 위치합니다. 로드된 커널 모듈을 나열하려면 lsmod 명령을 사용할 수 있고, 커널 모듈을 로드 또는 언로드하려면 modprobe 또는 insmod/rmmod를 사용합니다. insmod/rmmod는 modprobe에 의존하지 않고 /lib/modules/$(uname -r)에 설치할 필요 없이 모듈에 사용됩니다.
다음은 로드 및 언로드 시 메시지를 출력하는 간단한 리눅스 커널 모듈의 예제입니다. Makefile을 사용한 모듈의 빌드 및 설치 단계는 아래에 나와 있습니다.``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
아래에서는 [dmesg](https://linux.die.net/man/8/dmesg) 명령어를 사용하여 커널의 메시지 버퍼를 검색합니다.```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon은 Linux 커널 모듈을 관리하고 커널 활동을 모니터링하기 위한 텍스트 기반 사용자 인터페이스를 제공합니다. 관리한다는 것은 모듈의 로드, 언로드, 블랙리스트 추가 및 정보 표시를 의미합니다. 커널 모듈의 업데이트, 하드웨어 관련 로그 및 기타 커널 메시지는 kmon의 실시간 활동 모니터로 추적할 수 있습니다. Linux에서 이러한 작업에는 dmesg 및 kmod와 같은 다양한 도구의 사용이 필요하기 때문에, kmon은 이들을 하나의 터미널 창에 모아 기능을 유지하면서 최대한 사용을 용이하게 하는 것을 목표로 합니다.
kmon은 Rust로 작성되었으며, 텍스트 기반 사용자 인터페이스를 위해 Ratatui 및 termion 라이브러리를 사용합니다.
kmon은 Rust가 설치되어 있다면 Cargo를 사용하여 crates.io에서 설치할 수 있습니다.``` cargo install kmon
지원되는 최소 Rust 버전(MSRV)은 `1.74.1`입니다.
### Arch Linux
**kmon**은 Arch Linux [공식 저장소](https://www.archlinux.org/packages/extra/x86_64/kmon/)에서 설치할 수 있습니다.```
pacman -S kmon
또한 AUR에 개발 패키지가 있습니다. 선호하는 AUR helper를 사용하여 설치하세요. 예를 들어,``` paru -S kmon-git
### Nixpkgs
**kmon**은 `nixpkgs-unstable` 채널에서 [Nix 패키지 관리자](https://nixos.org/nix/)를 사용하여 설치할 수 있습니다.```
nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update nixpkgs
nix-env -iA nixpkgs.kmon
NixOS에서:``` nix-channel --add https://nixos.org/channels/nixos-unstable nix-channel --update nixos nix-env -iA nixos.kmon
### Alpine Linux