9.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
を設定します。
関連情報
-
mmap(2)
man ページ -
mlockall(2)
man ページ