Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

ロック構成の選択

ほとんどのデバイスドライバで、ロック構成を簡潔に保つことをお勧めします。追加のロックを使用すると並行性が向上しますが、オーバーヘッドが増加します。ロックの使用数を減らすと消費時間が減少しますが、並行性は低下します。一般的な目安として、データ構造ごとに 1 つの mutex を、ドライバが待機する必要があるイベントまたは条件ごとに 1 つの条件変数を、ドライバ単位でグローバルな主要データセットごとに 1 つの mutex を使用します。長期間にわたって mutex を保持しないでください。ロック構成を選択するときは次のガイドラインを使用します。

  • エントリポイントのマルチスレッド動作のうち、十分な利点が得られるものを使用します。

  • すべてのエントリポイントを再入可能にします。静的変数を自動変数に変更することにより、共有データの量を減らすことができます。

  • ドライバで複数の mutex を取得する場合は、すべてのコードパスで、同じ順序で mutex を取得および解放します。

  • 同じ関数空間の内部でロックを保持および解放します。

  • KM_SLEEP を指定した kmem_alloc(9F) のように、ブロックの可能性がある DDI インタフェースを呼び出すときはドライバ mutex を保持しないようにします。

ロックの使用状態を確認するには、lockstat(1M) を使用します。lockstat(1M) はすべてのカーネルロックイベントを監視し、イベントの頻度およびタイミングデータを収集し、データを表示します。

マルチスレッド操作の詳細は、Multithreaded Programming Guide を参照してください。