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

+ Recent posts