SW Engineering/OS Concept

40_가상 메모리 매핑 파일 (memory Mapped File)

SungWookKang 2015. 7. 16. 13:53
반응형

40_가상 메모리 매핑 파일 (memory Mapped File)

 

Open(), read(), write() 시스템 호출을 사용하여 디스크에 있는 파일을 사용하면 파일이 매번 접근될 때마다 시스템 호출을 해야 하고 디스크를 접근해야 한다. 이와 같은 방법 대신 입/출력을 메모리 참조 방식으로 대신할 수도 있다.

메모리 매핑(memory mapping)이라고 불리는 접근 방식은 프로세스의 가상 주소 공간 중 일부를 관련된 파일에 할애하는 것을 말한다.

 

 

 

파일의 메모리 매핑은 프로세스의 페이지 중 일부분을 디스크에 있는 파일의 블록에 매핑 함으로써 이루어진다. 첫 번째 접근은 일반적인 페이징 과정에 따라 페이지 부재를 발생 시킨다. 그 때 그 파일 내용 중 페이지 크기만큼의 해당 부분이 파일 시스템으로부터 메모리 페이지로 읽혀 들어오게 된다. 그 이후 파일의 읽기/쓰기는 다른 메모리 액세스나 마찬가지로 취급하여 파일 접근과 사용을 단순하게 만들어 준다. 또한 read(), write() 시스템을 호출 할 때마다 소요되었던 오버헤드를 줄일 수 있다.

 

 

메모리 매핑은 여러 프로세스들이 자료 공유를 위해 사용할 수도 있다. 한 프로세스가 공유중인 메모리 매핑에 쓰기를 하면 그 쓰기는 즉시 다른 모든 프로세스들도 볼 수 있게 된다. 그 파일을 공유하는 프로세스들의 페이지 매핑 테이블은 모두 그 파일에 대응하는 물리 메모리 상의 페이지를 가리킨다. 이 페이지에는 디스크 파일의 내용일 올라와 있다.

 

메모리 매핑 관련 시스템 호출들이 쓰기 시 복사(copy on write)기능을 지원하며 파일을 읽기 전용으로 공유할 때에는 모든 프로세스들이 한 개의 페이지를 공유하다가 어떤 프로세스가 그것을 수정하기 시작하면 그 시점에 그 프로세스를 위해 별도의 페이지 복사본을 만들어 줄 수도 있다. 이 때 페이지 수정 작업이 프로세스들 간에 동기화가 필요하면 상호 배제 기법을 함께 사용하면 된다.

 

 

Windows의 Win32 API에서 메모리 매핑 파일을 이용하여 공유 메모리를 생성하는 전체적인 과정을 살펴 보면 파일 매핑(File Mapping)을 생성하고 매핑된 파일의 가상 주소 공간상의 뷰를 만든다. 다른 프로세스는 파일을 열은 뒤 매핑된 파일의 뷰를 가상 주소 공간 상에 생성한다. 매핑 파일은 프로세스들 간의 통신을 위한 공유 메모리 객체를 나타낸다.

 

메모리 매핑 입출력 작업 시 각 입/출력 처리기는 명령과 전송할 자료를 담기 위한 레지스터들을 포함하고 있다. 이러한 레지스터와 시스템 메모리간의 자료 전송을 위해서는 대개 특별한 입/출력 명령이 사용된다. 메모리 매핑 입/출력기능은 특정 메모리 영역을 장치 레지스터들을 매핑 할 수 있도록 유보한다. 이러한 주소에 대한 읽기 쓰기 작업은 장치 레지스터로의 자료 전송으로 처리 된다.

 

메모리 매핑 입/출력은 모뎀이나 프린터를 연결하는 직렬/병렬 포트에도 편리하다. CPU는 포트(port)라 불리는 몇 가지 특별한 레지스터를 통해 자료를 주고 받는다.

 

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

 

 

반응형