JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
プログラミングインタフェースガイド     Oracle Solaris 10 1/13 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  メモリーと CPU の管理

メモリー管理インタフェース

マッピングの作成と使用

マッピングの削除

キャッシュ制御

mincore の使用法

mlockmunlock の使用法

mlockall および munlockall の使用法

msync の使用法

ライブラリレベルの動的メモリー

動的メモリー割り当て

動的メモリーデバッグ

check -access

check -leaks [-frames n] [-match m]

check -memuse [-frames n] [-match m]

check -all [-frames n] [-match m]

check [funcs] [files] [loadobjects]

その他のメモリー制御インタフェース

sysconf の使用法

mprotect の使用法

brksbrk の使用法

CPU パフォーマンスカウンタ

libcpc に追加された API

初期化インタフェース

ハードウェア照会インタフェース

構成インタフェース

バインド

抽出

バッファー操作

起動インタフェース

エラー処理インタフェース

2.  リモート共有メモリー API (Solaris クラスタ用)

3.  セッション記述プロトコル API

4.  プロセススケジューラ

5.  近傍性グループ API

6.  入出力インタフェース

7.  プロセス間通信

8.  ソケットインタフェース

9.  XTI と TLI を使用したプログラミング

10.  パケットフィルタリングフック

11.  トランスポート選択と名前からアドレスへのマッピング

12.  リアルタイムプログラミングと管理

13.  Solaris ABI と ABI ツール

A.  UNIX ドメインソケット

索引

メモリー管理インタフェース

仮想メモリー機能を使用するとき、アプリケーションはいくつかのインタフェースを使用します。このセクションでは、このようなインタフェースの要約について説明します。このセクションではまた、このようなインタフェースの使用例も示します。

マッピングの作成と使用

mmap(2) は、名前付きファイルシステムオブジェクトのプロセスアドレス空間へのマッピングを確立します。名前付きファイルシステムオブジェクトは部分的にもプロセスアドレス空間にマッピングできます。この基本的なメモリー管理インタフェースはとても簡潔です。open(2) を使用してファイルを開いてから、mmap(2) を使用して適切なアクセスオプションと共有オプションを持つマッピングを作成します。そのあと、ユーザーのアプリケーションを処理します。

mmap(2) でマッピングを確立すると、指定されたアドレス範囲にあった以前のマッピングは置き換えられます。

MAP_SHARED フラグと MAP_PRIVATE フラグはマッピングのタイプを指定します。これらのフラグはどちらか 1 つを指定する必要があります。MAP_SHARED を設定すると、書き込みが行われたときに、マッピングされたオブジェクトが変更されます。オブジェクトを変更するとき、これ以外の操作は必要ありません。MAP_PRIVATE を設定すると、マッピングされた領域に最初に書き込みが行われた時に、ページのコピーが作成されます。以降の書き込みではコピーが参照されます。コピーが作成されるのは、変更されたページだけです。

fork(2) を行なっても、マッピングのタイプは保持されます。

mmap(2) でマッピングを確立したあと、呼び出しで使用されたファイル記述子は二度と使用されません。ファイルを閉じても、munmap(2) でマッピングを取り消すまで、マッピングは有効です。新しいマッピングを作成すると、既存のマッピングは失われます。

切り捨ての呼び出しを行うと、マッピングされたファイルが短くなることがあります。(短くなって) 失われた領域にアクセスしようとすると、SIGBUS シグナルが発生します。

/dev/zero をマッピングすると、0 で初期化された仮想メモリーブロックが呼び出し元プログラムに提供されます。ブロックのサイズは、mmap(2) への呼び出しに指定します。次のコードは、このテクニックを使用して、0 で初期化された記憶領域のブロックをプログラム内に作成する例を示しています。このブロックのアドレスはシステムが選択します。

removed to fr.ch4/pl1.create.mapping.c

デバイスまたはファイルの中には、マッピングによってアクセスされるときだけ使用できるものもあります。たとえば、ビットマップ形式のディスプレイをサポートするときに使用するフレームバッファーデバイスなどです。ディスプレイのアドレスを直接操作する場合、ディスプレイ管理アルゴリズムはより簡単に実装できます。

マッピングの削除

munmap(2) は、呼び出し元プロセスの指定されたアドレス範囲にあるページのマッピングをすべて削除します。munmap(2) は、マッピングされていたオブジェクトにはまったく影響しません。

キャッシュ制御

SunOS の仮想メモリーシステムは、プロセッサのメモリーがファイルシステムオブジェクトのデータをバッファリングするキャッシュシステムです。キャッシュのステータスを制御または調査するために、次のようなインタフェースが提供されています。

mincore の使用法

mincore(2) インタフェースは、指定された範囲内のマッピングが示すアドレス空間にメモリーページが存在するかどうかを判定します。mincore がページをチェックしてからデータを返すまでの間にページのステータスが変わっている可能性もあるので、mincore が返す情報は最新のステータスを示していない場合があります。メモリーに残っていると保証されるのは、ロックされたページだけです。

mlockmunlock の使用法

mlock(3C) は、指定されたアドレス範囲内にあるページを物理メモリーにロックします。当該プロセスまたはほかのプロセスでロックされたページを参照しても、入出力操作が必要になるページフォルトは発生しません。このような入出力操作は仮想メモリーの通常の動作を妨害し、ほかのプロセスを遅くするので、mlock の使用はスーパーユーザーだけに制限されます。メモリーにロックできるページ数の制限はシステム構成によって異なります。この制限を超えると、mlock の呼び出しは失敗します。

munlock は、物理ページ上にロックされたページを解放します。1 つのマッピングのアドレス範囲で複数の mlock 呼び出しを行なっている場合も 1 回の munlock でロックを解放できます。ただし、mlock で同じページを異なるマッピングで処理した場合、このページのロックを解除するには、すべてのマッピングを解放する必要があります。

マッピングを削除することによってもロックを解放できます。つまり、mmap(2) でマッピングを置き換えるか、munmap(2) でマッピングを削除することで可能です。

前述の MAP_PRIVATE マッピングに関連する書き込み時コピーイベントは、コピー元ページからコピー先ページにロックを転送します。したがって、書き込み時コピー先を変更しても、MAP_PRIVATE マッピングを含むアドレス範囲上のロックは透過的に保持されます。この変更については、「マッピングの作成と使用」を参照してください。

mlockall および munlockall の使用法

mlockall(3C)munlockall(3C)mlockmunlock に似ていますが、mlockallmunlockall はアドレス空間全体に対して動作します。mlockall はアドレス空間にあるすべてのページにロックを設定し、munlockall はアドレス空間にある (mlock または mlockall で確立された) すべてのページのロックを解除します。

msync の使用法

msync(3C) は、指定されたアドレス範囲内にある変更されたページのすべてを、これらのアドレスでマッピングされているオブジェクトにフラッシュ (実際に書き込み) します。このコマンドは fsync(3C) に似ていますが、こちらはファイルに対して動作します。