全体ミーティング 2009/6/24
DESCRIPTION
全体ミーティング 2009/6/24. D3 西川 賀樹. 発表内容. 現在行っている研究について 研究テーマは完全仮想化による ARM 向け仮想マシンモニタの設計と実装. 研究の背景. 携帯端末等のモバイル機器における性能の向上 多くの機器がネットワーク接続も可能となり、高機能化・多様化が進んでいる モバイル機器へ汎用 OS が導入されるようになってきている 単純な RTOS では多様なアプリケーションに対応できない 汎用 OS を用いることにより、汎用計算機で用いられている既存アプリケーションの移植が容易になる しかしこれにより起こりうる問題も考えられる. - PowerPoint PPT PresentationTRANSCRIPT
全体ミーティング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 をユーザモードに更新し、ゲストのハンドラをロード
ゲストアプリケーション
例外処理の例(データアボート)
VMM
ゲストカーネル
仮想データアボート例外発生データアボートのハンドラを実行普通ユーザモードのレジスタの保存等をしてスーパーバイザモードに移行(本当の Linux のハンドラコードは違いますが、ここでは MSR 命令でモードフラグを変更し移行したとする)
ゲストアプリケーション
例外処理の例(データアボート)
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 にコピーされる命令で)
ゲストアプリケーション
例外処理の例(データアボート)
VMM
ゲストカーネル
データアボートのハンドラを実行終了ユーザモードへ移行(ここでは ” SUBS PC,LR,#4” 実行したとする)
ゲストアプリケーション
例外処理の例(データアボート)
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
٥ PL 192 の特徴٥ 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 クライアント マネージャ マネージャ
ゲストカーネル クライアント マネージャ マネージャ
ゲストアプリケーション クライアント アクセス不可 マネージャ
このようにすることでゲストアプリケーションからゲストカーネル
のメモリ領域を保護することができる