図1はアドレス空間について、仮想アドレス、物理アドレス、バスアドレスの
関係を示しています。
図1:仮想アドレス、物理アドレス、バスアドレスの関係
物理アドレスをそのままカーネルやプロセスのアドレスに
使用するOSを実アドレスOSと呼びましょう。また直接物理アドレスを使用しないで
その代わりに仮想アドレスを使うOSを仮想アドレスOSと呼びましょう。
一般には物理アドレス空間は実メモリとI/Oデバイスが持つレジスタやメモリから
成る空間から構成されています。後者の空間は、PCIとかVMEbusとかさまざまな
バス空間があります。ですから物理アドレスが決まれば対応する
デバイスのレジスタやメモリが決まります。I/Oバスがが何段にも重なっている
場合はさらに複雑な対応になりますが、ここでは一意的に決まるものとして
話を進めます。
実アドレスOSの場合はプログラムのアドレスがそのまま物理アドレスなので
対応するバスアドレスが決まります。しかも、その物理アドレスとバスアドレスを
同じ値に対応させるとバスアドレスへのアクセスはそのバス空間の中にある
デバイスのアドレスをそのまま与えるだけで、そのデバイスへのアクセスが
可能になります。このようにハードウエアを構成しているOSと計算機の組合せは
良く見かけます。例えば、デバイスのコントロールステータスレジスタ(CSR)への
アクセスはそのCSRのバスアドレスがわかれば、簡単にアクセスができます。
実アドレスOSはI/Oを行なう上では大変便利で簡単なOSと言えます。しかし、
実アドレスOSは大変危険な側面を持っています。それはユーザのちょっとした
間違いがシステムの停止や破壊に繋がってしまうと言う点です。これを避ける
方法の1つが仮想アドレスOSの採用です。ユーザプログラムのミスが直接
システムの停止/破壊に繋がらないように、OS機能を実現するプログラムや
データをカーネル空間としてユーザプログラムの仮想空間から切り離します。
ですからデバイスを操作する機能をカーネル空間に置いて、ユーザには
直接の操作を許しません.そこで,ユーザプログラムは,デバイスドライバに
作業を依頼し,デバイスドライバが実際にデバイスにアクセスを行ないます。
あるデバイスに関する全ての作業はそれ専用のデバイスドライバを通して
行なうことになります。