1. mmap이란?
메모리의 내용을 파일이나 디바이스에 대응하기 위해서 사용하는 시스템 호출이다.
2. 메모리 관리
프로세스 메모리는 기본적으로 다른 프로세스 메모리와 공유되지 않는다. 이것은 프로세스의 데이터를
보호하기 위해서 반드시 필요한 기능이긴 하지만 다른 프로세스와 특정 데이터를 공유하기 위해서는
귀찮은 기능이 되기도 한다.
이 때문에 IPC를 사용하게 된다.
mmap은 메모리의 특정영역을 파일로 대응시킬 수 있도록 도아준다.
파일은 시스템 전역적인 개체이므로 다른 프로세스에서 접근가능하도록 할 수 있으면,
이러한 mmap의 특징 때문에 IPC용도로 사용가능하다.
(mmap이 IPC용도로 사용가능하지만 IPC 설비는 아니다.)
==> mmap은 프로세스의 주소공간을 파일에 대응시킨다.
파일은 운영체제 전역적인 자원이므로 당연히 어렵잖게 다른 프로세스와 공유해서 사용할 수 있을 것이다.
3. 활용용도
1. 메모리의 내용을 파일에 대응시킬 수 있다면 프로세스간 데이터의 교환을 위한 용도로 사용가능 할 것이다.
접근 제어를 통해 프로세스간 공유하고자 하는 데이터를 파일에 대응시키고 이것을 읽고 쓰면 된다.
2. 성능향상.
고전적인 방법은 파일지정자를 얻어서 직접 입출력하는 방식으로 open, read, write, lseek와 같은 함수를
이용하나, 상당한 비용을 지불.
4. 사용방법
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
1. start
메모리 영역에 파일을 대응시킬 시작 offset
2. length
start부터 length만큼 대응
3. prot
a. PROT_EXEC : 페이지에 실행될 수 있다.
b. PROT_READ : 페이지는 읽혀질 수 있다.
c. PROT_WIRTE : 페이지는 쓸 수 있다.
d. PROT_NONE : 페이지를 접근할 수 없다.
4. flags
a. MAP_FIXED
b. MAP_SHARED
대응되는 객체를 다른 프로세스도 공유할 수 있게 만들어준다.
프로세스들은 객체에 대해서 동등한 권한을 가지게 되고 이로 인해 동기화가 필요하며, 이를 위해
msync(), munmap()가 사용
c. MAP_PRIVATE
--> MAP_SHARED와 MAP_PRIVATE 둘 중 하나는 반드시 사용해야 한다.
5. fd
file descriptor
6. offset
대응할 때 파일의 위치를 지정..
파일의 처음이라면 0
5. 성능 비교
http://developers.sun.com/solaris/articles/read_mmap.html
메모리의 내용을 파일이나 디바이스에 대응하기 위해서 사용하는 시스템 호출이다.
2. 메모리 관리
프로세스 메모리는 기본적으로 다른 프로세스 메모리와 공유되지 않는다. 이것은 프로세스의 데이터를
보호하기 위해서 반드시 필요한 기능이긴 하지만 다른 프로세스와 특정 데이터를 공유하기 위해서는
귀찮은 기능이 되기도 한다.
이 때문에 IPC를 사용하게 된다.
mmap은 메모리의 특정영역을 파일로 대응시킬 수 있도록 도아준다.
파일은 시스템 전역적인 개체이므로 다른 프로세스에서 접근가능하도록 할 수 있으면,
이러한 mmap의 특징 때문에 IPC용도로 사용가능하다.
(mmap이 IPC용도로 사용가능하지만 IPC 설비는 아니다.)
==> mmap은 프로세스의 주소공간을 파일에 대응시킨다.
파일은 운영체제 전역적인 자원이므로 당연히 어렵잖게 다른 프로세스와 공유해서 사용할 수 있을 것이다.
3. 활용용도
1. 메모리의 내용을 파일에 대응시킬 수 있다면 프로세스간 데이터의 교환을 위한 용도로 사용가능 할 것이다.
접근 제어를 통해 프로세스간 공유하고자 하는 데이터를 파일에 대응시키고 이것을 읽고 쓰면 된다.
2. 성능향상.
고전적인 방법은 파일지정자를 얻어서 직접 입출력하는 방식으로 open, read, write, lseek와 같은 함수를
이용하나, 상당한 비용을 지불.
4. 사용방법
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
1. start
메모리 영역에 파일을 대응시킬 시작 offset
2. length
start부터 length만큼 대응
3. prot
a. PROT_EXEC : 페이지에 실행될 수 있다.
b. PROT_READ : 페이지는 읽혀질 수 있다.
c. PROT_WIRTE : 페이지는 쓸 수 있다.
d. PROT_NONE : 페이지를 접근할 수 없다.
4. flags
a. MAP_FIXED
b. MAP_SHARED
대응되는 객체를 다른 프로세스도 공유할 수 있게 만들어준다.
프로세스들은 객체에 대해서 동등한 권한을 가지게 되고 이로 인해 동기화가 필요하며, 이를 위해
msync(), munmap()가 사용
c. MAP_PRIVATE
--> MAP_SHARED와 MAP_PRIVATE 둘 중 하나는 반드시 사용해야 한다.
5. fd
file descriptor
6. offset
대응할 때 파일의 위치를 지정..
파일의 처음이라면 0
5. 성능 비교
http://developers.sun.com/solaris/articles/read_mmap.html
'IT > 알고리즘' 카테고리의 다른 글
qsort (퀵 정렬) - 재귀, 비재귀, 삽입정렬, 난수발생 (1) | 2008.07.15 |
---|---|
스트링에 대한 permutation을 구하는 알고리즘 (0) | 2008.07.15 |
피보나치 수열 (2) | 2008.07.08 |
문자열을 뒤집는 프로그램 (0) | 2008.07.08 |
call by value vs. call by reference (0) | 2008.07.08 |