/proc 파일 시스템

Posted 2006. 11. 6. 20:51
리눅스 커널에 새로운 기능을 추가로 구현할 경우, 이 기능을 유저 프로그램이 이용할 수 있게 만들기 위해서는 인터페이스를 열어주어야 한다. 커널이 유저 프로그램에 인터페이스를 제공하는 방법에는 크게 2가지가 있는데,

(1) 커널 시스템 콜 테이블에 엔트리를 추가하여, 새로운 시스템 콜을 만들어준다.

(2) /proc 파일 시스템을 통해 데이터를 주고 받을 수 있는 창구를 열어준다.


전통적으로 리눅스를 비롯한 UNIX에 새로운 커널 기능을 추가하는 방법에는 (1)과 같이 새로운 시스템 콜을 사용하는 방식이 선호되었다.  모든 시스템에서 사용하는 범용적인 기능이라면, 시스템 콜을 추가하여 모든 유저 프로그램이 이용할 수 있도록 하는 것이 맞을 것이다. 이 방식을 사용하려면 시스템 콜을 호출해주는 유저 라이브러리가 수정된 커널과 함께 배포되어야 한다.

하지만 (1)번 방식의 경우 플랫폼이 달라지면, 유저 라이브러리도 변경되어야 하는 불편함이 있다. 왜냐하면 시스템 콜을 호출하는 소프트웨어 트랩(software trap)의 구현이 아키텍처마다 다르기 때문이다. 어떤 아키텍처에서는 int 80h가 커널 모드로 진입하는 명령인데 비해서, 전혀 다른 명령을 쓰는 아키텍처도 있다. 문제는 C 언어 레벨에서는 커널 모드로 진입하는 트랩을 발생시킬 수 없다는 점이다. 따라서 새로운 플랫폼이 추가될 경우 시스템 콜을 호출하는 라이브러리를 추가로 작성해 주어야 한다.

따라서 리눅스 커널 모듈의 경우, 시스템 콜을 추가하는 방식보다 /proc 파일 시스템에 읽고 쓸 수 있는 파일을 생성하여 커널과 데이터를 주고 받는 방법을 선호한다. /proc에 있는 파일을 통해 유저 프로그램은 파일 쓰기를 통해 커널에 데이터를 전달할 수 있고, 파일의 내용을 읽어서 결과를 전달받을 수 있다. 이 방식은 모든 플랫폼에서 호환 가능하기 때문에 (1)의 시스템 콜 추가 방식과 달리 플랫폼 간 호환성이 보장된다.

proc 파일 시스템을 이용하는 방법은 "The Linux Kernel Module Programming Guide" Chapter 5. The /proc File System를 참고하자.