mmap 이란 가상 주소 공간(VMA; Virtual Memory Address) 할당 하는 것을 말한다. 파일과 가상 주소를 맵핑할 수도 있다. malloc() 함수도 기본적으로 heap(VMA) 에서 가상 주소 공간을 할당하지만 더 큰 할당이 필요할 때는 내부적으로 mmap 을 통해서 가상 주소 공간을 할당한다.
task_struct : Task (혹은 Process) 관리 목적의 커널 자료 구조
ㄴ mm_struct : task_struct 구조체의 하위 자료 구조. 가상 메모리 관리 목적의 커널 자료 구조.
ㄴ vma: 가상 메모리 공간을 관리하는 자료구조 (예시: stack, heap, code .. 등등)
* Anonymous Page 란? 파일과 매핑이 안된 VMA / Page (예: stack, heap ..)
mmap 사용 예시
file 을 열어서 읽고 쓰는 것과 비슷하게 다음 과정을 거치면 메모리를 할당 받아 사용할 수 있다.
- open()
- mmap() : malloc 과 거의 동일. 요구한 만큼의 용량 만큼 메모리를 할당하고 할당된 메모리 포인터를 반환.
- memset()
- munmap() : 메모리 할당 해제
- close()
* pagecache 란? 파일과 매핑이 된 Page
* 메모리 상에 유지하고 있는 disk cache 버리는 방법
echo 3 > /proc/sys/vm/drop_caches
proc 의 man 페이지를 통해서 proc 사용 방법을 확인할 수 있다.
mmap 과 read 시스템콜 비교
- read 시스템콜의 경우, read를 할 때마다 시스템콜이 발생하여 user mode -> kernel mode 로 넘어가야 하는 overhead 발생
- mmap 의 경우, 가상 메모리와 물리 메모리가 바로 연결되어 있음. 배열로 된 페이지 테이블을 참고하여 바로 물리 메모리에 접근할 수 있어 속도가 빠름
'Linux' 카테고리의 다른 글
4-Level Page Table (0) | 2022.12.18 |
---|---|
Page Fault 관련 정리 (0) | 2022.12.15 |
리눅스 프로그램과 커널 프로그램 (0) | 2022.12.09 |
리눅스 운영체제의 구성 (0) | 2022.12.09 |
커널 분석 및 디버깅 툴; uftrace (0) | 2022.12.09 |