CPU がセキュア モードになった後 (モニター プログラムが を設定NS = 0
)、セキュア OS はどのようにスケジュールされるのか説明してもらえますか? CPU がセキュア モードになったので、タイマー ティック割り込みは非セキュア ワールドではなくセキュア OS によって処理されるのでしょうか?
1 に答える
モニタ モード設定NS=0
は、モニタ モードから見える CP15 レジスタを設定します。参照:モニターモード IFAR/IFSR... . モニタ モードが別のモードに切り替わると NS=0
、そのモードはセキュア ワールドバージョンになります。バンクされた CP15 レジスタがセキュアバージョンであることを意味します。また、NS
ビットはバスサイクルでクリアされます。
が設定されている場合NS=1
、監視モードが切り替わると、バンクされた CP15 レジスタは通常バージョンになります。主にノーマルワールドのMMUが活躍します。また、NS
ビットはバスサイクルでセットされます。TZ vs ハイパーバイザー
セキュア OS はどのようにスケジュールされますか?
監視モードがこれを行います。( SCR
cp15 c1, c1, 0) には、モニターベクタ テーブルを使用するか、現在の CPU ワールド (セキュアまたはノーマル) を使用するかを決定するビットがあります。通常の世界にいて、その世界を中断するタイマーが必要な場合は、それを処理するための監視モードが必要です。
モニターモードは、次の 2 つの方法で設定できます。
- すべてのセキュア割り込みを
FIQ
. - すべての割り込みをトラップして監視します。
最初の選択をお勧めします。このモードでは、監視コードはSCR#FIQ
(ビット 2) が通常の世界で設定されていることを保証する必要がありますが、安全な世界ではクリアされます。(SCR#IRQ
ビット 1) は、セキュア OS の実行時に設定され (通常の割り込みでセキュア OS を中断する場合)、通常の世界ではクリアされます。
そのため、セキュアタイマーに割り込みが発生すると、ワールド スイッチref1を実行し、セキュア OSタイマー コードを実行FIQ
する監視モードにトラップされます。このセキュア タイマーにより、セキュア ワールドが再スケジュールされる場合があります。通常の世界と安全な世界のスケジューラが相互作用する方法は、ソフトウェア次第です。つまり、一般的な答えはありません。による、
- モニターモード
- 安全なOS 。
- 通常世界のOS。
主に、ARM TrustZoneはセキュア OSスケジューリングを単独で処理しません。これを実装するには、提供されたプリミティブを使用するソフトウェアを作成する必要があります。 ARM TrustZoneは、さまざまな実装方法を容易にするだけです。TrustZone ホワイトペーパー
参照:いくつかの代替セットアップ用の TrustZone 用プログラムの開発方法。
参照 1:ワールド スイッチは、使用されているすべてのモードのすべての汎用 CPU レジスタを保存/復元します。つまり、ノーマルワールドからセキュアワールドへの切り替えでは、R0 ~ R15 (およびバンクされたすべてのコピー) と、場合によっては NEON/VFP をノーマル ワールドストアに保存する必要があります。同様に、セキュア ワールド用にレジスタをリロードする必要があります。モニター モードは、これらのワールド コンテキストsp
にアクセスするための優れたアンカーを提供します。モニタ モードは、通常の起動前に、セキュア ブート中に設定する必要があります。sp
ワールドが初期化されます。これは、従来の OS コンテキスト スイッチによく似ています。(SCR#NS
ビット 0) は適切に設定されます。これは、レジスタを保存する方法 (つまり、モード スイッチまたは ) に応じて、レジスタ切り替えの前または後に行うことができますsrs
。