메모리의 내용을 파일이나 디바이스에 대응(mapping)하기 위해서 사용하는 시스템 호출이다.
프로세스간 기본적으로 메모리는 공유되지 않는다. -> 가상 메모리 공간을 쓰는 이유
이는 보호를 위해선 반드시 필요한 기능이지만 다른 프로세스와 특정 데이터를 공유하기 위해서는 귀찮은 기능이 되기도 한다. -> IPC 사용하게 됨.
mmap 은 메모리의 특정 영역을 파일로 대응시킬 수 있도록 도와준다. 파일은 시스템 전역적인 객체이므로 다른 프로세스에서 접근 가능하도록 할수 있으며, 이러한 mmap의 특징 때문에 IPC용도로 사용가능하다.
메모리의 내용을 파일에 대응시켜 얻을 수 있는 이익.
메모리의 내용을 파일에 대응시킬 수 있다면 프로세스간 데이터의 교환을 위한 용도로 사용가능 할 것. 프로세스간 공유하고자 하는 데이터를 파일에 대응시키고 이것을 읽고 쓰면 된다. 물론 접근 제어 필요하다.
메모리의 내용을 파일에 직접 대응시킨다면 성능향상이 가능하다. open, read, write, seek 와같은 시스템콜을 거치지 않고 파일내용 변경 가능.
스와핑 작업에서 write와 read 보다 더 효과적이다. write와 read 를 사용하는 메모리 맵핑의 경우 malloc 된 메모리를 swap out 하기전에 무조건 os 는 변경사항있든 없든 write를 해주고 swap out 시켜줘야한다. 하지만 mmap의 경우엔 swap out 할때 변경사항이 없다면 아무런 작없 없이 해당 메모리 공간에서 swap out 시킬 수 있고 이후에 그 메모리 공간을 다른 메모리 용으로 덮어쓸 수 있게 된다.
왜냐하면 어차피 경로가 있는 파일이기때문에 OS는 해당 경로를 알고 있다.
맵핑된 메모리를 해제하는데 사용한다. (malloc 과 free의 관계랄까)
mmap의 활용과 같은 맥락에서 서로 다른 프로세스에서 파일을 공유하고 변경사항을 반영시킬수 있다.
munmap 함수 안에 변경사항을 container 구조체에 담아서 file_write_at 함수를 실행시킨다.
이는 디스크에 있는 파일에도 메모리에서 시행한 변경사항을 적용시키는 과정이라 생각할 수 있다.
즉, mmap으로 공유된 파일이자 메모리는 munmap을 통해 synchronization 한다.