Xenはゲストオペレーティングシステムによってインストールされた例外ハンドラをどのように確認しますか?

Xenはゲストオペレーティングシステムによってインストールされた例外ハンドラをどのように確認しますか?

論文の一部を理解していないXenと仮想化技術。仮想化例外の処理(セクション2.1.2)トピックについては、各ゲストオペレーティングシステムが、例外が発生したときに実行したいハンドラにテーブルマッピング例外を登録した後、次のことができることを説明しています。

Xen に提供される例外ハンドラを検証することでセキュリティが確保されます。確認する唯一のことは、ハンドラのコードセグメントがリング0で実行されるように指定されていないことです。どのゲストオペレーティングシステムもこれらのセグメントを作成できないため、指定されたセグメントセレクタをXenが保持する少数の静的値と比較するだけで十分です。

私が理解していることは次のとおりです。 Xenは特権コマンドを含むハンドラコードを心配する必要はありません。なぜなら、そのような場合、ハンドラがリング0の外で実行されているため、コマンドの実行が失敗するからです。オペレーティングシステムはそのようなセクションを作成できます)。ただし、ゲストオペレーティングシステムは実際にXenとその特権コード用に予約されているハンドラでメモリセグメントを登録しようとします。この場合、例外を処理するためにこのセクションに移動すると、例外の処理中にコードがリング0で実行されます。したがって、XenはゲストオペレーティングシステムがXenに属するセグメントを例外ハンドラとして登録しないようにする必要があります。この部分の私の理解が正しいのでしょうか、間違っているのでしょうか?

次の段落は次のとおりです。

それに加えて、他のハンドラの問題は例外の伝播中に修正されます。たとえば、ハンドラのコードセグメントが存在しない場合、またはハンドラがメモリにページングされていない場合、Xenがハンドラに返されるiretコマンドを実行すると、適切なエラーが生成されます。 Xenはエラープログラムカウンタをチェックして、これらの二重エラー値を検出します。アドレスが異常な仮想化コードにある場合、問題のあるゲストオペレーティングシステムはシャットダウンされます。

私はこれを次のように解釈します:適切なゲストOSハンドラに制御を転送しようとし、失敗の処理中にそのハンドラが存在しないか、メモリが不足して2番目の障害が発生した場合は、2番目の失敗を処理します。 Xenコードは実行していることを確認します。コードが2番目のエラーをトリガーし、別の「親」エラーを処理している間にエラーが発生したことを認識します。本当に混乱しているのは、「アドレスが例外仮想化コードにある場合は、対応するゲストオペレーティングシステムが終了します」という最後の文です。ハンドラコードが存在せず、2番目のエラーが発生した場合に備えてこの情報を取得しました。しかし、ハンドラがメモリから外れたときにゲストOSがシャットダウンするのはなぜですか?ハンドラがディスクからメモリに移動したい。

コンテキストが必要な場合、デフォルトのアーキテクチャはx86です。

ベストアンサー1

おすすめ記事