IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  리눅스  >

Common threads: 고급 파일시스템 개발자 가이드, Part 4

devfs

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.


난이도 : 초급

Daniel Robbins, President/CEO, Gentoo Technologies, Inc.

2001 년 9 월 01 일

"고급 파일시스템 개발자 가이드" 네 번째 시리즈이다. 이번에는 디바이스 관리 파일시스템인 devfs의 중요성과 점을 설명한다. 시스템에 devfs를 효과적으로 설치하는 방법도 설명되어 있다.

devfs

Devices, devices everywhere

Devfs 또는 다바이스 파일시스템(Device Filesystem)은 /dev를 설치하는 모든 블록과 문자 디바이스를 관리하는 새로운 방식을 제시한다. 여러분도 알고 있듯이 전형적인 /dev 트리에는 수 백개의 블록과 문자들의 스페셜 파일(special file)들이 포함되어있다. 그들 모두 root 파일시스템에 있다. 이러한 스페셜 파일들이 커널 디바이스와 쉽게 상호 작동하기 위해서 사용자 공간 프로세스에 적용된다. 이러한 스페셜 파일에 대한 작동을 수행함으로서, X server는 비디오 하드웨어(video hardware)에 액세스 할 수 있고, fsck는 파일시스템 검사를 수행할 수 있으며, lpd는 직렬 포트를 통해 프린터로 데이터를 전송할 수 있다.

디바이스 관리 문제

그러나 디바이스 스페셜 파일들이 그 자체로 좋은 것이긴 하지만 전형적인 Linux 시스템들은 이런 스페셜 파일들을 효과적이지 않은 방식으로 관리한다. 오늘날 Linux는 다양한 많은 종류의 하드웨어를 지원한다. 이것이 의미하는 것은 /dev에 이러한 디바이스들을 나타내는 수 백개의 스페셜 파일들을 가질 수 있다는 뜻이 된다. 뿐만 아니라, 이런 스페셜 파일의 대부분은 시스템상의 기존 디바이스에 매핑되지 않는다. (새로운 하드웨어/드라이버를 시스템에 추가할 경우 매핑할 필요가 있다).

devfs가 이러한 /dev 관리상의 문제점들을 해결하는 방법을 이해하기 위해 디바이스 드라이버의 관점에서 devfs를 살펴보자.




위로


디바이스 관리 특징

devfs를 좀 더 잘 이해하려면 일단 디바이스 드라이버의 관점에서 devfs가 이러한 문제들을 어떻게 변화시키는 지를 이해하는 것이 중요하다. 일반적으로 (devfs가 없을 때에는), 커널 기반의 디바이스 드라이버는 register_blkdev() 또는 register_chrdev()을 호출하여 나머지 시스템에 디바이스를 등록한다. 이것이 블록 또는 문자 디바이스를 등록하는지에 따라 다르다.

넘버(number) 가져오기

개발자가 드라이버를 다른 세계와 공유하길 원한다면 (대부분의 Linux 개발자들은 이 같은 접근 방식을 택한다), 난데없이 메이저 넘버를 가져오거나 메이저 넘버 할당을 사용하면 안된다. 대신, Linux 커널 개발자와 연결하여 특정 디바이스가 "공식적인" 메이저 넘버로 지정될 수 있도록 해야 한다. 그렇게 되면 Linux 세계를 통해서 이 특별한 디바이스는 특별한 메이저 넘버와 연결될 것이다.

특별한 디바이스와 상호작용 하기 위해서 "공식적인" 메이저 넘버를 갖는 것은 중요하고 관리자는 /dev에 스페셜 파일을 만들어야 한다. 디바이스 노드(스페셜 파일)가 만들어지면, 이것은 커널에 의해 내부에서 사용되는 똑같은 메이저 넘버를 작동시켜야 한다. 그러한 방식으로 프로세스가 디바이스에 대한 작동을 수행할 때 커널은 어떤 디바이스 드라이버가 참조되는 지를 알 수 있다. 스페셜 파일에서 커널 드라이버로의 매핑은 non-devfs 시스템과 관련이 없는 실제 디바이스 이름이 아닌 메이저 넘버에 의해 이루어진다.

기존의 문제들

불행하게도 이러한 종류의 접근 방식에는 확장성 문제가 많이 있다. 이것은 공식적인 메이저 넘버를 받기 위해 커널 개발자들에게 접촉해야 하는 디바이스 드라이버 개발자들에게 고통일 뿐아니라, 이러한 메이저 넘버를 할당한 방법을 생각해야 하는 커널 개발자들에게도 성가신 일이다. 이러한 태스크는 기업 LAN 상에서 정적인 IP 주소의 할당을 트래킹 해야하는 sysadmin의 작업과 흡사하다. 재미있는 일은 아니다. sysadmin이 관리의 짐을 줄이기 위해 DHCP를 이용할 수 있는 것과 같이 디바이스를 등록하는 데에 비슷한 접근 방법이 있다면 좋을 것이다.

이 뿐만아니라 Linux는 메이저 넘버와 마이너 넘버를 다 써버린다. 이 문제는 메이저와 마이너 넘버에 사용되는 비트 넘버를 확장함으로서 해결할 수 있는 반면 이러한 메이저 넘버 매핑을 유지하는 것이 고통이다. 여기 devfs라는 해결책이 있다.




위로


devfs 연구

devfs_register()

devfs가 이같은 모든 문제들을 풀어가는 방법에 대해서 간략하게 보도록 하자. 일단 devfs가 올바르게 설정되면 devfs 지원이 커널에 추가되고 스크립트를 시작하기 위해 많은 변경 트릭을 수행하게 된다. 수퍼유저는 시스템을 재부팅한다. 그리고 나서 커널은 부팅을 시작하고 디바이스 드라이버는 나머지 시스템에 디바이스를 등록하기 시작한다. non-devfs 시스템 상에서는 register_blkdev()register_chrdev() 호출 (메이저넘버와 함께 제공됨)이 사용되었다는 것을 기억할 것이다. 하지만 devfs가 가능하기 때문에 디바이스 드라이버는 새롭고 향상된 커널 호출을 사용하여 devfs_register()라고 하는 디바이스를 등록한다.

Devfs 실행하기

일단 모든 디바이스 드라이버가 시작되고 커널에 적절한 디바이스가 등록되면 커널은 /sbin/init 을 시작하고 시스템 초기화 스크립트는 실행을 시작한다. 부트 프로세스 초기에 (파일시스템 체크 이전) rc 스크립트는 /dev에 devfs 파일시스템을 마운트한다. 여기에는 devfs 네임스페이스의 구현이 포함된다. /dev가 마운트 된 후에 등록된 모든 디바이스들(예를 들어 /dev/foo0)은 non-devfs 시스템 상에서와 마찬가지로 액세스 된다. 그것이 액세스 될 때 커널은 메이저 넘버가 아닌 devfs 디바이스 이름으로 적절한 디바이스 드라이버로 매핑한다.

devfs의 장점

devfs는 많은 작업을 훨씬 수월하게 한다. 부트 로더, initrd, loopback 파일시스템으로 구성된 Linux bootable(부팅 가능) CD-ROM을 만들어야 한다고 가정하자. CD가 부팅되면, 부트로더는 커널과 initrd를 로딩하고 그런 다음 initrd 에 있는 /linuxrc 스크립트는 커널에 의해 실행된다. /linuxrc의 주요한 태스크는 CD를 마운트하여 loopback 파일시스템이 자체적으로 마운트되고 액세스 될 수 있도록 하는것이다.




위로


참고자료




위로


필자소개

author

Daniel Robbins는 Gentoo Technologies, inc.의 사장/CEO이다. 또 PC용 고급 Linux인 Gentoo Linux의 창설자이자, 차세대 Linux 포트 시스템인 Portage 시스템의 창시자이다. 또한 Macmillan사에서 출판하는 Caldera OpenLinux Unleashed, SuSE Linux Unleashed, Samba Unleashed에 집필활동을 하고 있다.





위로


기사에 대한 평가

매우 불만족 (1)
불만족 (2)
보통 (3)
만족 (4)
매우 만족 (5)




위로



    IBM 소개개인정보 보호정책문의