基盤ソフトウェア 5/1

今日はGW企画ということで課題を出す
仮想機械の一般的な実装方法をいくつか示し、
その利害損失を簡単に述べよ
400字から1000字
締め切りは2週間後くらい
http://www.csg.is.titech.ac.jp/~chiba/lecture/cur/kiban/vmm.html

--

タブレットPCを使っていて持ち歩きながら授業をするのだけど
揺れを感知してディスクが止まってしまう
しばらく待たなければならない
これは欠陥商品なのではないか

IBMのソフトウェア研究所に話に行ったことがあるが
授業でタブレットPC使っていると言ったら
使ってる人をはじめて見ましたと言われた

--

先週の復習

VMとmulti taskingの違い
 プログラムを切り替えるのは一緒
 タイマー割り込みを使ってごちゃごちゃごちゃ

 違うのは特権命令(privileged instruction)
 自分で自分の足を撃つ
 そこだけ特別な扱いをしてやらなければならない
 特権命令を使おうとすると割り込みがかかるのでごちゃごちゃごちゃ

Software emulation

while((c = readNextInstruction())!=Empty){
  switch(c){
  case MOV:
    /* do MOV instruction */
    break;
  case JMPL:
    /* do jump */
    break;
     :
     :
  }
}

こういうプログラムを書いてアセンブリの命令を一つずつ実行する
こうやって実行するのがいわゆるソフトウェアエミュレーション
特権命令だけはこういうことをやっている
こうやってやるから遅くなる
基本の作り方

--

今日のお題
VMのアーキテクチャ(これをまとめよ)

(1)
         | Guestプロセス|…|…|
         |--------------------|
         | Guest OS           |
         |--------------------|
プロセス | VMM                |
---------+-----------------+  |
       Host OS             |  |<-VMMの一部

VMM: virtual machine monitor

これの特徴はVMは普通のOSの上に乗っかっている
製品としては VMware, Parallelsm, ...
カーネルの中に一部手を入れる

(2)
| Guest  |    | Guest  |     |
|プロセス|…  |プロセス|…   |
|-------------+--------------|
| Guest OS    | Guest OS     |
|-------------+--------------|
|         VMM                |

OSを全部入れなおさなければならないので面倒
売りにくい

製品としては Xen, VMwareの高そうなやつ

(3) EmbeddedIT
セキュリティのためにVMのテクノロジーを使う
OSが乗っ取られておかしなことをされないように
VMMがチェックする

| プロセス|…|…|
|----------------------------|
| Host OS                    |
|                    +-------|
|                    |   VMM |

--

(1)の利点
インストールが簡単
easy to implement

hostOSが残ると何が良いか
・I/OをhostOSに頼める(デバイスドライバの再利用)

VMMの他にVMappというものも動いている

GuestOSがI/O(特権命令)を実行
↓
でも実行できないので割り込みが発生する
↓
HostOSのカーネルに行く
↓シグナル
トラップしてVMMが動く
↓プロセス間通信 ソケットとか
VMApp
↓I/O依頼 通常のシステムコール
HostOS

こうやってHostOSが実行するという仕組みになっている
なんでこんなことをするのか

チップやHDDのためにデバイスドライバをインストールしなければいけない
何かハードウェアを買ってきたらインストール
デバイスドライバはOSの一部
OSは全てのハードウェアを一元的に判断する
どんなハードウェアか知っていなければならない

Windowsがクラッシュするかなりの原因は
MSが作っていないデバイスドライバのせいだという話がある

ハードウェアメーカーにしてみればデバイスドライバはおまけみたいなもの
つい外注に頼んだり
でもOSの一部だから相当しっかりしていないとまずい

MSの承認していないデバイスドライバをインストールしようとすると
一応確認が出るようになった
でも迷わずYesと押すもの
これは危ない
しかしハードメーカーにとってみれば
おまけを添付するのにMSの承認をとってデジタル署名を入れるのは面倒

(1)番みたいなアーキテクチャを採ると
VMM自体はデバイスドライバを持つ必要が無く
HostOSのデバイスドライバが使える
再利用が嬉しい
ただし遅い
いったんVMAppに飛ばすから結構遠回りをしている

知らないうちにこっそいrインストールしているもの
デバイスドライバの他に、カーネルモジュール
OSの中に組み込まれて使うプログラムを一部インストールすることがある
Linuxの用語ではカーネルモジュール
この手のソフトウェアをインストールをするとOSが不安定になったりするのはそのせい

特に
HostOS→VMMの伝達を早くする
割り込みがかかったら即VMMに伝達する
複数の割り込みを統合するということもやっている

例えばネットワークパケット2つ
大きなデータに連結してVMMに送る
細かい工夫を積み上げることでスケールダウンを抑える

プロセス間通信の統合
 例 2回を1回に
WindowsNT(XP, Vista, 2000…)

| Win32API|         |プロセス |
|---↑------------------↓----|
|       micro kernel          |

microkernelのインターフェースが良く変わる
でもWin32APIというある種の仮想的なAPIは変わらない
カーネルはAPIへの翻訳をするアーキテクチャになっている
Linux(POSIX)のふりをさせることもできる
しかし今はもう跡形もない…?
Mac OS Xには残っている
FreeBSDもうごく
昔のMac OSのシステムコールを翻訳するcocoaとか云々
FreeBSDのカーネルを元にしているわけではなく
FreeBSDのシステムコールを翻訳するシステムがある

とにかく
デバイスドライバが再利用ができてよいが遅い
それをカバーするためにいろいろなテクニックが使われている

--

(2)番の利点
(1)の裏返し

VMMがデバイスドライバを用意するという欠点がある
VMM用のデバイスドライバがないといけない
ハードウェアがかなり制限される
頑張っていろいろな種類のデバイスドライバを用意すればいいのだけど
ちょっと辛い

ただし性能的には良い可能性が高い たぶん
割り込まれたらすぐにVMMから呼び出せる

スケジューリングの性能が良い 工夫しやすい
全部VMMが押さえているため

(1)の場合はVMMがユーザプロセスになっていて
スケジューリングはHostOSに任せている
何かのはずみで他のプロセスの優先度が上がってしまうと
VMMもVMAppも動かなくなってしまう
正確に言うとHostOSが用意しているスケジューリングしか対応できない
HostOSは普通のOSなので特殊なスケジューリングには対応していないことが多い
VMMのプライオリティを最高にすることくらいはできるけど…
必ず10%動かすとか細かい制御はできない

(2)番はVMMのレベルでリアルタイムスケジューリングをやれば
あるGuestOSは必ず80%動かすとか細かくコントロールできる

(2)'
2番の亜流にXenというオープンソースのアーキテクチャがある

| Domain0 |       | DomainU  |
| Guest OS|       | Guest OS |
|--↓--↑-------------↓-----|
|         VMM                |
throughする

2番のアーキテクチャを採っていながら
デバイスドライバはやっぱり再利用したいので
I/Oなんかに対しては1番ぽいアーキテクチャにしている

--

(3)まさにthroughするアーキテクチャ

HostOSとVMMの間にデバイスドライバがある

USBメモリを無効化する
例えば
大手のショッピングモールサイトを下請けに出したりする
下請けが更に派遣を使って
その人があまり忠誠心のないひとで
USBメモリでデータを盗んでやめてしまう
そのデータを然るべきルートで売る

みなさん絶対やらないでください

そういう悪い人がいるのでプロテクトする必要がある
フルスペックのVMはいらない
殆どはスルーする
USBメモリにアクセスしたときだけトラップする

イントラネットワークにはつながるけど
外部にはつながらないなど

完璧に実用化されたレヴェルは少ない
今はUSBメモリはデバイスドライバで対応している

ある会社で講演しようとしようとして
そこにあったパソコンにUSBメモリからpptを読み出して、
ミスがあったので修正して、USBメモリに書き込もうとしたらだめだった

こういう話を適当にまとめてレポートにしてください