메모리 매핑 파일

메모리 매핑 파일은 디스크의 파일 I/O를 일반적인 파일 연산(read(), write()) 대신 메모리 접근을 사용하여 수행할 수 있게 하는 메커니즘입니다.

기본 작동 원리 (Mechanism)

  • 매핑 과정: 운영체제는 파일의 디스크 블록을 프로세스의 가상 메모리 페이지에 매핑합니다. 파일의 전체 또는 일부가 가상 주소 공간에 매핑될 수 있습니다.

  • 파일 접근: 프로세스는 파일을 메모리 매핑한 후, 파일에 접근할 때 일반적인 메모리 로드 및 저장 명령어를 사용하여 매핑된 메모리 주소에 접근합니다.

  • 요구 페이징 통합: 파일에 대한 첫 접근 시 **페이지 오류(page fault)**가 발생합니다. 요구 페이징 시스템은 해당 오류를 처리하며, 디스크의 해당 파일 블록을 물리 메모리의 프레임으로 로드합니다.

  • 파일 쓰기 및 영구 저장: 프로세스가 매핑된 메모리 영역에 데이터를 쓰면, 운영체제는 해당 페이지를 수정된(dirty) 상태로 표시합니다. 페이지 교체 알고리즘에 의해 이 수정된 페이지가 메모리에서 제거될 때, 운영체제는 수정된 데이터를 디스크의 파일로 다시 써서 영구적으로 반영합니다. 명시적인 write() 시스템 호출이 필요 없습니다.

메모리 매핑의 장점 (Advantages of Memory Mapping)

  1. 파일 I/O의 단순화 및 효율성:

    • 파일 I/O가 read()write() 시스템 호출 대신 단순한 메모리 접근으로 처리되어 프로그램의 입출력 부분이 간소화됩니다.

    • 디스크 I/O가 페이지 단위로 이루어지므로, 일반적인 read()/write()의 시스템 호출 오버헤드를 줄입니다.

  2. 프로세스 간 통신 (IPC) 기능 제공:

    • 둘 이상의 프로세스가 동일한 파일을 메모리 매핑할 경우, 운영체제는 해당 파일의 메모리 영역을 공유 메모리로 사용할 수 있게 됩니다.

    • 이 방식은 명시적인 공유 메모리 API(예: shmget())를 사용하는 것보다 프로세스 간 통신이 더 빠르고 편리해집니다.

  3. 초기 파일 I/O 성능 향상: 대용량 파일에 대한 초기 접근 시, 매핑이 설정된 후에는 후속적인 파일 접근이 메모리 속도로 이루어지므로 효율적입니다.

익명 메모리 (Anonymous Memory)

메모리 매핑은 디스크의 파일을 매핑하는 것 외에도, 파일과 관련되지 않은 **익명 메모리(anonymous memory)**에도 사용될 수 있습니다.

  • 용도: 스택이나 힙과 같은 영역은 디스크의 특정 파일과 관련되지 않은 익명 메모리로 생성됩니다.

  • 페이징 처리: 이러한 영역은 스와핑 파일(swap file) 또는 **스와핑 공간(swap space)**이라는 특수 영역에 페이징될 수 있습니다.

구현 및 기술적 고려사항 (Implementation and Technical Issues)

  • UNIX 및 POSIX: mmap() 시스템 호출을 사용하여 파일을 프로세스의 주소 공간으로 매핑합니다.

  • Windows: CreateFileMapping() 함수를 사용하여 디스크의 파일을 가상 메모리에 매핑합니다.

  • 일관성 문제: 여러 프로세스가 동일한 파일을 매핑하거나, 한 프로세스가 파일을 메모리 매핑하면서도 동시에 전통적인 read()/write() 호출을 사용할 경우, 데이터 일관성(data consistency) 문제가 발생할 수 있습니다. 시스템은 이러한 충돌을 방지하기 위한 제어 메커니즘을 제공해야 합니다.

Last updated