9.4. mmap() 시스템 호출을 사용하여 파일 또는 장치를 메모리에 매핑
실시간 시스템에서 대용량 메모리 할당의 경우malloc(메모리 할당) 방법은 mmap() 시스템 호출을 사용하여 메모리 공간을 찾습니다. flags 매개변수에서 MAP_LOCKED 를 설정하여 메모리 영역을 할당하고 잠글 수 있습니다. mmap() 은 페이지를 기준으로 메모리를 할당하므로 동일한 페이지에서 두 개의 잠금을 방지하여 이중 잠금 또는 단일 잠금 문제가 발생하지 않습니다.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
절차
특정 프로세스 주소 공간을 매핑하려면 다음을 수행합니다.
#include <sys/mman.h> #include <stdlib.h> void *alloc_workbuf(size_t size) { void *ptr; ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_LOCKED, -1, 0); if (ptr == MAP_FAILED) return NULL; return ptr; } void free_workbuf(void *ptr, size_t size) { munmap(ptr, size); }
검증
-
mmap()함수가 성공적으로 완료되면 매핑된 영역에 포인터를 반환합니다. error에서MAP_FAILED값을 반환하고 오류를 나타내는errno를 설정합니다. -
munmap()함수가 성공적으로 완료되면0을 반환합니다. error에서-1을 반환하고errno를 설정하여 오류를 나타냅니다.