ハイパーバイザーの上で実行されるものは、1つ以上の完全なオペレーティングシステムです。ハイパーバイザーはハードウェアを仮想化するため、各オペレーティングシステムは、マシン全体が自分自身にあると信じ込ませます。ハイパーバイザーに入るエンジニアリングの天才は、この仮想化をほとんどまたはまったく費用をかけずに提供する方法です(物理ハードウェア上で1つのオペレーティングシステムを直接実行する場合と比較して)。
exokernelの上で実行されるのは、ユーザーレベルのプロセスの集まりです。各プロセスは、さまざまなサービスとポリシーを提供するライブラリ(同じライブラリでも異なるライブラリでもよい)にアタッチされます。exokernelの目的は、保護のみを提供し(1つのプロセスが別のプロセス専用のリソースを使用しないようにする)、ユーザーレベルのプログラムに残して、最も効率的なポリシーを選択することです。Exokernelは実際には研究プロジェクトであり、その主な成果は、さまざまな種類のオペレーティングシステムサービスと、それらのサービスを効率的に実装するための障壁に関する一連の研究でした。Exokernelプロジェクトを表示するもう1つの方法は、マイクロカーネルの作成方法を調査するプロジェクトであるということです。 それは恐ろしく非効率的で遅くはありません。
マイクロカーネルの大きな問題の1つは、モノリシックカーネル(Linuxなど)よりも頻繁にユーザープロセスとカーネルモードを頻繁に切り替えたり切り替えたりすることです。ユーザーモードからカーネルモードまたはカーネルモードからユーザーモードへの移行が驚くほど高い(スイッチあたり1000マシンサイクル)。
Exokernelプロジェクトがどの程度成功したか失敗したかは、私にはわかりません。リソース保護を提供する驚くべき新しい方法を思いついたケースは確かにいくつかあります(オペレーティングシステムがディスクブロックのアクセス許可を管理し、ファイルシステム全体がユーザーレベルで管理されるディスクモデルなど)。彼らはまた、その頃からのいくつかの優れたアイデア、例えば、カール・ウォルドスバーガーの宝くじのスケジューリング技術を活用することもできました。そして、機能ベースの保護がかなり効率的であることが判明したいくつかのケースがありました。
他にも、ポリシーの柔軟性を提供することでカーネル境界を越える数が劇的に増加し、他の手法に頼らなければならない場合がありました。たとえば、ネットワークパケットフィルタリングでは、ユーザーレベルでフィルタリングを実行する代わりに、カーネルでフィルタリングを実行しましたが、ユーザープログラムに、実行する小さな(したがって(したがって安全な)プログラミング言語で)小さなプログラムを送信する機能を提供しましたカーネル。この分野の同様のアイデアは、ワシントン大学のSPINオペレーティングシステムプロジェクトによってほぼ同時に調査されていました。