본문 바로가기

컴퓨터 공학 전공/시스템 프로그래밍

Memory Mapped File

728x90

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된 메모리 공간을 해제한다.

'컴퓨터 공학 전공 > 시스템 프로그래밍' 카테고리의 다른 글

Network  (0) 2020.04.01
time management  (0) 2020.04.01
IPC  (0) 2020.04.01
signal  (0) 2020.04.01
record lock  (0) 2020.04.01