일부 파일 설명자 fd에서 mmap을 사용하면 read()에 대한 일반 호출이 파일의 메모리 맵이 있다는 것을 "인식"하고 메모리에서 직접 읽습니까?
mmap() 다음에 mlock()을 사용하면 어떻게 될까요? 파일에 대한 후속 읽기() 작업에서는 디스크에 액세스할 필요가 없다고 말하는 것이 맞습니까?
답변1
나는 그것이 "인식"이 무엇을 의미하는지에 달려 있다고 생각합니다.
read()
s 시스템 호출이 현재 위치에서 시작하는 파일의 내용을 프로그램이 지정한 메모리 버퍼에 복사하라는 커널에 대한 요청 인 한 , read()
이 작업은 여부에 관계없이 일반 파일에 의해 동일한 방식으로 수행됩니다. 메모리는 동시에 파일에 매핑됩니다. "인식"이 없습니다.
이제 파일이 mmap()
ed 및 이면 read()
성능 최적화가 달성될 가능성이 높습니다. 예를 들어, 파일이 read()
첫 번째인 경우 읽은 파일 부분이 이미 페이지 캐시에 있을 수 있으므로 메모리 맵에 대한 후속 액세스는 디스크에서 다시 액세스할 필요가 없습니다. 또는 반대로 페이징된 메모리 맵이 존재하는 경우 후속 메모리 맵은 read()
디스크에 다시 액세스할 필요가 없습니다. 그래서 어떤 의미에서는 서로를 고려 mmap()
하고 '인식'할 수도 있습니다.read()