検索

第9章 RHEL for Real Time での mlock() システムコールの使用

download PDF

RHEL for Real-Time メモリーロック (mlock()) 関数を使用すると、リアルタイムの呼び出しプロセスで、アドレス空間の指定された範囲をロックまたはロック解除できます。この範囲は、Linux がメモリースペースを交換するときに、ロックされたメモリーをページングすることを防ぎます。ページテーブルエントリーに物理ページを割り当てると、そのページへの参照が高速になります。mlock() システムコールには、mlock()mlockall() の 2 つの関数が含まれています。同様に、munlock() システムコールには、munlock() 関数および munlockall() 関数が含まれています。

9.1. mlock() および munlock() システムコール

mlock() および mlockall() システムコールは、指定されたメモリー範囲をロックし、このメモリーをページングしません。以下は、mlock() システムコールグループです。

  • mlock() システムコール: 指定された範囲のアドレスをロックします。
  • munlock() システムコール: 指定された範囲のアドレスのロックを解除します。

mlock() システムは、addr から始まり、len バイトまで続くアドレス範囲のロックページを呼び出します。呼び出しが正常に戻ると、指定されたアドレス範囲の一部を含むすべてのページは、後でロックが解除されるまでメモリーに残ります。

mlockall() システムコールを使用すると、マップされたすべてのページを指定されたアドレス範囲にロックできます。メモリーロックはスタックしません。いくつかの呼び出しによってロックされたページは、単一の munlock() システム呼び出しで、指定されたアドレス範囲または領域全体のロックを解除します。munlockall() システムコールを使用すると、プログラム空間全体をロック解除できます。

特定の範囲に含まれるページのステータスは、flags 引数の値によって異なります。flags 引数は 0 または MLOCK_ONFAULT です。

メモリーロックは fork によって子プロセスに継承されず、プロセスが終了すると自動的に削除されます。

警告

mlock() システムコールは注意して使用してください。過度に使用すると、メモリー不足 (OOM) エラーが発生する可能性があります。アプリケーションが大きい、またはアプリケーションに大きなデータドメインがあるとき、システムが他のタスクにメモリーを割り当てることができない場合は、mlock() 呼び出しによってスラッシングが発生する可能性があります。

リアルタイムプロセスに mlockall() 呼び出しを使用する場合は、十分なスタックページを予約してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.