기본 색인 | 섹션 4 | English | 日本語 | Deutsch | 옵션 |
일반적으로, 디바이스의 추상화의 상위층에서는, 공통적인 시스템 콜군이 제공됩니다. 이러한 시스템 콜은 커널의 상위층에 의해 대응하는 디바이스 드라이버에 보내집니다. 디바이스에 이용할 수 있는 시스템 콜군은, open(2), close(2), read(2), write(2), ioctl(2), select(2), mmap(2) (으)로부터 선택됩니다. 모든 드라이버가 이러한 시스템 콜 모든 것을 실장하고 있는 것은 아닙니다. 예를 들면, mmap(2) (을)를 단말 디바이스상에서 호출해도 어떤 도움도 되지 않을 것입니다.
devfs(5) [영어] 하지만 완전하게 기능하고 있지 않으면, 각 디바이스 노드는 정적으로, 한편 관련하는 디바이스 드라이버의 존재 (와)는 관계없는 것으로, 작성될 필요가 있습니다. 대체로는 MAKEDEV(8) (을)를 실행시켜 작성합니다.
이것은 즉, 일관한 상태가 되지 않을지도 모른다고 하는 것입니다. 관련하는 드라이버가 설정되어 있지 않은 것 같은 디바이스 노드가 존재할지도 모르고, 디바이스의 검출에 성공했는데, 대응하는 디바이스 노드가 아직 없기 위해(때문에) 액세스 할 수 없는 드라이버가 존재할지도 모릅니다. 전자의 경우에서는, 그 디바이스 노드를 통해 디바이스를 참조하려고 해도, 커널의 상위층으로부터 에러가 돌려주어집니다. 통상 이 에러는 ‘ENXIO’ 입니다. 후자의 경우에서는, 드라이버와 디바이스를 사용할 수 있도록(듯이) 하려면 , 디바이스 노드를 작성할 필요가 있습니다.
디바이스에 따라서는 2 종류로 나누어지는 일이 있습니다.
블록형 (block) 디바이스
(와)과
캐릭터형 (character) 디바이스
입니다. 보다 정확하게 말하면 즉,
버퍼링 되는 디바이스와 버퍼링 되지 않는 디바이스
(raw 디바이스)
입니다.
‘ls -l’
의 출력으로는, 파일의 형태의 식별로 캐릭터
‘b’
(와)과
‘c’
그리고 관습적인 통칭을 나타내고 있습니다.
버퍼링 되는 디바이스는,
operating system의 버퍼 캐쉬를 경유해 액세스 되고 있습니다.
그리고, 이러한 디바이스는, 게다가 위에 파일 시스템을
거듭하는 것만을 목적으로 하고 있습니다.
통상, 버퍼링 되는 디바이스는,
디스크나 디스크풍디바이스,
거기에 역사적인 이유로부터 테이프 디바이스에게만 실장됩니다.
raw 디바이스는 모든 드라이버에 이용할 수 있습니다. 이것에는 버퍼링 되는 디바이스도 실장하는 것 같은 드라이버도 포함합니다. 그러한 디바이스에서는, 관습적으로 디바이스 노드의 패스명에 캐릭터 ‘r’ (을)를 전치 해 차이를 나타냅니다. 예를 들면, /dev/rda0 (은)는 1 대째의 SCSI 디스크용의 raw 디바이스를 나타냅니다. 한편, /dev/da0 (은)는 같이 버퍼링 되는 디바이스의 디바이스 노드입니다.
버퍼링 되지 않는 디바이스는, 파일 시스템 조작에 관련하지 않는 동작 모두에게 이용되겠지요. 이것은 그 디바이스가 디스크 디바이스라고 해도입니다. 이것에는, 디스크 패티션 전체의 백업을 취할 때나, raw floppy disk에 백업 하는 경우를 포함합니다 (이 때, floppy disk는 테이프와 같이 사용됩니다)
디바이스 노드에의 액세스 제한은, 커널 내부의 드라이버에 의해 직접 암묵 지정되어 있는 것은 아니고, 보통은 그 디바이스 노드 엔트리의 통상 파일 퍼미션의 문제입니다.
FreeBSD 2.1 | INTRO (4) | January 20, 1996 |
기본 색인 | 섹션 4 | English | 日本語 | Deutsch | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.