2.3. mlock() システムコール


メモリーロック (mlock()) システムコールを使用すると、呼び出しプロセスがアドレス空間の指定された範囲をロックまたはロック解除できるようになり、Linux がロックされたメモリーをスワップ空間にページングするのを防ぐことができます。物理ページをページテーブルエントリーに割り当てると、そのページへの参照は比較的高速になります。メモリーロックシステムコールは、mlock() および munlock() カテゴリーに分類されます。

mlock および munlock システムコールは、特定の範囲のプロセスアドレスページをロックおよびロック解除します。成功すると、指定された範囲内のページは、munlock() システムコールがページのロックを解除するまで、メモリーに常駐したままになります。

mlock() および munlock() システムコールは、次のパラメーターを取ります。

  • addr: アドレス範囲の開始を指定します。
  • len: アドレス空間の長さをバイト単位で指定します。

成功すると、mlock() および munlock() システムコールは 0 を返します。エラーの場合は、-1 を返し、エラーを示す errno を設定します。

mlockall() および munlockall() システムコールは、すべてのプログラム空間をロックまたはロック解除します。

注記

mlock() システムコールは、プログラムがページ I/O を持たないことを保証しません。データがメモリー内にとどまることを保証しますが、同じページにとどまることを保証することはできません。move_pages やメモリーコンパクタなどの他の関数は、mlock() の使用に関係なくデータを移動できます。

メモリーロックはページベースで行われ、スタックしません。動的に割り当てられた 2 つのメモリーセグメントが、mlock() または mlockall() によって 2 回ロックされた同じページを共有している場合、1 つの munlock() または munlockall() システムコールを使用してロックを解除します。そのため、二重ロックまたは単一ロック解除の問題を回避するために、アプリケーションがロック解除するページに注意することが重要です。

以下は、二重ロックまたは単一ロック解除の問題を軽減するための最も一般的な 2 つの回避策です。

  • 割り当てられたメモリー領域とロックされたメモリー領域を追跡し、ページのロックを解除する前にページ割り当ての数を検証するラッパー関数を作成します。これは、デバイスドライバーで使用されるリソースカウントの原則です。
  • ページの二重ロックを回避するために、ページサイズと配置に基づいてメモリーを割り当てます。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る