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

ドキュメントの情報

はじめに

1.  メモリーと CPU の管理

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

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

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

5.  近傍性グループ API

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

7.  プロセス間通信

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

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

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

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

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

リアルタイムアプリケーションの基本的な規則

応答時間を低下させる要因

同期入出力呼び出し

割り込みサービス

共有ライブラリ

優先順位の逆転

スティッキロック

ランナウェイリアルタイムプロセス

非同期入出力の動作

リアルタイムファイル

リアルタイムスケジューラ

ディスパッチ応答時間

スケジューリングクラス

ディスパッチ待ち行列

プロセスのディスパッチ

プロセスの横取り

カーネル優先順位の逆転

ユーザー優先順位の逆転

スケジューリングを制御するインタフェース呼び出し

priocntl の使用法

その他のインタフェース呼び出し

スケジューリングを制御するユーティリティー

priocntl(1)

dispadmin(1M)

スケジューリングの構成

ディスパッチャーパラメータテーブル

config_rt_dptbl の再構成

メモリーのロック

ページのロック

ページのロック解除

全ページのロック

スティッキロックの復元

高性能入出力

POSIX 非同期入出力

Solaris 非同期入出力

通知 (SIGIO)

aioread の使用法

aiowrite の使用法

aiocancel の使用法

aiowait の使用法

poll() の使用法

poll ドライバの使用法

close の使用法

同期入出力

同期モード

ファイルの同期

プロセス間通信

シグナルの処理

パイプ、名前付きパイプ、およびメッセージ待ち行列

セマフォーの使用法

共有メモリー

非同期ネットワーク通信

ネットワーキングのモード

タイミング機能

タイムスタンプインタフェース

インターバルタイマーインタフェース

13.  Solaris ABI と ABI ツール

A.  UNIX ドメインソケット

索引

メモリーのロック

メモリーのロックは、リアルタイムアプリケーションにとって最重要事項の 1 つです。リアルタイム環境では、応答時間を減らし、ページングとスワッピングを防ぐために、プロセスは連続してメモリー内に常駐することが保証されなければなりません。

このセクションでは、SunOS において、リアルタイムアプリケーションが利用できるメモリーロックのメカニズムについて説明します。

SunOS では、プロセスがメモリーに常駐するかどうかは、プロセスの現在の状態、使用できる全物理メモリー、動作中のプロセス数、およびプロセッサのメモリーに対する要求によって決まります。このような方法は、タイムシェアリング環境には適合します。しかし、リアルタイム環境には受け入れられないことがよくあります。リアルタイム環境では、プロセスのメモリーアクセスとディスパッチ応答時間を減らすために、プロセスはメモリー常駐を保証する必要があります。

SunOS のリアルタイムメモリーロックは、ライブラリルーチンのセットで提供されます。このようなライブラリルーチンを使用すると、スーパーユーザー特権で実行しているプロセスは、自分の仮想アドレス空間の指定された部分を物理メモリーにロックできます。このようにしてロックされたページは、ロックが解除されるか、プロセスが終了するまでページングの対象になりません。

オペレーティングシステムには、一度にロックできるページ数にシステム全体の制限があります。この制限は調整可能なパラメータであり、デフォルト値はブート時に計算されます。デフォルト値は、ページフレーム数から一定の割合 (現在は 10 %に設定) を引いた値が基本になります。

ページのロック

mlock(3C) への呼び出しは、メモリーの 1 セグメントをシステムの物理メモリーにロックするように要求します。たとえば、指定されたセグメントを構成するページにページフォルトが発生したと仮定します。すると、各ページのロックカウントが 1 だけ増えます。ロックのカウントが 0 より大きいページは、ページング操作から除外されます。

特定のページを異なるマッピングで複数のプロセスを使って何度もロックできます。2 つの異なったプロセスが同じページをロックすると、両方のプロセスがロックを解除するまで、そのページはロックされたままです。ただし、マッピング内でページロックは入れ子にしません。同じプロセスが同じアドレスに対してロックインタフェースを何度も呼び出した場合でも、ロックは一度のロック解除要求で削除されます。

ロックが実行されているマッピングが削除されると、そのメモリーセグメントのロックは解除されます。ファイルを閉じるまたは切り捨てることによってページが削除された場合も、ロックは暗黙的に解除されます。

fork(2) 呼び出しが行われたあと、ロックは子プロセスには継承されません。したがって、メモリーをロックしているプロセスが子プロセスをフォークした場合、子プロセスは自分でメモリーロック操作を行い、自分のページをロックする必要があります。そうしないと、プロセスをフォークした場合に通常必要となるページのコピー即時書き込みを行わなければならなくなります。

ページのロック解除

メモリーによるページのロックを解除するために、プロセスは munlock(3C) 呼び出しによって、ロックされている仮想記憶のセグメントを解放するように要求します。munlock により、指定された仮想ページのロックカウントは減ります。ページのロックカウントが 0 まで減ると、そのページは普通にスワップされます。

全ページのロック

スーパーユーザープロセスは、mlockall(3C) 呼び出しによって、自身のアドレス空間内の全マッピングをロックするように要求できます。MCL_CURRENT フラグが設定されている場合は、既存のメモリマッピングがすべてロックされます。MCL_FUTURE フラグが設定されている場合は、既存のマッピングに追加されるマッピングまたは既存のマッピングを置き換えるマッピングはすべて、メモリー内にロックされます。

スティッキロックの復元

ページのロックカウントが 65535 (0xFFFF) に達すると、そのページは永久にロックされます。値 0xFFFF は実装によって定義されています。この値は将来のリリースで変更される可能性があります。このようにしてロックされたページは、ロックを解除できません。復元するにはシステムをリブートしてください。