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

印刷ビューの終了

更新: 2014 年 9 月
 
 

ドライバコンテキスト

ドライバコンテキストとは、ドライバが現在動作している状況のことを意味します。コンテキストは、ドライバが実行できる操作を制限します。ドライバコンテキストは、呼び出される実行コードによって異なります。ドライバコードは、次の 4 つのコンテキストで実行されます。

  • ユーザーコンテキスト。同期方式でユーザースレッドによって呼び出された場合、ドライバのエントリポイントにユーザーコンテキストがあります。つまり、ユーザースレッドは、呼び出されたエントリポイントからシステムが復帰するのを待ちます。たとえば、ドライバの read (9E) エントリポイントが read(2) システムコールから呼び出された場合、そのエントリポイントにユーザーコンテキストがあります。この場合、ドライバはデータをユーザースレッドにコピーしたりユーザースレッドからコピーしたりするためにユーザー領域にアクセスできます。

  • カーネルコンテキスト。カーネルの一部から呼び出された場合、ドライバ関数はカーネルコンテキストで動作します。ブロック型デバイスドライバでは、デバイスにページを書き込むために、strategy (9E) エントリポイントが pageout デーモンによって呼び出されることがあります。このページデーモンは現在のユーザースレッドとは関係がないため、この場合、strategy(9E) はカーネルコンテキストで動作します。

  • 割り込みコンテキスト割り込みコンテキストはカーネルコンテキストのより制限された形式です。割り込みコンテキストは、割り込みが処理された結果、呼び出されます。ドライバ割り込みルーチンは、関連付けられた割り込みレベルを使って割り込みコンテキストで動作します。コールバックルーチンも同様に割り込みコンテキストで動作します。詳細は、Chapter 8, Interrupt Handlersを参照してください。

  • 高レベルの割り込みコンテキスト高レベルの割り込みコンテキストは割り込みコンテキストのより制限された形式です。割り込みが高レベルであることを ddi_intr_hilevel(9F) が示している場合、ドライバ割り込みハンドラは高レベルの割り込みコンテキストで動作します。詳細は、Chapter 8, Interrupt Handlersを参照してください。

セクション 9F のマニュアルページには、各関数に使用できるコンテキストが記載されています。たとえば、カーネルコンテキストでは、ドライバは copyin (9F) を呼び出してはいけません。