본문 바로가기

ComputerScience/Linux

Linux4. Design Principle of Linux Kernel

728x90

1. Monolithic vs Micro

커널은 크게 커널 내에 넣는 feature의 양에 따라 Monolithic 커널과 Micro 커널로 나눌 수 있다.

마이크로 커널은 커널의 핵심적인 부분(스케쥴링, 메모리 관리)만 커널에 담고 있다. 대부분의 커널 기능들이 user mode에 있다.

당연히 확장성과 모듈화가 좋다.

커널과 통신할때는 system call을 통해서, 모듈끼리는 Inter Process communication(IPC)로 서로 통신해야 한다.

좌측의 빨간 화살표는 function call, 우측의 화살표는 IPC이다.

반면 Monolithic Kernel은 커널 모듈끼리 function call로 통신하므로 훨씬 빠르다.

IPC는 프로세스간 통신으로 message queue, shared memory를 활용해서 구현된다.

 

2. Loadable Kernel Module

kernel이 실행될 때 run time에 kernel 모듈을 insert/remove 할 수 있다. 

즉 커널에 소스코드를 추가/삭제 할 수 있다.

reboot를 하지 않고도 커널을 확장할 수 있어, LKM을 통해서 리눅스는 모듈화와 확장성을 제공한다.

kernel의 여러 기능들은 각각 모듈로 따로 따로 컴파일된다.

커널 모듈은 .ko 확장자가 붙는다. 보통 /lib/modules/에 있다.

예를 들어 우리가 컴퓨터에 새로운 장치(키보드 등)를 연결하면 그에 맞는 device driver가 필요하다. 이때 우리는 해당 드라이버를 설치하지 처음부터 kernel을 다시 빌드하지 않는다.

3. lsmod

현재 설치된 커널에서 모듈들을 List하는 명령어다

여기서 used by는 다른 모듈들이 얼마나 해당 모듈을 사용하고 있는가를 나타낸다.

 

4. insmod

사용자가 kernel module(.ko)을 runtime에 현재 커널에 추가하는 명령어 이다.

insmod my_module.ko

 

5. rmmod

running kernel에서 모듈을 제거한다. 제거하려면 제거하려는 모듈이 다른 모듈들에 의해 사용되지 않고 있어야 한다(unused)

rmmod my_module.ko

 

6. modinfo

모듈의 정보를 출력한다.

modinfo hello_module.ko

 

7. Compile kernel module 

1. 먼저 모듈 소스코드를 작성한다.

// insmod가 불리면 __init hello_module_init()이 호출된다.
insmod hello_module.ko

// rmmod가 불리면 __exit hello_module_cleanup()이 호출된다.
rmmod hello_module.ko

// printk로 출력되는 메시지를 보고싶으면 
dmesg

module_init은 모듈 initialization의 entry point이다.

module_exit : exit entry point

 

2. 모듈 소스코드들이 들어있는 폴더에 makefile을 만든다.

vi Makefile

참고로 uname -r 은 현재 커널 이름을 reference한다

 

3. make를 하면 끝이다.

make

 

728x90
반응형

'ComputerScience > Linux' 카테고리의 다른 글

Linux8. Process  (1) 2023.10.09
Linux6. Makefile  (0) 2023.09.28
Linux3. System Call  (1) 2023.09.28
Linux2. linux commands and tools  (0) 2023.09.14
Linux1. Operating System? Linux?  (0) 2023.09.14