仮想機械 温故知新 前田俊行 東京大学米澤研究室.

Slides:



Advertisements
Similar presentations
Linuxを組み込んだマイコンによる 遠隔監視システムの開発
Advertisements

Virtual Editionのご紹介 2012年12月12日.
ファイルキャッシュを考慮したディスク監視のオフロード
Ibaraki Univ. Dept of Electrical & Electronic Eng.
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
オペレーティングシステム i386アーキテクチャ(3)
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
Docker.
Virtual Editionのご紹介 (株)ネットジャパン 法人営業部 2012年7月18日 1.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
5.チューリングマシンと計算.
5.チューリングマシンと計算.
オペレーティングシステムJ/K 2004年10月7日
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
App. A アセンブラ、リンカ、 SPIMシミュレータ
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
プログラムはなぜ動くのか.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
オペレーティングシステム i386アーキテクチャ(2)
全体ミーティング 2009/6/24 D3 西川 賀樹.
メモリ管理 4.3, 4.4 章 さだ.
アスペクト指向プログラミングを用いたIDSオフロード
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
Virtual Editionのご紹介 2012年7月26日.
型付きアセンブリ言語を用いた安全なカーネル拡張
AMD64の仮想化技術を利用した 仮想マシンモニタの実装
全体ミーティング 金田憲二.
“Survey of System Virtualization Techniques” by Robert Rose のまとめ
KVMにおける仮想マシンの 内部監視機構の実装と性能評価
VMのメモリ暗号化によるクラウド管理者への情報漏洩の防止
VMのメモリ暗号化による クラウド管理者への情報漏洩の防止
リモートホストの異常を検知するための GPUとの直接通信機構
オペレーティングシステム イントロダクション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
アルゴリズムとデータ構造 補足資料4-1 「メモリと配列」
A Provably Sound TAL for Back-end Optimization について
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
Intel SGXを用いた仮想マシンの 安全な監視機構
軽量な仮想マシンを用いたIoT機器の安全な監視
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
オペレーティングシステム i386アーキテクチャ(1)
Virtualizing a Multiprocessor Machine on a Network of Computers
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータアーキテクチャ 第 9 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
実装について 前田俊行.
5.チューリングマシンと計算.
米澤研究室 全体ミーティング 2010/07/07 M2 渡邊裕貴.
Mondriaan Memory Protection の調査
コンピュータアーキテクチャ 第 5 回.
卒業研究 JCSPを用いたプログラム開発  池部理奈.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 5 回.
SMP/マルチコアに対応した 型付きアセンブリ言語
アルゴリズムとデータ構造 2010年6月17日
L4-Linux のメモリ管理における問題点とその解決策
Ibaraki Univ. Dept of Electrical & Electronic Eng.
1.2 言語処理の諸観点 (1)言語処理の利用分野
Presentation transcript:

仮想機械 温故知新 前田俊行 東京大学米澤研究室

目次 論文 “Architecture of Virtual Machines” の紹介 論文 “Formal requirements for Virtualizable Third Generation Architectures” の紹介 IBM VM/370 の紹介(中間報告)

今回扱う “VM” ハードウェアインターフェイスを 仮想化するタイプの VM

Architecture of Virtual Machines Robert P. Goldberg In Proceedings of the workshop on virtual computer systems 74-112 (1973)

この論文の要点 VM システムのアーキテクチャモデルを提案 新しい VM システムの実装方法を提案 2つのマッピング φ-マップと f -マップ 新しい VM システムの実装方法を提案 Hardware Virtualizer VM を効率良く実装可能 再帰的 VM も効率良く実現できる

φ-マップ φ-マップ OSインターフェイスから ハードウェアインターフェイスへのマップ 例 ユーザプログラム OS ハードウェア 仮想メモリ → 物理メモリ スレッド → 物理CPU ファイル → 物理ディスク φ-マップ ユーザプログラム OS ハードウェア

f -マップ f -マップ ハードウェアインターフェイスから ハードウェアインターフェイスへのマップ 例: OS VMM ハードウェア VMの物理 CPU → 物理 CPU VMの物理ディスク → 物理ディスク f -マップ OS VMM ハードウェア

2つのマップによる VM システムの表現 通常の VM システム φ f ユーザプログラム OS VMM ハードウェア

2つのマップによる VM システムの表現 φ f f f f 再帰的 VM システム ユーザプログラム OS VMM VMM VMM VMM ハードウェア

形式的定義: プロセス名とリソース名 プロセス名 p: OSインターフェイスを抽象化したもの (例) 仮想メモリのアドレス、仮想CPUのレジスタ、 ファイルシステムのファイル名とファイルポインタの組等 リソース名 r: ハードウェアインターフェイスを 抽象化したもの (例) 物理メモリのアドレス、物理CPUのレジスタ、 物理ディスクのアドレス等

形式的定義: φ-マップ φは部分関数で φ: P → R ここで P はプロセス名 p の集合 P = { p0, p1, …, pj } また R はリソース名 r の集合 R = { r0, r1, …, rn }

形式的定義: f -マップ f は部分関数で f: R1 → R2 ここで R1、R2 は それぞれリソース名 r の集合

φと f による VM システムの表現 f φ: P → R2 f4 f3 f2 f1 φ: P → R5 通常の VM システム

φと f による VM システムの表現 φ f ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2, rr1 p2 rv2 rr2 p3 rv3 ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2,     p3 → rv3 } f = { rv1 → rr2,     rv2 → rr1 } のとき、ユーザプログラムが p1 にアクセスすると、 OS と VMM により、 φ(f(p1)) = rr1 へのアクセスに 変換される

未定義のプロセス名、リソース名の扱い あるφ-マップ、f-マップで未定義の プロセス名やリソース名が利用されたら、 そのφ-マップ、f-マップを実装するOS、VMM に 適当な処理をさせなければならない

未定義のプロセス名、リソース名の扱い φ f ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2, rr1 p2 rv2 rr2 p3 rv3 ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2,     p3 → rv3 } f = { rv1 → rr2,     rv2 → rr1 } のとき、ユーザプログラムが p2 にアクセスしたら、 例外を発生させ OS に処理させなければならない

未定義のプロセス名、リソース名の扱い φ f ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2, rr1 p2 rv2 rr2 p3 rv3 ユーザプログラム OS VMM ハードウェア (例) φ= { p1 → rv2,     p3 → rv3 } f = { rv1 → rr2,     rv2 → rr1 } のとき、ユーザプログラムが p3 にアクセスしたら、 例外を発生させ VMM に処理させなければならない

モデルから見た VM システム実装 φ の実装 f の実装 φや f の合成 再帰的 VM CP-67 ハードウェア ソフトウェア 不可能 VMware Bochs 可能

注 モデルから見た VM システム実装 φ の実装 f の実装 φや f の合成 再帰的 VM CP-67 ハードウェア ソフトウェア 不可能 VMware Bochs 可能 注 φと f の合成が ソフトウェアで行われていても その合成結果 (φ’= f φ) は ハードウェアで実装できる

モデルから見た VM システム実装 φ の実装 f の実装 φや f の合成 再帰的 VM Hardware Virtualizer ハードウェア 可能 CP-67 ソフトウェア 不可能 VMware Bochs

Hardware Virtualizer φ-マップや f -マップの合成を ハードウェアでサポートするという VM システムアーキテクチャ 実際に実装されたかは不明 特許は取られている 米国特許4253145 (出願1978年: もう期限切れ?)

Hardware Virtualizer の 構成要素 VMID レジスタ 現在どの VM を実行中かを表す マップ合成機構 Φや f を合成するハードウェア機構 例外振分け機構 例外や割込を正しい OS、VMM に届けるための ハードウェア機構

Formal Requirements for Virtualizable Third Generation Architecture Gerald J. Popek Robert P. Goldberg In Communications of the ACM 17(7): 412-421 (1974)

この論文の要点 VM を実現するために 第三世代アーキテクチャが 満たすべき十分条件を 形式的に示した 条件: sensitive 命令 ⊆ privileged 命令 第三世代アーキテクチャ ここでは特権レベル機構や仮想メモリ機構のある アーキテクチャのことをいう

形式的定義 マシン状態: S S = ( E, M, P, R ) E : メモリ M: 実行モード P : プログラムカウンタ

形式的定義 メモリ: E E = サイズ q の配列

形式的定義 実行モード: M M = s または u s : supervisor モード u : user モード

形式的定義 プログラムカウンタ: P P = メモリアドレス (配列 E のインデックス)

形式的定義 セグメントレジスタ: R R = (Base, Size) Base: セグメントのベースアドレス

マシン状態の例 S = ( [ 4, 5, 1, halt ], s, 2, (1, 3) ) マシンが上のような状態 S にあるとき、 そのマシンは supervisor モードで実行中で、 かつ、halt 命令を実行しようとしている pc = 2 だが、R = (1, 3) なので、 実行される命令は E(2+1) = E(3) = halt である

形式的定義 命令: i i は関数で i : C → C C : S の有限集合

形式的定義: Trap i (E1, M1, P1, R1) = (E2, M2, P2, R2) 命令 i は次の条件を満たすとき “Trap する”という i (E1, M1, P1, R1) = (E2, M2, P2, R2) ただし E2[k] = E1[k], for 0 < k < q E2[0] = ( M1, P1, R1) ( M2, P2, R2) = E1[1] つまり、命令実行前の (M, P, R) が E[0] にセーブされ、 命令実行後の (M, P, R) が E[1] からロードされるようなとき

形式的定義: Memory Trap Trap する命令 i は次の条件を満たすとき “Memory Trap する”という S = ( E, M, P, (Base, Size) ) において 命令 i のアクセスするアドレス a が Size < a (セグメントサイズオーバー) または q < Base + a (メモリサイズオーバー) を満たす

形式的定義 Privileged S1= (E, s, P, R) S2= (E, u, P, R) i(S1) は Trap しない 命令 i は以下の条件を満たすとき Privileged であるという 任意の S1= (E, s, P, R) S2= (E, u, P, R) ただし、i(S1)もi(S2)も Memory Trap しない において i(S1) は Trap しない i(S2) は Trap する つまり、user モードで実行すると Trap する命令

形式的定義 Control Sensitive 命令 i は以下の条件を満たすとき Control Sensitive であるという ある S1= (E1, M1, P1, R1) i(S1)= S2= (E2, M2, P2, R2) ただし、i(S1)は Memory Trap しない において M1≠M2 and/or R1≠R2 つまり、命令実行後に、例外が生じることなく メモリマッピングが変わったり実行モードが変わったりすること

Control Sensitive な命令の例 仮に IA-32 で例えるならば int 命令 (ソフトウェア割込命令) 実行後に実行モード (= M) が変わる場合がある mov 命令 (メモリ操作命令) ページテーブル、GDT、LDT等へのメモリ操作は R を変更することと対応する など 注: ここでの抽象化モデルと IA-32 は必ずしも一致しないので ここで挙げた例は、定義に厳密に基づいたものではない

形式的定義 Behavior Sensitive 命令 i は以下の条件を満たすとき Behavior Sensitive であるという R = (b, s) のとき R+x = (b + x, s) ある S1= (E1, M1, P, R) S2= (E2, M2, P, R+x) ただし、i(S1)も i(S2)も Memory Trap せず i(S1) = (E’1, M1, P1, R) i(S2) = (E’2, M2, P2, R+x) E1|R = E2|R+x E1| (b,s) = E2| (b,s) +x ⇔ 0≦ k < s なる k で E1[b+k] = E2[b+x+k] において E’1|R≠E’2|R+x and/or P1≠P2 つまり、命令実行の結果が、例外を生じることなく メモリマッピングや実行モードによって異なること

Behavior Sensitive な命令の例 仮に IA-32 で例えるならば sgdt 命令 (GDTレジスタ読出命令) GDT レジスタ (= R に対応) の値によって結果が異なる push 命令 (メモリ操作命令) push CS の実行結果が実行モード (= M) によって異なる など 注: ここでの抽象化モデルと IA-32 は必ずしも一致しないので ここで挙げた例は、定義に厳密に基づいたものではない

形式的定義 Sensitive 命令 i は Control Sensitive または Beharior Sensitive であるとき Sensitive であるという

定理 1 { i | i は Sensitive } ⊆ { i | i は Privileged } あるアーキテクチャが 以下の条件を満たすとき そのアーキテクチャは仮想化可能である { i | i は Sensitive } ⊆ { i | i は Privileged } この条件を満たすアーキテクチャ上では、 ゲスト OS を user モードで実行すれば仮想化できる

定理 2 あるアーキテクチャが 仮想化可能であるとき そのアーキテクチャは 再帰的仮想化可能である 再帰的仮想化 = VM の上に VM を実現すること

定理1 と IA-32 IA-32 には Sensitive であるが Privileged でない命令が存在するので IA-32 は条件を満たさない Sensitive であるが Privileged でない命令 mov 命令、sgdt 命令、push 命令など

ハイブリッド仮想化 Supervisor モードでは 命令をハードウェアで実行せずに インタプリタで実行する仮想化の方式 純粋な仮想化よりも アーキテクチャが満たすべき条件は緩い

形式的定義 User Sensitive S = (E, u, P, R) i が Sensitive 命令 i は以下の条件を満たすとき User Sensitive であるという S = (E, u, P, R) において i が Sensitive つまり、user モードで実行されたとき Sensitive となる命令

定理 3 { i | i は User Sensitive } ⊆ { i | i は Privileged } あるアーキテクチャが 以下の条件を満たすとき そのアーキテクチャは ハイブリッド仮想化可能である { i | i は User Sensitive } ⊆ { i | i は Privileged } この条件を満たすアーキテクチャ上では、 ゲスト OS を インタプリタ実行すれば仮想化できる

定理3 と IA-32 IA-32 には User Sensitive であるが Privileged でない命令が存在するので IA-32 は条件を満たさない User Sensitive であるが Privileged でない命令 mov 命令、sgdt 命令など

VMware はどうしているか ハイブリッド仮想化 ただし user モードで実行されるプログラムは 正しいハードウェアが見えない (例) sgdt 命令の結果は VM の GDT レジスタではなく 本物の GDT レジスタの値となる user モードプログラムが GDT を直接操作できるような OS が あったら、その OS は正しく動作しないであろう

VMware はどうしているか ハイブリッド仮想化 ページテーブルへのメモリ操作は、 IA-32 の仕様上 mov CR3 命令が実行されるまで その操作が CPU に反映されないと見なせるので 問題はない Mov CR3 は Privileged 命令、 すなわちインタプリタ実行される そもそも user モードプログラムがページテーブルを 直接操作できるような OS でなければこの問題は存在しない なぜならページテーブルの操作 = Privileged 命令 と見なせるから

IBM VM/370 中間報告

IBM の汎用計算機の歴史 System 360 (1964) Solid Logic による実装 System 370 (1970) IC による実装 System 390 (1990) いわゆる「メインフレーム」 基本的なアーキテクチャは ほとんど変わっていない CISC、セグメント + ページング

IBM の VM の歴史 CP-67 (1966) VM/370 (1972) z/VM 5.1 (2004) VM/370 の新バージョンのデバッグは VM/370 の古いバージョン上で行われたらしい z/VM 5.1 (2004)

VM/370 のアーキテクチャ CMS DOS/360 OS/360 MVS OS CP (= Control Program) VMM System/370

VM/370 の特徴 2つの仮想化モード V=R モード V=V モード システムに1つだけ存在できる V=V モード VM の物理アドレスは本物の物理アドレスとは 関係なく、ページテーブルによって対応づけるモード いくつでも存在できる (これは S/390 上でのことだが、Linux を V=V モードで 約40000 も同時に実行した人もいるらしい)

続く… 現在までにまだ調べ終えていないこと VM/370 が本当に再帰的仮想化可能か? VM-Assist とは何か? など System/370、VM/370 には VM-Assist という VMM 実装を支援する ハードウェア機構があるらしい など

予備スライド

Hardware Virtualizer による 再帰的 VM システムの例 4 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 これらが f を表す ここでは簡単のため f は セグメントマップ = (オフセット, サイズ)とする

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 これがφを表す ここでは簡単のためφも f 同様 セグメントマップ = (オフセット, サイズ)とする

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 今、プロセス P1 が VM1.1 上で 動作しているとする このとき LMID レジスタ は 1.1 という値をとっている

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 もしこのプロセス P1 が アドレス 0 にアクセスすると… (例: load 0)

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 まずマップ合成機構は φを見に行く φ(0) = 2

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 次にマップ合成機構は VMID = 1.1 なので VM1 の f の VM1 を見に行く f1(2) = 7 そして仮の VMID を 1 とする

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 最後にマップ合成機構は 仮のVMID = 1 なのでオリジナルの f のVM1を見に行く f (7) = 11

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 もしこのプロセス P1 が アドレス 3 にアクセスすると… (例: load 3)

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 1 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 まずマップ合成機構は φを見に行くが、 φ(3) = 未定義 (セグメントサイズを超えている) よって VM1.1 で実行中の OS にセグメント例外を投げる

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 5 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 もしφのセグメントサイズが VM1.1 のサイズをこのように超えているとき プロセス P1 がアドレス 3にアクセスすると…

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 5 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 まずマップ合成機構は φを見に行く φ(3) = 5

Hardware Virtualizer による 再帰的 VM システムの例 4 9 12 17 P1: 2, 5 VM1: 4, 8 VM1: 5, 3 VM2: 12, 5 物理メモリ空間 プロセスP1 次にマップ合成機構は VMID = 1.1 なので VM1 の f の VM1 を見に行くが f1(5) = 未定義 (セグメントサイズを超えている) よって VM1 にセグメント例外を投げる