System V メッセージキューは、カーネルが作成したキューを使用してメッセージを交換する、メッセージ転送インタフェースを提供します。Solaris 環境では、メッセージをキューに入れたりキューから取り出したりするためのインタフェースが提供されます。メッセージは、自身の型を持つことができます。キューに入れる場合、メッセージはキューの終わりに置かれます。キューから取り出す場合は、指定された型の最初のメッセージがキューから削除されます。型が指定されていない場合は、最初のメッセージが削除されます。
モジュールは最初の参照で動的にロードされます。サブシステムに提供されるパラメータはそのときに検査されます。/etc/system ファイルのエントリには msgsys: 接頭辞が含まれていなければなりません。
この機能は POSIX 1003.1b メッセージキューの機能とは異なります。
Solaris 8 リリースでは、この機能のパラメータが一部変更されました。msgsys:msginfo_msgssz、msgsys:msginfo_msgmap、 msgsys:msginfo_msgseg パラメータは廃止になりましたが、エラーメッセージを避けるためにそのまま残されています。これらのパラメータの値は無視されます。
一度に処理できるメッセージの最大数は完全に msgsys:msginfo_msgtql で定義されるようになりました。この変数で指定された値に基づいたメッセージヘッダーの配列が割り当てられ、空リストとして初期設定されます。メッセージの送信が必要になると、この空リストが調べられ、使用できるヘッダーがあれば、メッセージデータを処理するためにバッファがカーネルメモリーから割り当てられます。次に、データがバッファにコピーされ、メッセージが宛先のキューに入れられます。メッセージが読み取られると、バッファーは解放され、ヘッダーが空リストに置かれます。
Solaris の以前のバージョンでは、メッセージ数の制限は、msgsys:msginfo_msgtql を設定するか、メッセージバッファプールに割り当てられるメモリーセグメントの数とセグメントのサイズを制限することによって行われていました。モジュールは、最初にロードされるときに、メッセージの管理に必要な数のデータ構造体を割り当てます。これらの構造体に割り当てられた空間の合計は、使用可能なカーネルメモリーの 25% を超えることはできません。合計がこの値を超えると、ロードは失敗し、次のメッセージが表示されます。
msgsys: can't load module, too much memory requested |
Solaris の以前のバージョンとは異なり、メッセージバッファプールはセットアップの中には割り当てらませんし、25% のメモリー検査でも考慮されなくなりました。
符号なし long
2048
0 から物理メモリーの総量
バイト
いいえ。msginfo 構造体の msgmax フィールドにロードされます。
なし
msgsnd(2) 呼び出しが EINVAL エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
符号なし long
4096
0 から物理メモリーの総量
バイト
いいえ。msginfo 構造体の msgmnb フィールドにロードされます。
なし
msgsnd(2) 呼び出しがブロックするか EAGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
符号付き整数
50
0 から MAXINT
いいえ。msginfo 構造体の msgmni フィールドにロードされます。
なし
msgget(2) 呼び出しが ENOSPC エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり
作成できるメッセージの最大数。msgsnd(2) 呼び出しでこの限度を超える要求が行われた場合は、メッセージヘッダーが使用可能になるまで要求は延期されます。あるいは、その要求で IPC_NOWAIT フラグがオンに設定されていると、要求はエラー EAGAIN で失敗します。
符号付き整数
40
0 から MAXINT
いいえ。msginfo 構造体の msgtql フィールドにロードされます。
なし
msgsnd(2) 呼び出しがブロックするか EAGAIN エラーを返す場合、またはソフトウェアベンダーが推奨する場合
変更の可能性あり