組込み向けハイパーバイザーSafeGの詳細解説

「TOPPERS-Pro SafeG」、「TOPPERS-Pro SafeG64」および「TOPPERS-Pro SafeG-M」は、NPO法人TOPPERSプロジェクトが開発したオープンソースソフトウェア「SafeG」、「SafeG64」および「SafeG-M」をベースとした、商用の組込み向けハイパーバイザーです。

ここでは、SafeGシリーズの機能を詳しく解説します。

より詳しい技術や関連製品について知りたい方へ

お気軽相談

本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。

1. SafeGの仕組み

1-1. SafeGの概要

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

SafeGはTrustZoneのノーマルワールドで汎用OSを動作させ、セキュアワールドでRTOSを動作させます。SafeGは必要に応じてOSを切り替えます。

OSコンテキストを適切に切り替えして、両OSを動作させるSafeGRTOSタスク特権/ユーザRTOSカーネル特権RTOS割込みハンドラ特権汎用OSアプリユーザ(非特権)モニタモード汎用OSカーネル特権汎用OSドライバ特権セキュアワールドノーマルワールド
SafeGの概要

1-2. マルチコア環境でのSMP構成

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

SafeGCore0Core3Core2Core1汎用OSRTOSノーマルワールドセキュアワールドArm MPCore
マルチコアサポート:SMP構成

1-3. マルチコア環境でのAMP構成

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

SafeGCore0Core3Core2Core1汎用OSRTOSノーマルワールドセキュアワールドArm MPCore
マルチコアサポート:AMP構成

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

2. SafeGにおけるメモリ保護

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

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

MMU、キャッシュ、TCMはTrustZoneに対応しており、汎用OSからの不正なアクセスから保護されます。

バスSafeGノーマル用デバイスセキュア用デバイスノーマル用データセキュア用データ汎用OSRTOSI/OメモリノーマルワールドセキュアワールドArm with TrustZone
TrustZoneのメモリ保護

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

3. SafeGにおける割込み管理

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

ノーマルワールドセキュアワールドSafeG汎用OSプロセス汎用OSカーネル割込みハンドラRTOSカーネル割込みハンドラ割込みコントローラ汎用OS側デバイスRTOS側デバイスIRQ(汎用OS割込み)FIQ(RTOS割込み)IRQはダイレクトに通知するFIQをIRQに変換して転送するRTOSタスク(IRQ禁止で実行)
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実行中はすべての割込みが禁止状態になります。この管理により実行の優先順位は以下の順となります。

RTOSカーネルRTOS割込みRTOSタスク汎用OSカーネル汎用OS割込み汎用OSプロセス実行優先順位SafeGSafeG
SafeGの実行優先順位

4. 高速なOS切り替えとデバイスアクセス

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

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

5. まとめ

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_仕様書」から抜粋・加筆・修正したものです。

より詳しく技術や関連製品について知りたい方へ

お気軽相談

本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。


製品情報

組込み向けハイパーバイザー

TOPPERS-Pro SafeGシリーズ

TrustZoneセキュリティ拡張機能を利用。Armプロセッサ上で汎用OSとRTOSを安全に同時実行
製品ページを見る
製品情報

RTOSソリューション

TOPPERS-Proシリーズ

TOPPERSカーネルベースの開発プラットフォームを提供
製品ページを見る

TOPPERSカーネルの時間パーティショニング機能の概要

コラムを読む

TOPPERSカーネルのメモリ保護機能の特長と、高信頼性システム開発のポイント

コラムを読む

マルチコア/マルチOS環境でのデバイス共有/コア間・OS間通信

コラムを読む

組込みLinuxの生存確認(死活監視)

コラムを読む

シングル/マルチコア上でLinux/Androidの高速起動とリアルタイムOSを協調動作

コラムを読む