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 ビットArm Cortex-Aシリーズ用のTOPPERS-Pro SafeG64、Arm Cortex-Mシリーズ用のTOPPERS-Pro SafeG-Mが用意されています。

参考リンク

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