390 likes | 556 Views
全体ミーティング 2009/6/24. D3 西川 賀樹. 発表内容. 現在行っている研究について 研究テーマは完全仮想化による ARM 向け仮想マシンモニタの設計と実装. 研究の背景. 携帯端末等のモバイル機器における性能の向上 多くの機器がネットワーク接続も可能となり、高機能化・多様化が進んでいる モバイル機器へ汎用 OS が導入されるようになってきている 単純な RTOS では多様なアプリケーションに対応できない 汎用 OS を用いることにより、汎用計算機で用いられている既存アプリケーションの移植が容易になる しかしこれにより起こりうる問題も考えられる.
E N D
全体ミーティング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での実験結果) • 発生した例外を特定できるようにカーネルを修正し、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のレジスタ(2) ・・・ ・・・
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をゲストアプリケーションとする このようにすることでゲストアプリケーションからゲストカーネル のメモリ領域を保護することができる