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

ドキュメントの情報

はじめに

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

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

2.  Oracle 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.  Oracle Solaris ドライバの強化

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

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

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

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

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

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

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

20.  USB ドライバ

21.  SR-IOV ドライバ

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

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

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

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

パート IV 付録

A.  ハードウェアの概要

B.  Oracle Solaris DDI/DKI サービスのサマリー

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

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

E.  pci.conf ファイル

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

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

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

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

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

コンテキスト管理モデル

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

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

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

次の図は、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) で指定された時間間隔の間、同じデバイスへのアクセスをほかのプロセスから一切要求できなくなることを保証します。