最近、私は仮想化について宿題をしています。私の質問は、VMMがどのように制御をゲストカーネルに転送し、そのコードをリング1で実行するかということです。
タイプ1VMM:これは従来のトラップアンドエミュレートVMMです。VMMはハードウェア上で直接実行され、リング0では「ホストオペレーティングシステム」として機能します。ゲストカーネルとゲストアプリケーションは、それぞれリング1とリング3でVMM上で実行されます。
ゲストアプリケーションがシステムコールを行うと、リング0 VMMにトラップされます(CPUはこれを行うように設計されています)。
次に、VMMはこれがシステムコールであることを検出し、制御をゲストカーネルのsyscalハンドラーに転送して、リング1で実行します。
完了すると、ゲストカーネルはsyscall-returnを実行します。これは特権呼び出しであり、VMMに再びトラップされます。
次に、VMMはリング3のゲストユーザースペースに実際に戻ります(CPUもこれを行うように設計されています)。
私の質問はステップ2についてです。VMMはどのように制御をゲストカーネルに転送し、CPUを強制的に1回鳴らしますか?それ以降、ゲストカーネルコードはリング0で実行されるため、単純な「呼び出し」にすることはできません。これは、ある種の「syscall-return」または特別なコンテキストスイッチ命令である必要があります。
何か考えがありますか?ありがとうございました!