デバイスへアクセスするためのアドレス空間

デバイスをアクセスするためには、アクセスするためのデバイスを特定する 必要があります。メモリ上にあるアドレスにあるデータを特定するように デバイスにもそれを特定するために同様な方法を用います。

デバイス特定の方法にはそのデバイスをデバイスが位置情報に依存して アドレスされる方法と位置に無関係に 論理的にアドレスされる方法があります。前者を地理的アドレス法、後者を 論理的アドレス(論理アドレス)法と呼びます。 このようにアドレッシングに関わり、分類される場合の他に、 仮想記憶を用いる場合の仮想アドレス、仮想記憶を用いない場合ないしは 仮想アドレスがアドレス変換機構により解決される場合の物理アドレス、 及びバスアドレスの3つのアドレス空間があります。 図1はアドレス空間について、仮想アドレス、物理アドレス、バスアドレスの 関係を示しています。

図1:仮想アドレス、物理アドレス、バスアドレスの関係

仮想記憶を用いない場合、プロセスやカーネルのコードが実行されるときに 発行されるアドレスは物理アドレスがそのまま使用されます。 一方、仮想記憶を用いる場合、直接物理アドレスは使用されず その代わりに仮想アドレスが使用され、アドレス変換機構を利用して 物理アドレスに変換されます。 物理アドレス空間は実メモリとI/Oデバイスが持つレジスタやメモリから 成る空間から構成されています。後者の空間は、PCIとかVMEとかさまざまな バス空間があります。ですから物理アドレスが決まれば対応する デバイスのレジスタやメモリが決まります。I/Oバスがが何段にも重なっている 場合はさらに複雑な対応になりますが、ここでは一意的に決まるものとして 話を進めます。 仮想記憶を用いないOSの場合はプログラムのアドレスがそのまま物理アドレスなので 対応するバスアドレスが決まります。しかも、その物理アドレスとバスアドレスを 同じ値に対応させるとバスアドレスへのアクセスはそのバス空間の中にある デバイスのアドレスをそのまま与えるだけで、そのデバイスへのアクセスが 可能になります。このようにハードウエアを構成しているOSと計算機の組合せは 良く見かけます。例えば、デバイスのコントロールステータスレジスタ(CSR)への アクセスはそのCSRのバスアドレスがわかれば、簡単にアクセスができます。 OSはI/Oを行なう上では大変便利で簡単なOSと言えます。しかし、1つの プロセスの大きさが実メモリを越えると動作しないと言う欠点があります。 仮想記憶を用いるOSはこの問題を解決し、実メモリの大きさとは無関係に 仮想アドレスの大きさのプログラムが実行可能になります。また、 OSをカーネル空間としてユーザプログラムの仮想空間から切り離します。 デバイスを操作する機能をカーネル空間に置いて、ユーザには 直接の操作を許しません.そこで,ユーザプログラムは,デバイスドライバに 作業を依頼し,デバイスドライバが実際にデバイスにアクセスを行ないます。 ですからユーザプログラムが間違ってデバイスへの不正なアクセスを 行なうことを防ぎ、より安定したシステムを作り上げることができます。