파일이 지원하는 새로운 mmap(메모리 매핑) 영역에서 읽기는 어떻게 작동합니까?

파일이 지원하는 새로운 mmap(메모리 매핑) 영역에서 읽기는 어떻게 작동합니까?

익명 메모리 매핑을 수행하면 이 영역의 모든 가상 주소는 페이지 0을 가리킬 것입니다. 이 주소는 아직 초기화되지 않았기 때문입니다. 해당 주소를 읽으려고 하면 0이 반환되고 페이지 오류가 발생하지 않습니다. 해당 주소에 쓰려고 하면 페이지 오류가 발생하고 COW(기록 중 복사)가 발생합니다.

위의 개념은 나에게 분명하지만(위의 이해가 잘못된 경우 정정해 주십시오) 다음 시나리오에서는 어떤 일이 발생합니까?

파일 기반 메모리 매핑을 수행하면

  • 해당 영역의 모든 가상 주소는 어떻게 되나요? 페이지 0을 가리켜서는 안 됩니다. 그렇죠? 파일에 내용이 있어서 초기화되지 않은 주소가 아니기 때문이죠.
  • 가상 주소 값을 초기화하기 위해 파일 전체를 메모리에 로드합니다. 그렇지 않으면 첫 번째 읽기에서 페이지 폴트가 발생할까요(ㅋㅋㅋ 이게 COR(Copy-On-Read)인가요?)

답변1

기본적으로 파일과 관련된 주소를 읽을 때 페이지 폴트가 발생하지만 MAP_POPULATE 플래그를 설정하여 이 동작을 변경할 수 있습니다.

커널은 또한 사용자가 순차적으로 읽고 있는지 여부를 감지하고(해당하는 경우) 필요할 것으로 예상되는 페이지를 가져오려고 시도할 수도 있습니다.

이것대답은 읽을 가치가 있습니다.

관련 정보