Media Log

커널 모드에서 코드를 작성한다는 것은 유저모드에서 보다 어려운 사항이 많이 있다.
언어도 자유롭게 사용할 수 없고, 디버깅도 힘들며, 한 줄이라도 실수하면 여지없이 블루스크린이 발생한다.
그럼 커널 모드 디바이스 드라이버와 같은 것들을 유저 모드에서 구현할 수 는 없을까.

리눅스에는 FUSE라는 것이 있다.
File system in User Space 라는 뜻인데, 유저모드에서 파일 시스템을 구현하도록 제공되는 인터페이스이다.


윈도우에도 물론 비슷한 것들이 있다.
상용 제품인 Callback File System은 콜백 인터페이스를 제공하고 유저모드에서 이 콜백 인터페이스를 구현하기만 하면 CBFS가 알아서 이런 콜백들을 불러준다.


위 그림에서 보면 우리는 Your Application 부분만을 구현하면 되는 것이다.
우측에 있는 Callback File System에서 ReadFile WriteFile등 우리가 미리 등록해둔 콜백 오퍼레이션들을 호출해 줄텐데, 그런 함수들이 호출되면 파일들을 읽고 쓰도록 구현하면 된다.

내 또래의 일본인이 혼자서 열심히 만들고 있는 것 같아 보이는 Dokan 이라는 오픈소스도 있다.


파일 시스템 애플리케이션(우측 초록색)이 처음 구동되면 워커 쓰레드를 여러개 만들어 DeviceIoControl 함수를 호출해 Dokan File System Driver(아래 파랑색)에게 집어 넣어놓는다. DevceIoControl 함수는 비동기 호출도 가능하고 IOCP도 지원이 되지만 Dokan에서는 간단하게 구현하기 위해서 쓰레드를 여러개 만들어 동기적으로 호출한다.
애플리케이션들로(좌측 초록색) 부터 I/O가 들어오면 Dokan Driver(아래 파랑색)가 이 Irp들을 받아서 잘 정리한 뒤 파일 시스템 애플리케이션(우측 초록색)이 미리 넣어두었던 DeviceIoControl의 버퍼에 데이터를 복사하고 완료시킴으로 유저모드로 작업을 위임한다. 파일 시스템 애플리케이션에서는 해당 이벤트가 뭔지 확인해본 뒤에 실제로 처리를 한 후 파일 시스템 드라이버에게 다시 그 결과를 전달해준다. 그러면 파일 시스템 드라이버는 받은 결과 그대로 애플리케이션들의(좌측 초록색) Irp를 완료시킨다.

이렇게 드라이버가 유저모드의 구현을 위한 인터페이스만을 제공함으로서 파일 시스템 로직 구현을 유저모드로 옮길 수 있으며, 유저모드 개발시의 여러 장점들을 가져올 수 있다.
그림에서 보이는 것처럼 두번씩 왔다 갔다 해야하는 것이 성능의 저하를 가져올 수 있고, 유저모드로 구현이 넘어감에 따라 커널 모드 라이브러리 루틴들을 마음껏 쓸 수 없다는 것은 단점이라 할 수 있겠다.
저작자 표시 비영리 동일 조건 변경 허락
신고
  1. 오곡 at 2012.11.26 11:04 신고 [edit/del]

    좋은 내용 잘봤습니다 ^^

    Reply

submit
코드로 읽는 리눅스 디바이스 드라이버 - 8점
스리크슈난 벤카테스와란 지음, 박재호 옮김/에이콘출판
에이콘 출판사에서 코드로 읽는 리눅스 디바이스 드라이버라는 새 책이 출간되었다.
이 책의 원제는 Essential Linux Device Drivers이며 2008년도에 발매되었다.

나는 아마존에서 'device driver' 로 자주 검색을 해보는데 이 책은 언제나 1위로 검색이 되어서 잘 기억하고 있다.

리눅스건 윈도우건 디바이스 드라이버에 대한 책은 그렇게 많지 않은데다가 2000년대 초반, 심지어 90년대의 책들이 수두룩하다. 생각해보니 윈도우가 리눅스보다 더 심한 것 같다.
디바이스 드라이버 세계에서 2008이라는 숫자는 엄청난 최신 버전이므로 이런 책이 번역되어져 나왔다는 것은 참 반가운 일이 아닐 수 없다.

지금은 윈도우 드라이버만 만들고 있지만 앞으로 리눅스에서 드라이버를 개발하게 될지도 모르고, 언제나 그렇듯이 다른 플랫폼을 공부하는 것은 현재 플랫폼을 잘 이해하는데 큰 도움이 되기 때문에 이 책도 꼭 읽어볼 생각이다.

책 목차를 보면 상당히 방대한 부분을 다루고 있는데, 얼마나 자세한 내용인지는 모르겠다.
나는 FUSE를 통해 파일 시스템을 만드는 것에 특히 관심이 있는데 이런 내용은 없는 것 같아서 좀 아쉽긴 하다.

반가운 점이 또 하나 있는데 바로 책의 가격이다.
이 책의 정가는 35,000원인데, 나는 책의 가격과 출판사를 몇번이나 눈알을 왔다 갔다 하며 쳐다보았다.
에이콘의 책은 가격이 아주 비싼 편인데, 이제부터는 가격을 좀 낮게 책정하기로 결정한건지는 모르겠지만 어쨌거나 독자들에게는 좋은 일이다. 앞으로도 잘 부탁해요 에이콘. 크크.

오늘 아침에 잠시 조엘의 책을 읽는데 재밌는 내용이 있었다.
그가 인터뷰를 하거나 혹은 이력서를 읽을 때의 이야기이다.

나는 자바보다 한결 오래된 언어인 OCaml 로 작업한 사람을 보고 매우 감동 받은 적이 있다. 또 아득한 향수가 깃든 어셈블러나 디바이스 드라이버 또는 커널로 작업한 프로그램을 보면 비주얼 베이직이나 PHP로 작업한 것보다 한결 가슴이 뭉클해진다.

디바이스 드라이버를 만드는 사람들이나 공부하는 사람들에게 조금이나마 힘이되는 글 아닌가? 크크.

좋은 책을 번역해주신 역자께 감사한다.


저작자 표시 비영리 동일 조건 변경 허락
신고
  1. Favicon of http://jhrogue.blogspot.com BlogIcon jrogue at 2010.08.28 17:41 신고 [edit/del]

    이벤트 당첨 선물을 보내드리려고 합니다. 우편물 받으실 주소를 jrogue 에뜨 쥐메일.com으로 보내주시면 감사하겠습니다. ;)

    - 박재호 올림

    Reply
  2. at 2010.09.01 17:35 [edit/del]

    비밀댓글입니다

    Reply
  3. Favicon of http://namoda.springnote.com BlogIcon 나모 at 2010.10.28 14:10 신고 [edit/del]

    박재호님이 옮기신 책을 김재호님이 블로깅하셨군요. ^^

    Reply

submit