
Linux에는 저장 장치용 문자 장치가 필요하지 않은데 다른 UNIX 시스템에는 왜 문자 장치가 필요합니까?
다른 UNIX OS(AIX, HPUX, Solaris 및 macOS)는 저장 장치에 '/dev/rdisk#' 및 '/dev/disk#'와 같은 것을 사용합니다.
답변1
내 생각에 이 위키피디아 기사는https://en.wikipedia.org/wiki/Raw_device아주 잘 설명합니다.
컴퓨팅, 특히 Unix 및 Unix 계열 운영 체제에서 원시 장치는 운영 체제의 캐시를 우회하여 하드 디스크 드라이브와 같은 저장 장치에 직접 액세스할 수 있도록 하는 문자 장치 파일과 연관된 특별한 종류의 논리적 장치입니다. 및 버퍼(하드웨어 캐시는 계속 사용될 수 있음) 데이터베이스 관리 시스템과 같은 애플리케이션은 원시 장치를 직접 사용할 수 있으므로 이 작업을 운영 체제에 미루는 대신 데이터가 캐시되는 방식을 관리할 수 있습니다.
FreeBSD에서는 모든 장치 파일이 실제로는 원시 장치입니다. 버퍼 관리를 단순화하고 확장성과 성능을 높이기 위해 FreeBSD 4.0에서는 원시 장치가 아닌 장치에 대한 지원이 제거되었습니다.1
Linux 커널에서는 원시 장치가 더 이상 사용되지 않으며 O_DIRECT 플래그를 대신 사용할 수 있기 때문에 한 지점에서 제거되도록 예정되어 있습니다.
답변2
블록 장치 인터페이스를 사용할 때 원시 인터페이스를 사용하려는 이유는 일반적으로 원시 인터페이스가 더 빠르기 때문입니다. 운영 체제는 블록 특수 파일에 대해서만 버퍼 캐싱을 수행합니다.
매우 큰 파일을 자기 테이프와 같은 매체에서 읽거나 쓸 때 운영 체제의 버퍼 캐싱은 블록이 두 번 이상 읽히지 않기 때문에 아무런 이점도 제공하지 않습니다. 원시 장치 인터페이스를 사용하면 이러한 과도한 시스템 활동을 방지할 수 있습니다.
자기 미디어에서 매우 큰 스트림 파일을 처리할 때 원시 장치 인터페이스를 사용하는 또 다른 이유는 원시 인터페이스가 매우 큰 블록 크기를 지원하여 매우 높은 데이터 전송 속도를 달성할 수 있다는 것입니다. 블록 장치 인터페이스를 사용하여 장치에 액세스하는 경우 모든 읽기 및 쓰기는 시스템 버퍼를 통해 전달되어야 하므로 파일 시스템 블록 크기(일반적으로 1K 또는 2K 바이트)로 제한됩니다. 원시 장치를 사용하는 경우 32K 이상의 블록 크기를 사용할 수 있습니다. --존 J. 밸리,UNIX 프로그래머 참고서; 1991년판.
성능 향상 외에도 캐시 일관성을 이유로 블록 인터페이스를 통해 액세스하는 파일 시스템을 마운트 해제해야 한다는 요구 사항이 있었습니다. 시스템에 의해 캐시된 블록은 디스크에 다시 기록될 때 블록 장치를 통해 이루어진 변경 사항을 방해할 수 있습니다. fschk 이전에 마운트를 해제하는 것은 약간의 성가심입니다. 직접 액세스가 필요한 애플리케이션이 시스템의 주요 용도인 경우 훨씬 더 나쁩니다.
귀하의 원래 질문에 대한 답변에서 많은 문제는 대체로 역사적입니다. 장치 버퍼가 시스템 버퍼보다 큰 것은 최신 시스템에서 흔하지 않습니다. (워크스테이션 메모리보다 큰 버퍼를 가진 고속 프린터에 연결된 워크스테이션을 마지막으로 사용한 것이 언제입니까?)