Memory Mapped File

Jin·2022년 2월 27일
0

Memory Mapped File은 File에 해당하는 공간을 Process address space에 mapping 시키는 것을 말합니다. 여러 프로세스에 같은 file을 mapping 시켰을 경우 Inter-process communication이 가능합니다.

caddr_t mmap (caddr_t addr, size_t len, int prot, int flags, int fildes, off_t off)

  • addr: file의 시작 부분의 메모리 주소
  • len: mapping되는 size
  • prot: 권한을 부여할 수 있다
  • flags: mapping되는 방식으로 나중에 자세히 다룰 것이다
  • fildes: mapping되는 file의 descriptor
  • off: file 안에서 mapping이 시작되는 곳까지의 offset

정상적인 경우 mapping된 메모리 공간의 시작 주소가 반환되고 error시 MAP_FAILED가 반환됩니다.

prot과 flags에는 다음과 같은 것들이 올 수 있습니다.

아래의 그림은 file을 len만큼만 unmap 하는 것을 보여줍니다.

int munmap (caddr_t addr, size_t len)

  • addr: unmap할 메모리 공간의 시작 주소

정상적인 경우 0이 반환되고 error시 -1이 반환됩니다.

int msync (const void *addr, size_t len, int flags)

  • addr: 시작 주소

  • flags: control msync() operation

정상적인 경우 0을 반환하고 error시 -1을 반환합니다.

void memcpy (void s1, const void *s2, size_t n)

  • s1: 복사하여 저장될 주소

  • s2: 복사될 주소

  • n: 길이

s1이 반환됩니다.

간단한 예제를 들어보겠습니다.

위는 src을 통해서는 read 하고, dst을 통해서는 write 할 목적으로 같은 크기만큼 메모리 공간을 mapping 하고 있습니다.

그리고 memcpy를 통해 src에 있는 메모리를 dst에도 복사하였습니다. 이렇게 되면 src의 내용과 dst의 내용은 같아져서 똑같은 내용을 가진 메모리 공간을 가지게 됩니다.

끝으로 munmap을 통해 mapping된 메모리 공간을 해제합니다.

profile
배워서 공유하기

0개의 댓글