「なぜ」の部分を取り上げましょう。
最新のOSの理由の1つは、システム上で複数のプログラム(プロセス)を同時に実行できるようにすることです。これを安全に行うには、次のことを行う必要があります。
(特別なニーズがない限り)システム内のRAMを一定の方法(たとえば、プロセスごとに256MB固定)で分割したくない場合は、2GBシステムで8プロセスに制限されます。各プロセスがメモリを「求め」、完了したらそれを返すことができるようにしたいと思います。
また、デバイス間でI / Oデバイスを固定的に分割することは望ましくありません。通常、メモリなどのハードウェアの一部またはすべてを共有リソースにするか、特定の時間に特定のプロセスに対して少なくとも一時的に排他的にする必要があります。これには、すべてのプロセスが独自にI / Oを実行するのではなく、I / Oをスケジュールおよび調整するために何かを「実行」する必要があります。ほとんどのI / OはCPUよりもはるかに遅いため、スケジューリングは重要です。そのため、シングルコアシステムであってもI / Oを待機している間にCPUを他のプロセスで動作させることができます。
上記の権利を実現するには、いくつかのCPUハードウェア機能を利用する必要があります。これらの1つはMMUで、もう1つは保護モードです。2つのOSがこれらのハードウェア機能を共同で共有して、2つ以上のOSを実行できますか?
もちろん、ハードウェアには、あるOSが他のOSのメモリ全体を踏みつけるのを止めることができるものは何もありません。CPUがカーネルモード(カーネルモードが1つしかない)の場合、どのコードでも何でもできます。1つのOSのコードが他のOSのコードまたはデータ上で実行される可能性は100%です。また、オペレーティングシステムには過去に脆弱性があり、将来さらに脆弱性が生じることがわかっています。そのため、セキュリティ上非常に悪いです。
さて、この上に別の「レイヤー」を配置して、複数のOSのハードウェアサポートが必要になるとしたら、クールではないでしょうか。それがまさにハードウェア仮想化機能の機能であり、複数の実行中のOS間にハードウェアバリアを設け、ハイパーバイザーと呼ばれる最上位の「インターフェイス」があります。ハイパーバイザーは1つしか持てません。はい、どちらのOSで実行されているプロセスも、I / Oを実行するには3つの層を通過する必要があります(プロセス-ローカルカーネル-ハイパーバイザー)