장치 파일을 매핑하기 위해 mmap을 사용하면 어떤 이점이 있는지 묻고 싶습니다. 이 장치 파일에 대한 파일 작업 API를 구현하는 드라이버가 있습니다.
내가 묻는 것은 장치 파일이 하드 드라이브에 저장되지 않기 때문에 mmap이 I/O를 저장하지 않는다는 것입니다. 게다가 해당 장치 파일에 직접 쓰거나(매핑 후) 쓰기 시스템 호출을 사용하든 드라이버가 커널 공간에서 구현되기 때문에 우리는 여전히 커널 코드와 시스템 호출을 사용하고 있습니다.
감사해요
답변1
공식적으로는 그렇지 않습니다."mmap 장치 파일"(일부 /dev/xyz 특수 파일)은 장치 메모리 영역을 사용자 공간에 매핑합니다.
일부 장치의 제어 레지스터가 매핑되면(실제로 대부분의 PCI 주변 장치의 경우) 프로그램이 반복 호출을 하지 않고도 작업을 수행할 수 있습니다 ioctl
(실제로 시간, 커널 공간 및 IO 시간이 절약됩니다).
장치 간에 대량의 데이터를 전송해야 하는 경우(일반적인 예는 비디오 메모리) 장치의 메모리를 사용자 공간에 매핑하면 실제로 처리량이 향상됩니다.이 프로그램은 lseek/write/read 시스템 호출을 제거할 수 있습니다.의지해야했습니다.
물론, mmap이 적용되더라도 프로그램은 여전히 ioctl/read/write 시스템 호출을 통해 장치에 액세스할 수 있습니다. 이로 인해 확실히 I/O가 발생하고 커널 공간에서 시간이 소모되어 t의 모든 이점을 잃게 됩니다.그의 매핑의 목적은 그것들을 제거하는 것입니다..
다음 설명에 대해 자세히 설명합니다.
virt_addr = map_base + target; virt_addr에 쓸 때마다 장치 드라이버가 뒤에서 읽기 기능을 호출합니까?
장치의 메모리가 mmap된다는 관점에서 보면 장치 드라이버를 완전히 우회할 수 있습니다. 장치 드라이버 기능을 호출할 필요가 없습니다.무대 뒤에서. virt_addr의 내용 업데이트는 시스템 호출로 변환되지 않습니다.
뭔가 효과가 있다면무대 뒤에서기껏해야 IO-MMU입니다.