다른 UNIX 시스템에서는 저장 장치로 문자 장치가 필요한데 Linux에서는 그렇지 않은 이유는 무엇입니까?
기타 UNIX 운영 체제(AIX, HPUX, Solaris 및 macOS)는 "/dev/rdisk#" 및 "/dev/disk#"와 같은 저장 장치를 사용합니다.
답변1
내 생각엔 이 Wikipedia 기사가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 이전의 분해는 사소한 성가심입니다. 직접 액세스가 필요한 애플리케이션이 시스템의 주요 용도인 경우에는 더욱 그렇습니다.
귀하의 원래 질문에 대한 답변에서 많은 질문은 매우 역사적입니다. 최신 시스템에서는 장치 버퍼가 시스템 버퍼보다 큰 경우가 흔하지 않습니다. (워크스테이션의 메모리보다 큰 버퍼를 사용하여 고속 프린터에 연결된 워크스테이션을 마지막으로 사용한 때는 언제입니까?)