Unix-system-calls-mlock
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
- http://www.finddevguides.com/computer_glossary [コンピュータ用語集] *http://www.finddevguides.com/computer_whoiswho[Who is Who]
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
mlock()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
mlock、munlock、mlockall、munlockall-メモリのロックとロック解除
概要
#include <sys/mman.h> int mlock(const void* addr, size_t len); int munlock(const void *addr, size_t len); int mlockall(int flags); int munlockall(void); |
説明
mlock()およびmunlock()
mlockall()およびmunlockall()
_flags_引数は、次の定数の1つ以上のビット単位のORとして構築されます。
Tag
説明
現在プロセスのアドレス空間にマップされているすべてのページをロックします。
将来的にプロセスのアドレス空間にマップされるすべてのページをロックします。 これらは、たとえば、増加するヒープとスタックに必要な新しいページや、新しいメモリマップファイルまたは共有メモリ領域になります。
ノート
メモリロックには、リアルタイムアルゴリズムと高セキュリティデータ処理という2つの主な用途があります。 リアルタイムアプリケーションには確定的なタイミングが必要であり、スケジューリングと同様に、ページングは予期しないプログラム実行遅延の主な原因の1つです。 リアルタイムアプリケーションは通常、 sched_setscheduler (2)を使用してリアルタイムスケジューラに切り替えます。 暗号化セキュリティソフトウェアは、多くの場合、パスワードや秘密キーなどの重要なバイトをデータ構造として処理します。 ページングの結果、これらのシークレットは永続的なスワップストアメディアに転送される可能性があり、セキュリティソフトウェアがRAM内のシークレットを消去して終了した後、敵がアクセスできる可能性があります。 (ただし、ラップトップおよび一部のデスクトップコンピューターのサスペンドモードでは、メモリロックに関係なく、システムのRAMのコピーがディスクに保存されることに注意してください。)
メモリロックは、 fork (2)で作成された子には継承されず、 execve (2)またはプロセスの終了時に自動的に削除(ロック解除)されます。
アドレス範囲が munmap (2)によってマップ解除されると、アドレス範囲のメモリロックは自動的に削除されます。
メモリロックはスタックしません。つまり、 mlock ()または mlockall ()の呼び出しによって数回ロックされたページは、対応する範囲の munlock ()の1回の呼び出しまたは munlockallによってロック解除されます。 ()。 複数の場所または複数のプロセスによってマップされたページは、少なくとも1つの場所または少なくとも1つのプロセスによってロックされている限り、RAMにロックされたままになります。
Linuxノート
Linuxでは、 mlock ()および munlock ()は、_addr_を最も近いページ境界に自動的に切り捨てます。 ただし、POSIX.1-2001では、_addr_をページに揃えることを実装で要求できるため、移植可能なアプリケーションでこれを保証する必要があります。
制限と権限
Linux 2.6.8以前では、メモリをロックするにはプロセスが特権( CAP_IPC_LOCK )である必要があり、 RLIMIT_MEMLOCK ソフトリソース制限はプロセスがロックできるメモリ量の制限を定義します。
Linux 2.6.9以降、特権プロセスがロックできるメモリ量に制限はなく、代わりに RLIMIT_MEMLOCK ソフトリソース制限は、非特権プロセスがロックできるメモリ量の制限を定義します。
返り値
成功すると、これらのシステムコールは0を返します。 エラーの場合、-1が返され、_errno_が適切に設定され、プロセスのアドレス空間内のロックは変更されません。
エラー
Tag
説明
(Linux 2.6.9以降)呼び出し元にゼロ以外の RLIMIT_MEMLOCK ソフトリソース制限がありましたが、許可された制限より多くのメモリをロックしようとしました。 プロセスが特権( CAP_IPC_LOCK )の場合、この制限は適用されません。
(Linux 2.4以前)呼び出しプロセスは、RAMの半分以上をロックしようとしました。
(Linux 2.6.9以降)呼び出し元には特権がなく( CAP_IPC_LOCK )、その RLIMIT_MEMLOCK ソフトリソース制限は0でした。
(Linux 2.6.8以前)呼び出しプロセスには、 munlockall ()を呼び出すための十分な特権がありません。 Linuxでは、 CAP_IPC_LOCK 機能が必要です。
_len_は負でした。
(Linuxではありません)_addr_はページサイズの倍数ではありませんでした。
指定されたアドレス範囲の一部が、プロセスのアドレス空間内のマップされたページに対応していません。
不明な_flags_が指定されました。
(Linux 2.6.8以前)呼び出し元には特権がありません( CAP_IPC_LOCK )。
BUGS
2.4.17以前の2.4シリーズLinuxカーネルでは、バグにより mlockall () MCL_FUTURE フラグが fork (2)に継承されていました。 これはカーネル2.4.18で修正されました。
カーネル2.6.9以降、特権プロセスが_mlockall(MCL_FUTURE)_を呼び出し、その後特権を削除した場合(たとえば、有効なUIDをゼロ以外の値に設定することで CAP_IPC_LOCK 機能を失った場合)、その後のメモリ割り当て(例: 、 mmap (2)、 brk (2))は、 RLIMIT_MEMLOCK リソース制限に遭遇すると失敗します。
可用性
準拠
POSIX.1-2001、SVr4
関連項目
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
Advertisements |