1

ある種の割り込みルーチンを実装しようとしています。

これは、GIC v2 H/W サポートによる仮想化に関連しています。

私の質問は:

 When catch a interrupt number, Hypervisor should distingush if it's for 
own itself or for guests ran on the hypervisor.
But how to check it? if it's for hyp or guest?

それは私の質問です。正しいかどうか教えてください。もっと背景が必要です。前回はリプレイありがとうございました。

4

1 に答える 1

1

最も簡単な方法は、FIQ 割り込みをセキュア ワールドに割り当て、IRQ をノーマル ワールドに割り当てることです。IRQ/FIQ をモニターに、または現在の OS に直接ルーティングする trustzone レジスター ( SCRまたはセキュア構成レジスター) があります。GIC 自体では、すべての割り込みを FIQ または IRQ にすることができます (ドキュメントではtype 0およびtype 1と呼ばれていると思います)。いつでもモニターにルーティングすることも、割り込みがルーティングされる場所を (ワールド スイッチ上で) 動的に切り替えることもできます。

  World | Normal | Secure
  ------+--------+--------
  FIQ   | Monitor| Through
  IRQ   | Through| Monitor

モニター トラップでは、多くのレジスタを保存する必要があります (レジスタを保存するためのワールド スイッチ)。安全な割り込みハンドラーはある程度信頼できますが、通常の世界ではすべての賭けをオフにする必要があります。

それを処理する他の方法があるかもしれませんが、これは最も単純です。たとえば、割り込みソースの所有者 (それらが属するワールド) の固定テーブルを常に持つことができます。他にもたくさんの方法があると思います。ほとんどの場合、常に監視モードにトラップされますが、これはパフォーマンス上の理由からやや望ましくありません。

ハイパーバイザーの場合、ゲスト OS で FIQ 割り込みを禁止する必要があります。それらは FAST であると想定されており、仮想化がこれを妨害するため、おそらくうまく機能しません。その場合は、SCR を通常の列のままにしておくことができます(したがって、SCR は一定です)。

于 2016-02-29T05:02:47.730 に答える