組込み向けハイパーバイザー TOPPERS-Pro SafeG シリーズ TrustZone セキュリティ拡張機能利用、Arm プロセッサ上で汎用 OS と RTOS を安全に同時実行

SafeGの仕組み

SafeG はシングルコアで汎用OSとRTOSを時分割で動作させるための(広義の)ハイパーバイザーです。SafeG は Arm TrustZone 機能を応用し、OS のカーネルが動作する特権モードより強い、モニターモードで動作します。
SafeG は TrustZoneのノンセキュアワールドで汎用 OS を動作させ、セキュアワールドで RTOS を動作させます。SafeG は必要に応じて OS を切り替えます。

図1 SafeG の概要
図1 SafeG の概要

SafeG はマルチコア動作もサポートしています。マルチコアプロセッサで SafeG を動かす場合、各コアで SafeG が動作し必要に応じてコアごとに OS を切り替えます。 マルチコア環境では、全てのコアに汎用 OS と RTOS を割り当て、コアをシェアして実行するSMP的な構成をサポートします。

図2 マルチコアサポート SMP構成
図2 マルチコアサポート:SMP 構成

また、汎用 OS、RTOS を特定のコアで動作するように実行コアを制約する AMP 的な構成もサポートします。

図3 マルチコアサポート AMP構成
図3 マルチコアサポート:AMP 構成

SMP 的な構成では、RTOS が動作しない時に SafeG が汎用 OS へ切り替え、汎用 OS が動作します。AMP 的な構成では RTOS が動作するコアでは汎用 OS が動作することはありません。AMP 的構成では OS の切り替えが発生しないため、RTOS から汎用 OS への OS コンテキストスイッチ時間を軽減でき、よりリアルタイム性に優れます。

SafeG のメモリ保護

SafeG を使用する場合、RTOS と汎用 OS の実行メモリ領域と使用するデバイスを分離する必要があります。SafeG はデバイスの仮想化を行わないため、RTOS と汎用 OS 間でデバイスを単純に共有することはできません。

メモリやデバイスをセキュアワールドとノンセキュアワールドに分離する場合、TrustZone 対応の Arm バスではどちらのワールドからのアクセスか判断できます。 TrustZone 対応のメモリコントローラを実装している場合、セキュアワールドのメモリやデバイスはノンセキュアワールドから保護されます。またノンセキュアワールドのバスマスター(DMA や GPU)からも保護されます。
MMU、キャッシュ、TCM は TrustZone に対応しており、汎用 OS からの不正なアクセスから保護されます。

図4 TrustZoneのメモリ保護
図4 TrustZone のメモリ保護

OS 間のメモリ保護を実現するには、Arm コアが TrustZone をサポートしていることに加え、バス、メモリコントローラ、割込みコントローラが TrustZone をサポートしている必要があります。CPU(SoC)の TrustZone サポート状況によって保護機能がどこまで機能するかは制限される場合があります。

SafeG の割込み管理

SafeGの割込み管理を説明します。

図5 SafeGの割込み管理
図5 SafeG の割込み管理

Arm コアへの割込みも SafeG で RTOS、汎用 OS で分離します。
Arm コアへの割込みは IRQ と FIQ、2種類が存在し、通常(SafeG を使わない場合)は RTOS、汎用 OS とも IRQ を使用します。
SafeG では RTOS 割込みには FIQ を割り当て、汎用 OS 割込みには IRQ を割り当てます。
汎用 OS はTrustZoneの設定によりRTOS割込み(FIQ)がマスク不可にされるため、汎用 OS 実行中はどのような状態でも FIQ により RTOS に実行がプリエンプトされます。
他方、RTOS 実行時は、汎用 OS 割込み(IRQ)をマスクして実行するため、RTOS 実行中は汎用 OS 割込みによってプリエンプトされることはありません。SafeG はモニタコール呼び出し、および RTOS 割込み(FIQ)発生で起動されます。SafeG 実行中は全ての割込みが禁止状態になります。この管理により実行の優先順位は以下の順となります。

図6 SafeGの実行優先順位
図6 SafeG の実行優先順位

高速な OS 切り替え

TrustZone により大部分のプロセッサのレジスタはハードウェアにより多重化されています。また MMU もワールド毎に持っているため切り替えやコピーの必要はありません。ワールドの切り替え(= OS の切り替え)は命令一つで行われるため、高速に OS 切り替えが行えます。

デバイスアクセス

ハイパーバイザーによってはハードウェアを仮想化しているため各 OS/ドライバからデバイスへのアクセスにオーバーヘッドがかかる場合があります。SafeG ではデバイスの仮想化は行っていません。ノンセキュアワールドで動作する汎用 OS のデバイスドライバはノンセキュア領域のデバイスに直接アクセスできます。このため、RTOS および汎用 OS の通常のデバイスドライバがほぼそのまま使え、オーバーヘッドもかかりません。

まとめ

SafeG は、プロセッサが持つ標準の機能のみで動作するため、(もう一つの OS を動かすためのメモリがあれば)ハードウェアはそのままで汎用 OS を使ったシステムで RTOS を同時に動かす、またはその逆に RTOS のみで動かしているシステムで汎用 OS も動かすことが容易にできます。

高度なネットワーク機能を付加したい、快適な GUI を搭載したい、など RTOS 単体では実現が困難な要求も Linux や Android といった汎用 OS を同時に動かす事によって容易に実現できます。また、RTOS のみで動作している機器を IoT サーバに接続したいといったような場合も、RTOS 側はそのままで IoT 系の OS を SafeG を使って並行動作させることにより双方干渉することなく安全に動かすことができます。

ユビキタスAI では、組込みシステムでの「マルチ OS」「64 ビット」「マルチコア」を積極的に提案しています。

製品ラインナップ

TOPPERS-Pro SafeG シリーズには、32 ビット Arm Cortex-A シリーズ用の TOPPERS-Pro SafeG、64 ビット Cortex-A シリーズ用の TOPPERS-Pro SafeG64、Cortex-M シリーズ用の TOPPERS-Pro SafeG-M が用意されています。

参考リンク

※本文章は、TOPPERS-Pro SafeGシリーズの製品に付属する「TOPPERS-Pro SafeG_仕様書」から抜粋・加筆・修正したものです。