시스템 프로그래밍-파일 다루기(파일 메모리 매핑)

YuWan·2024년 7월 1일

linux

목록 보기
10/26

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
    • 성공시 0
    • 실패시 -1
  • 명시적 파일만 매핑 가능한 것은 아니다:Anonymous Mapping
    • 특정 파일을 지정하지 않고 익명(Anonymous)파일을 매핑
    • mmap 인자
      • flags = MAP_SHARED | MAP_ANONYMOUS
      • fd =-1
      • offset 무시(일반적으로 0)
profile
공부 블로그

0개의 댓글