Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

デバイスコンテキストの概要

このセクションでは、デバイスコンテキストとコンテキスト管理モデルの概要を説明します。

デバイスコンテキストとは

デバイスのコンテキストとは、デバイスハードウェアの現在の状態のことです。あるプロセスのデバイスコンテキストは、そのプロセスに代わってデバイスドライバによって管理されます。ドライバは、デバイスにアクセスするプロセスごとに異なるデバイスコンテキストを維持管理する必要があります。デバイスドライバは、あるプロセスがデバイスにアクセスするときに正しいデバイスコンテキストの復元を担当します。

コンテキスト管理モデル

フレームバッファーは、デバイスコンテキスト管理の良い例になります。高速化フレームバッファーでは、ユーザープロセスがメモリーマッピングされたアクセス経由でデバイスの制御レジスタを直接操作できます。これらのプロセスは従来のシステムコールを使用しないため、デバイスにアクセスするプロセスからデバイスドライバを呼び出す必要はありません。一方、あるプロセスがデバイスにアクセスしようとしたときに、デバイスドライバにそれが通知される必要があります。ドライバは、正しいデバイスコンテキストを復元する必要があるほか、必要とされるすべての同期機能を提供する必要もあります。

この問題を解決するため、デバイスコンテキスト管理インタフェースでは、デバイスドライバが、あるユーザープロセスがデバイスのメモリーマッピングされた領域にアクセスしたときに通知を受け取り、デバイスのハードウェアへのアクセスを制御できるようになっています。さまざまなデバイスコンテキストの同期や管理は、デバイスドライバが担当します。あるユーザープロセスがマッピングにアクセスしたときに、デバイスドライバはそのプロセスの正しいデバイスコンテキストを復元する必要があります。

ユーザープロセスが次のいずれかのアクションを実行するたびに、デバイスドライバにそれが通知されます。

  • マッピングにアクセスする

  • マッピングを複製する

  • マッピングを解放する

  • マッピングを作成する

次の図は、1 つのデバイスに対して複数のユーザープロセスからメモリーマッピングが行われている様子を示したものです。ドライバがデバイスへのアクセスをプロセス B に許可したため、プロセス B がアクセスしても、その通知はドライバには送信されません。一方、プロセス A またはプロセス C のいずれかがデバイスにアクセスした場合は、引き続き、ドライバにそれが通知されます

図 10  デバイスコンテキスト管理

image:図は、3 つのプロセス A、B、C のうち、プロセス B がデバイスへの排他アクセス権を持っている様子を示したものです。

将来のある時点で、プロセス A がデバイスにアクセスします。デバイスドライバは通知を受け、プロセス B からデバイスへの以降のアクセスをブロックします。次にドライバは、プロセス B のデバイスコンテキストを保存します。ドライバは、プロセス A のデバイスコンテキストを復元します。続いてドライバは、次の図に示すように、プロセス A にアクセスを許可します。この時点で、プロセス B またはプロセス C のいずれかがデバイスにアクセスすると、デバイスドライバにそれが通知されるようになります。

図 11  デバイスコンテキストがユーザープロセス A に切り替わる様子

image:図は前の図の例からの続きですが、ここでは排他デバイスアクセスがプロセス A に切り替わっています。

マルチプロセッサシステムでは、複数のプロセスが同時にデバイスへのアクセスを試みる可能性があります。この状況ではスラッシングが生じる可能性があります。一部のデバイスでは、デバイスコンテキストの復元に、より長い時間が必要になります。デバイスコンテキストを実際に利用するときに使用される CPU 時間よりも、デバイスコンテキストを復元するときに使用される CPU 時間のほうが長くならないように、プロセスがデバイスにアクセスするときに最低限必要になる時間を、devmap_set_ctx_timeout(9F) を使用して設定できるようになっています。

カーネルは、デバイスドライバがあるプロセスにアクセスをいったん許可すると、devmap_set_ctx_timeout(9F) で指定された時間間隔の間、同じデバイスへのアクセスをほかのプロセスから一切要求できなくなることを保証します。