커널 프로그래밍을 위해 커널에서 직접 제공하는 Kernel API들이 있음을 잘 알고 있을 것이다. 그 외에 유저 영역에서 커널과 인터페이스하기 위한 여러가지 수단들을 알아본다.
IPC between Kernel & User space
- Posix Syscall
- Software 인터럽트를 이용한 System Call
- Posix library를 통해 호출
- Kernel-provided User Helper
- 고속 처리를 목적으로 syscall을 통하지 않고 커널 코드에 직접 호출하는 특정 API들 (특정 아키텍처에서만 지원)
- Usermode Helper
- 커널에서 직접 유저 코드를 로드하여 실행시킬 수 있다.
- procfs 인터페이스
- 리눅스 커널에 포함된 가상 /proc 디렉토리를 통해 커널 정보를 간단히 조회할 수 있다.
- sysfs 인터페이스
- 리눅스 커널에 포함된 가상 /sys 디렉토리를 통해 다양한 장치 드라이버 및 커널 정보에 접근할 수 있다. (커널 디버깅 및 트레이싱 인터페이스 포함)
- cgroup 인터페이스
- CPU 시간, 시스템 메모리, 네트워크 대역폭과 커널 자원들을 사용자 정의 작업 그룹간에 할당할 수 있다.
- dev 인터페이스
- 리눅스 커널에서 사용하는 장치 디바이스에 접근할 수 있다.
- socket 인터페이스
- 네트워크 통신을 위해 제공하는 소켓 프로그래밍 인터페이스이다.
- netlink 소켓 인터페이스
- 표준 소켓 인터페이스를 사용하여 커널과의 양방향 통신을 제공하는 인터페이스이다.
참고
- Proc filesystem – 시스템 정보 수집 | 윤상배
- Communicating between the kernel and user-space in Linux using Netlink Sockets | Pablo Neira Ayuso – 다운로드 pdf
- Sockets in the kernel | Rami Rosen & Haifux – 다운로드 pdf
- The Sysfs Virtual Filesystem Exploring the Linux Device Model | Bill Gatliff – 다운로드 pdf
- Brief sysfs Tutorial | Ben Marks – 다운로드 pdf
- Invoking user-space applications from the kernel | M. Tim Jones
- Kernel-provided User Helpers | 문c
- FTrace | 문c
- Kernel Debugging | 문c
- Kernel Tracing | 문c
- TRACE_EVENT | 문c
- Kprobe | 문c
- Control Groups | 문c
- Control Group for Memory | 문c