메모리 매핑 :: YJcode

리눅스에서는 mmap() 호출을 통해 프로세스의 가상 주소 공간에 새로운 메모리 매핑을 만들 수 있다.

이러한 매핑에는 두 가지 종류가 있다.

 

  • 파일 매핑 : 파일의 일부를 프로세스의 가상 메모리로 매핑한다. 매핑되면, 해당 메모리 영역을 통해 파일의 내용에 접근할 수 있다. 매핑된 페이지는 파일로부터 필요에 따라 자동으로 로드된다.
  • 익명 매핑 : 파일에 매핑되지 않고, 매핑된 페이지들이 0으로 초기화된다.

 

프로세스에 매핑된 메모리는 다른 프로세스와 공유가 가능하다. 메모리 공유는 여러 프로세스가 같은 파일 영역을 매핑하거나, fork()를 통해 새로운 프로세스가 생성될 때 자식 프로세스가 매핑을 그대로 물려받는 경우 발생할 수 있다.

 

둘 이상의 프로세스가 같은 페이지를 공유하면, 매핑이 공유인지, 비공개인지에 따라 공유된 페이지에서 다른 프로세스가 수정, 변경한 내용을 볼 수도 있다.

 

  • 공유 매핑의 경우, 다른 프로세스에서 변경된 사항이 현재 프로세스에서도 보이고, 실시간 반영된다.
  • 비공개 매핑의 경우, 다른 프로세스에서 변경된 사항이 보이지 않고, 실시간 반영또한 되지 않는다.

 

메모리 매핑은 실행 파일의 해당 세그먼트를 이용한 프로세스의 텍스트 세그먼트 초기화, 새로운 메모리 할당, 프로세스 간 통신, 파일 I/O 등 여러 용도로 사용될 수 있다.

+ Recent posts