1. 메모리 매핑 기초
1.1. 메모리 매핑
- 파일을 프로세스의 메모리에 매핑하는 것. 즉 프로세스에 전달할 데이터를 저장한 파일을 직접 프로세스의 가상 주소 공간으로 매핑한다.
- read 함수나 write 함수를 사용하지 않고도 프로그램 내부에서 정의한 변수를 사용하여 파일에서 데이터를 읽거나 쓸 수 있다.
1.2. mmap 함수의 prot 인자
- PROT_READ : 매핑된 파일을 읽기만 한다.
- PROT_WRITE : 매핑된 파일에 쓰기를 허용한다.
- PROT_EXEC : 매핑된 파일을 실행할 수 있다.
- PROT_NONE : 매핑된 파일에 접근할 수 없다.
1.3. mmap 함수의 flag
- MAP_SHARED : 다른 프로세스와 데이터 변경 내용을 공유한다. 이 플래그가 설정되어 있으면
쓰기 동작은 매핑된 메모리의 내용을 변경한다.
- MAP_SHARED_VALIDATE : MAP_SHARED와 같으나 전달받은 플래그를 커널이 모두 확인하고
모르는 플래그가 있을 경우 오류로 처리한다.
- MAP_PRIVATE : 데이터의 변경 내용을 공유하지 않는다. 이 플래그가 설정되어 있으면 최초 쓰기 동작에서 매핑된 메모리의 사본을 생성하고 매핑 주소는 사본을 가리킨다.
- MAP_ANONYMOUS : fd를 무시하고 할당된 메모리 영역을 0으로 초기화한다.
- MAP_ANON : MAP_ANONYMOUS와 동일한 플래그로 다른 시스템과의 호환성을 위해 제공한다.
- MAP_FIXED : 매핑할 주소를 정확히 지정한다. MAP_FIXED 플래그를 지정하고 mmap 함수가
성공하면 해당 메모리 영역의 내용은 매핑된 내용으로 변경된다.
- MAP_NORESERVE : MAP_PRIVATE를 지정하면 시스템은 매핑에 할당된 메모리 공간만큼 스왑
영역을 할당하며 스왑 영역은 매핑된 데이터 사본을 저장하는 데 사용한다. 하지만 이 플래그를 지정하면 스왑 영역을 할당하지 않는다.