13.4. mmap() システムコールを使用してファイルまたはデバイスをメモリーにマップする
リアルタイムシステムで大量のメモリーを割り当てる場合、メモリー割り当て (malloc) メソッドは mmap() システムコールを使用してメモリー空間を見つけます。flags パラメーターに MAP_LOCKED を設定することで、メモリー領域を割り当てて、ロックできます。mmap() はページ単位でメモリーを割り当てるため、同じページで 2 つのロックが行われるのを回避し、二重ロックまたは単一ロック解除の問題を防ぎます。
前提条件
- システムの 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()関数が正常に完了すると、マップされた領域へのポインターが返されます。エラーの場合は、MAP_FAILED値を返し、エラーを示すerrnoを設定します。 -
munmap()関数が正常に完了すると、0が返されます。エラーの場合は-1を返し、エラーを示すerrnoを設定します。