mmap
- memory - mapping
- 빈번하게 일어나는 시스템 콜
- 메모리 맵 파일 지원
void *mmap (void *addr, size_t length, int prot, int flags, int fd, off_t offset);
- Parameter
- addr:매핑할 메모리 주소에 대한 힌트(NULL일 경우 임의의 위치에 매핑)
- length:매핑할 바이트 단위 길이
- prot:메모리 보호 모드
- PROT_READ:읽기 모드로 접근
- PROT_WRITE:쓰기 모드로 접근
- PROT_EXEC:실행 모드로 접근 등
- flags:매핑 형태와 동작 방식
- MAP_SHARED:변경된 내용이 공유됨(IPC)원본에 작업(임계구역과 동기화)
- MAP_PRIVATE:변경된 내용이 공유되지 않음(복사본에 작업)
- MAP_FIXED:addr로 지정한 주소를 강제하기(매핑할 주소 지정) 다른 매핑이 있다면 해제 후 매핑
- MAP_ANONYMOUS:어나니머스 매핑
- fd:파일 디스크립터
- offset:매핑을 시작할 위치
- Return
- 성공시 매핑된 주소, 실패시 MAP_FAILED
파일 메모리 매핑이란
- 프로세스 메모리 영역에 파일의 내용 일부에 대응시키는 것
- 디스크에 있는 파일에 읽고 쓰는 것(파일 입출력)이 아니라 프로세스 메모리 영역에 읽고 쓰기(lseek의 번거로움, 불필요한 시스템 콜 호출 횟수 감소)
- 두 개 이상의 프로세스가 같은 영역을 매핑할 경우 다른 프로세스와의 통신 가능
- 매핑은 (페이지의 배수 크기)페이지 단위로 이루어짐
munmap
int munmap(void *addr, size_t length);
- Parameter
- addr:해제할 메모리 주소
- length:매핑된 길이
- Return
- 명시적 파일만 매핑 가능한 것은 아니다:Anonymous Mapping
- 특정 파일을 지정하지 않고 익명(Anonymous)파일을 매핑
- mmap 인자
- flags = MAP_SHARED | MAP_ANONYMOUS
- fd =-1
- offset 무시(일반적으로 0)