Memory-Mapped File은 파일이 디스크에 존재하면서,
동시에 메모리에 존재하는 상태를 만드는 메커니즘이다.
이는 단순히 “파일을 메모리에 읽어오는 것”이 아니라,
파일의 각 페이지가 가상 메모리의 페이지와 직접 연결되는 구조를 의미한다.
이해하기 쉽게 가상 주소(Virtual Memory) 매핑과의 차이점을 비교하며 알아보도록 하자.
일반적인 가상 메모리 매핑은 다음의 구조를 따른다:
Virtual Address - 변환 -> Physical Page
이것은 “해당 가상 주소가 RAM의 이 물리 페이지를 사용한다”를 의미한다.
이에 비해, Memory-Mapped File은 좀 더 복잡한 구조를 가진다:
`Virtual Address -> Physical Page (Page Cache Page) -> File (inode + offset)`
(해당 구조의 이해가 어렵다면 Page Cache 문서를 읽고 오는 것을 권장한다.)
이 구조는 쉽게 말해 이 가상 주소가 단순히 이 물리 페이지를 사용한다를 넘어,
“이 가상 주소가 특정 파일의 특정 오프셋을 대표하는 페이지에 대응된다”를 보여준다.
압축적으로 정리하면, Memory-Mapped File은 메모리에 있는 파일인 것이다.
이 차이점이 중요한 이유는 아래의 용례를 통해 파악할 수 있다:
만약 가상 주소에 값을 쓰게 되면, 이는 곧 물리 페이지에 값을 쓰게 되는 것이다.
반면, Memory-Mapped File로 매핑된 가상 주소에 값을 쓰려고 하면
커널은 해당 쓰기를
- 파일에 반영할지,
- 프로세스만의 복사본으로 분리할지 (Copy-on-Write (CoW))
결정해야 한다.