JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
デバイスドライバの記述     Oracle Solaris 10 8/11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I Solaris プラットフォーム用デバイスドライバの設計

1.  Solaris デバイスドライバの概要

2.  Solaris カーネルとデバイスツリー

3.  マルチスレッド

4.  プロパティー

5.  イベントの管理とタスクのキュー

6.  ドライバの自動設定

7.  デバイスアクセス: プログラム式入出力

8.  割り込みハンドラ

9.  ダイレクトメモリーアクセス (DMA)

10.  デバイスメモリーおよびカーネルメモリーのマッピング

11.  デバイスコンテキスト管理

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

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

コンテキスト管理モデル

コンテキスト管理の処理

devmap_callback_ctl 構造体

デバイスコンテキスト管理用のエントリポイント

devmap_map() エントリポイント

devmap_access() エントリポイント

devmap_contextmgt() エントリポイント

devmap_dup() エントリポイント

devmap_unmap() エントリポイント

ユーザーマッピングとドライバ通知の関連付け

マッピングへのアクセスの管理

devmap_load() エントリポイント

devmap_unload() エントリポイント

12.  電源管理

13.  Solaris ドライバの強化

14.  階層化ドライバインタフェース (LDI)

パート II 特定の種類のデバイスドライバの設計

15.  文字デバイスのドライバ

16.  ブロックデバイスのドライバ

17.  SCSI ターゲットドライバ

18.  SCSI ホストバスアダプタドライバ

19.  ネットワークデバイスのドライバ

20.  USB ドライバ

パート III デバイスドライバの構築

21.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

22.  デバイスドライバのデバッグ、テスト、およびチューニング

23.  推奨されるコーティング方法

パート IV 付録

A.  ハードウェアの概要

B.  Solaris DDI/DKI サービスの概要

C.  64 ビットデバイスドライバの準備

D.  コンソールフレームバッファードライバ

索引

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

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

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

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

コンテキスト管理モデル

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

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

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

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

図 11-1 デバイスコンテキスト管理

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

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

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

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

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

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