全体ミーティング 4/22

全体ミーティング
2009/6/24
D3 西川 賀樹
発表内容
٥ 現在行っている研究について
٥ 研究テーマは完全仮想化によるARM向け仮
想マシンモニタの設計と実装
研究の背景
٥ 携帯端末等のモバイル機器における性能の向上
٥ 多くの機器がネットワーク接続も可能となり、高機能化・
多様化が進んでいる
٥ モバイル機器へ汎用OSが導入されるようになって
きている
٥ 単純なRTOSでは多様なアプリケーションに対応できない
٥ 汎用OSを用いることにより、汎用計算機で用いられてい
る既存アプリケーションの移植が容易になる
٥ しかしこれにより起こりうる問題も考えられる
モバイル機器の高機能化に伴う問題
٥ セキュリティリスクの増大
٥ ネットワーク接続を行うことにより、マルウェア等
に感染するリスクが増大
٥ 汎用OSを用いることにより、汎用計算機におけ
る既存の攻撃手法が使用可能
٥ リアルタイム処理における問題
٥ 多くの汎用OSはリアルタイム性の確保が不十分
目的
٥ モバイル機器向けの仮想マシンモニタを開発
٥ 組み込みにおいて最も普及しているARMアーキテクチャ
を対象とする
٥ リアルタイム性の向上
٥ RTOSと汎用OSを同時に動作させることができ、リアルタ
イム処理をRTOSで優先的に実行可能
٥ セキュリティの向上
٥ 各OSをVM上で動作させることで、汎用OSでのマルウェ
ア感染時等にRTOSへの影響を防げる
本研究の仮想マシンモニタ(VMM)
٥ Type-1での完全仮想化による実装
٥ ゲストOSの修正が必要ない
٥ 汎用OSに比べて組み込みOSは種類が多く、各OSに対して修正
を加えることはコストが大きい
٥ ソースが公開されていないOSについても対応可能
٥ 現在完全仮想化により実装されたVMMは存在しない
٥ Type-2に比べ実行速度が高速
٥ リアルタイム性を考慮したVMスケジューリング
٥ VMに実行優先度をつけ、RTOSを動作させる場合は最
優先で実行する
関連研究
٥ 擬似仮想化によるVMM(Trango、VirtualLogix、Xen
on ARM)
٥ 完全仮想化に比べ高速だが、ゲストOSの修正が必要
٥ Xen on ARMはSEDFスケジューラを用いており、リアルタ
イム性が考慮されていない
٥ Type-2 VMM(WB-VRT)
٥ ホスト・ゲストOS共に修正が必要であり、プラットフォームが
限られる
٥ Type-1に比べ実行速度が劣る
٥ リアルタイム性においては有利
本VMMの設計
٥ CPU
٥ 時計
٥ VMスケジューリング
٥ 例外・割り込み
٥ 割り込みコントローラ
٥ メモリ
CPU
٥ 対象とするCPUはARM1136(ARMv6)
٥ ユーザモード・特権モードの二つの動作モードを持つ
٥ 特権モードはさらに以下のような6つのプロセッサ
モードを持つ
٥ アボート、未定義、FIQ、IRQ、スーパーバイザ
(この5種類を例外モードと呼ぶ)
٥ システム
٥ R0-15、CPSR、SPSR(例外モードのみ)のレジスタ
を持つ
٥ 各例外モードはバンクレジスタを持つ
レジスタの構成
CPU仮想化
٥ VMMを特権モード、ゲストカーネル・アプリケーションをユーザ
モードで動作させる
٥ 各VM毎に仮想的なマシン状態を維持し、その状態に応じた処
理を行う必要がある
٥ CPU、メモリ、割り込みコントローラ等
٥ そのためにセンシティブ命令を確実に検知し、その動作をエ
ミュレーションしなければならない
٥ センシティブ命令はマシン状態を変更したり、マシン状態によって動作
が変わる命令
٥ ゲストカーネルがマシン状態を変更しようとした場合は、VMMが同様に
仮想マシン状態を変更する
٥ ゲストカーネルが特権モードとユーザモードで動作が変化するような命
令を実行した場合、VMMがその動作をエミュレーションし結果を返す
ARMにおけるセンシティブ命令
٥ 4種類のセンシティブ命令
٥ MSR・MRS命令
٥ CPSR・SPSRレジスタの操作を行う
٥ SPSRがCPSRへコピーされる可能性がある命令
٥ R15をデスティネーションレジスタとする算術命令・論理命令・LDM(3)
٥ MCR・MRC命令
٥ コプロセッサのレジスタへの操作を行う
٥ ユーザモードレジスタにアクセスする命令
٥ LDM(2)、STM(2)
センシティブ命令実行時の動作
(マニュアルにおける記述)
٥ MSR・MRS命令
٥ CPSRの特権ビット(割り込み制御ビット・モードビット)への操作は無視
٥ SPSRへの操作は予測不能
٥ SPSRがCPSRへコピーされる可能性がある命令
٥ 予測不能
٥ MCR・MRC命令
٥ v5までは全て未定義例外が発生
٥ v6以降は一部の操作に限りユーザモードで実行可能
٥ ユーザモードレジスタにアクセスする命令
٥ 予測不能
センシティブ命令実行時の動作
(N810での実験結果)
٥ 発生した例外を特定できるようにカーネルを修正し、N810で
実際に予測不能とされるセンシティブ命令を実行して動作を
確認した
٥ MSR・MRS命令によるSPSRへの操作
٥ 例外は発生しない
٥ SPSRがCPSRへコピーされる可能性がある命令
٥ 例外は発生しない
٥ ユーザモードレジスタにアクセスする命令
٥ 例外は発生しない
センシティブ命令のエミュレーション
٥ 予測不能なセンシティブ命令はプラットフォーム
依存の可能性も考えられる
٥ そのため全てのセンシティブ命令を動的に例外
が発生する命令に書き換える
٥ その後、例外ハンドラにおいてエミュレーションコード
を実行
センシティブ命令の処理
٥ カーネルモード実行時のみ仮想PCから1ブロックの命令を読
み込み、解析を行う
٥ ブロックは条件分岐命令までの区間、もしくは一定最大区間
٥ 該当するセンシティブ命令を検知し、SWI命令に書き換える
٥ 各センシティブ命令に対して、SWI命令の下位24ビットの値を設定
٥ Linux(OABI)では下位24ビットが”0x900000+システムコール番号”
と設定されるのでその範囲は使用しない
٥ Linux(EABI)では下位24ビットは常に0であり使用されない
٥ ゲストカーネルを実行させ、ソフトウェア割り込みが発生する
と下位24ビットの値から対応するエミュレーション処理を判
断・実行する
٥ 後の例外処理の部分でモード変更を例として具体的に説明
します
時計
٥ ゲストOSに仮想タイマ割り込みを発生させる
٥ 時刻の補正にCCNT(サイクルカウンタ)が使
用されるのでそのエミュレーションを行う
٥ タイマ割り込みハンドラの縮退によるずれ
٥ VMMがCCNTの値を取得し、それをゲスト
OSに返す
٥ CCNTは特権命令であるMCR命令により値を取
得するため
VMスケジューリング
٥ RTOSを同時に動作させる場合はリアルタイ
ム性を考慮する必要がある
٥ 割り込みが発生した場合、直ちにRTOSが動
作するVMに実CPUを割り当てる
٥ 汎用OSはRTOSがアイドル状態になった場
合にのみ実CPUを割り当て実行させる
٥ アイドル状態の判定はWFIモードへの移行を検
知して行う
例外・割り込み
٥ 例外・割り込みが発生すると自動的に各例外モードにプロ
セッサモードが変更
٥ レジスタも各例外モードのバンクレジスタに切り替わる
٥ LR_bankには”例外が発生した命令+4もしくは+8”が代入
٥ SPSR_bankには例外発生前のCPSRが代入
٥ 各例外ベクタから実行が開始される
٥ 例外ベクタは0x00000000~0x00000020
٥ HIVECSを有効にしている場合は0xFFFF0000~0xFFFF0020
٥ 通常ハンドラ実行後、PCをRdとしたMOVSやSUBS等の命
令で復帰(SPSR_bankがCPSRにコピーされる)
例外ベクタ
例外処理の流れ
٥ SP_usr、LR_usrをVSP_svc、VLR_svcもしくはVSP_usr、
VLR_usrに保存
٥ SPSRをVSPSR_bankに保存
٥ CPSRをVCPSR、SPSRにコピー
٥ ゲストの例外ハンドラの開始アドレスから1ブロック読み込み
解析・センシティブ命令の書き換え
٥ VSP_bankをSPにロード
٥ ユーザモードにモード変更し仮想例外を発生させる
٥ SPSRをユーザモードに更新し、ゲストの仮想ベクタアドレスをPCに
ロード
例外処理の例(データアボート)
ゲストアプリケーションがデータアボートが発生するような命令を実行
ゲストアプリケーション
ゲストカーネル
VMM
例外処理の例(データアボート)
ゲストアプリケーション
ゲストカーネル
VMM
データアボート例外発生
SP、LR、SPSRがバンクレジスタに切り替わる
SP_usr、LR_usrをVSP_usr、VLR_usrに保存
SPSRをVSPSR_abtに保存
CPSRをVCPSR、SPSRにコピー
データアボートのハンドラ開始アドレスから命令を1ブロック読み込み
センシティブ命令の解析・書き換え
SPにVSP_abtをセット
SPSRをユーザモードに更新し、ゲストのハンドラをロード
例外処理の例(データアボート)
ゲストアプリケーション
仮想データアボート例外発生
データアボートのハンドラを実行
普通ユーザモードのレジスタの保存等をしてスーパーバイザモードに移行
(本当のLinuxのハンドラコードは違いますが、ここではMSR命令でモードフラグを変更し移行したとする)
ゲストカーネル
VMM
例外処理の例(データアボート)
ゲストアプリケーション
ゲストカーネル
VMM
ソフトウェア割り込み発生(センシティブ命令エミュレーション)
SP、LR、SPSRがバンクレジスタに切り替わる
SP_usr、LR_usrをVSP_abt、VLR_abtに保存
SPSRをVCPSRにコピーし、VCPSRをスーパーバイザモードに更新
LRを保存
SP、LRにVSP_svc、VLR_svcをセット
保存したLRをPCにセット(SPSRがCPSRにコピーされる命令で)
例外処理の例(データアボート)
ゲストアプリケーション
データアボートのハンドラを実行終了
ユーザモードへ移行(ここでは ”SUBS PC,LR,#4”実行したとする)
ゲストカーネル
VMM
例外処理の例(データアボート)
ゲストアプリケーション
ゲストカーネル
VMM
ソフトウェア割り込み発生(センシティブ命令エミュレーション)
SP、LR、SPSRがバンクレジスタに切り替わる
SP_usr、LR_usrをVSP_svc、VLR_svcに保存
VSPSR_svcをVCPSRにコピー
SP、LR、SPSRにVSP_usr、VLR_usr、VSPSR_svcをセット
VLR_svc-4をPCにセット(SPSRがCPSRにコピーされる命令で)
例外処理の例(データアボート)
ゲストアプリケーションが実行を再開
ゲストアプリケーション
ゲストカーネル
VMM
割り込みコントローラ
٥ ARMは2種類の割り込みコントローラを提供
٥ Vectored Interrupt Controller(VIC)
٥ Generic Interrupt Controller(GIC)
٥ この2種類以外にも実際のチップ製造メーカーが提
供する独自割り込みコントローラが多数ある
٥ ARM1136ではVICのPL192がサポートされて
おり、そのエミュレーションを行う
PL192
٥ PL192の特徴
٥ 32個の割り込みベクタを持つ
٥ 各割り込みベクタに優先度・マスクを設定可能
٥ ハードウェアで最も優先度の高い割り込みソースのサービスルーチ
ンをロード
٥ 0xFFFFF000(HIVECSが有効な時は0xFFFEF000)をベー
スアドレスとしてメモリにマップ
٥ IRQ・FIQハンドラのアドレスからVICADDRESSに1命令でアクセス
できるようにするため
٥ VICポートを用いる場合はVICADDRESSは使用されないのでレイテ
ンシには影響ない
PL192のレジスタ(1)
PL192のレジスタ(2)
・
・
・
・
・
・
PL192のレジスタ(3)
PL192のエミュレーション
٥ ゲストOSがPL192の仮想レジスタを直接管理
٥ VMMはその仮想レジスタの値を見て、優先度・マス
クから発生させる仮想割り込みを決定する
٥ マルチプロセッサ上だと一時的にこのページをread only
にする、ただシングルプロセッサ上での実装を前提
٥ 仮想VICADDRESSレジスタにサービスルーチンの
アドレスをロード
٥ VEを有効にしている(VICポートを使用)場合はゲストOS
にサービスルーチンアドレスから実行を再開させる
メモリ
٥ 仮想化
٥ シャドウページテーブルを用いる
٥ ページアロケータによって物理ページの割り当て・回収
٥ 保護
٥ ゲストカーネル・アプリケーションが同じユーザモードで動
作するため、動作モードによる保護ができない
٥ ARMのドメインを用いてゲストカーネル・アプリケーション
の保護を行う
シャドウページテーブル
٥ シャドウページテーブルの2通りの管理方式
٥ 1つのシャドウページテーブルを用いる
٥ ゲストページテーブルが切り替わる度にシャドウページテーブルをフラッシュ
٥ 管理が簡単であり実装は容易
٥ シャドウページテーブル更新のコストが非常に大きい
٥ 複数のシャドウページテーブルを用いる
٥ 各ゲストページテーブル毎にシャドウページテーブルを用意
٥ シャドウページテーブルをフラッシュする必要がなく、更新のコストが少ない
٥ 全てのゲストページテーブルにシャドウページテーブルを用意するとメモリ使
用量が非常に多くなる
٥ メモリ使用量を抑えるためには、一定量のメモリを使用するとページテーブ
ルを解放し再利用する必要があり管理が複雑になる
本VMMのシャドウページテーブル
٥ 複数のシャドウページテーブルによる管理
٥ ゲスト切り替えの度にシャドウページテーブルをフラッ
シュするのはあまりにコストが大きい
٥ ARMのTLBはASIDを持つので、各ゲストページテーブ
ルとASIDを対応づければTLBのフラッシュの必要もなく
なる
٥ ただし、組み込みのメモリ量は多くないので、シャドウ
ページテーブルに使用するメモリを一定量に制限する
ドメイン
٥ ARMにはドメインを用いたアクセス制御機構がある
٥ 16個のドメイン
٥ ページテーブル・TLBエントリには所属するドメイン
のフィールドがある
٥ DACRに16個の各ドメインに対してアクセス不可、ク
ライアント、マネージャのいずれかを設定する
٥ クライアントはAPビットによるチェック、マネージャは
常にアクセス許可
ドメインによる保護
D0をVMM、D1をゲストカーネル、D2をゲストアプリケーションとする
D0
D1
D2
VMM
クライアント
マネージャ
マネージャ
ゲストカーネル
クライアント
マネージャ
マネージャ
ゲストアプリケーション
クライアント
アクセス不可
マネージャ
このようにすることでゲストアプリケーションからゲストカーネル
のメモリ領域を保護することができる