IPA


IPAトップ





2005年度未踏ソフトウェア創造事業(未踏ユース)  採択案件評価書


 



1.担当PM


 竹内 郁雄   (東京大学大学院教授)



2.採択者氏名


 代表者

高橋 一志(金沢工業大 学 工学部情報工学科)

共同開発者

なし



3.プロジェクト管理組織


 株式会社創夢


  4.委託支払金額


 3,000,000円



5.テーマ名


 低レベルVMを利用した,ハードウェ ア仮想化技術の開発.



6.関連Webサイト


 なし



7.プロジェクト概要

 ネットワークが高速 化している今,リモートの計算機に接続されているデバイスを,ローカルの計算機から利用することが一部可能になっている.しかし,こういったサービスを実 現するソフトウェアは,OSごとに異なるデバイスアクセスモデルに強く依存するものとなっており,異種OS間でのネットワークを介したデバイスの相互利用 は,たとえ同じアーキテクチャであっても不自由なことが多く,また一般的ではない.特定のOS上で動くサービスという形をとる以上,この問題の根本的解決 は難しい.
 そこで本プロジェクトは,OSとハードウェアの中間層に,VM (Virtual Machine) のレイヤを挿入することにより,OSとハードウェアの結びつき緩和させ,ネットワークを介して,異なるOS間,異なるホスト間でのデバイス操作・運用を可 能にするソフトウェアを開発することを目的とする.

 具体的開発項目は以下の通りである.

(1) ブート部分の開発
 ここで開発するVMソフトウェアはBIOSの上層,かつOSの下層に属する特殊なソフトウェアのため,これを主記憶にロードさせるためのブートストラッ プ部を作成する.

(2) VMの実装・設計
 OSの仮想化にあたり,ハードウェアエミュレーションの要となるVM部分の開発を行なう.

(3) 各種デバイスドライバの設計
 NIC (NE2000互換),ATA/ATAPI,ISA (PCI) のデバイスドライバの開発に当たっての仕様の調査を行なう.

(4) 各種デバイスドライバの開発
 NIC (NE2000互換),ATA/ATAPI,ISA (PCI) のデバイスドライバの実装,およびテストを行なう.

(5) ネットワークを通しての,ハードウェア共有システムの開発とテスト
 部品単位で製作してきた各種モジュールを一つのプログラムにまとめる.

(6) ユーザインタフェースの作成
 コンソールを通じたCUIを作成し,完成の後に (可能であれば) GUIベースの実現を目指す.

 



8.採択理由


  19歳という若さであるが,コンピュータ歴の長さは下手な技術者を超えている.いまどきこういう若い人がVirtual Machineのような裏方の技術をシコシコやっていることに驚いた,提案の売りは,低レベルVMを利用して,異種マシンの間でデバイスを仮想的にあたか もそれぞれのマシンのもののように融通しあえるようにすることである.実際にこのようなリモートデバイスのキラーアプリがあるかどうかは未知数だが,とも かくOSレベル以下のコンピュータ技術の仕組みとして面白い.似たような技術開発がほかにないということはないと思うが,しっかりとした独自性も感じられ る.ともかく,まずは挑戦してもらいたい.キラーアプリはその過程から生まれてくるであろう.



9.成果概要

 

本プロジェクトは,IA- 32アーキテクチャ (PC/AT互換機) を対象とし,ネットワークを介して接続された計算機デバイスを,ローカル側の計算機から自由自在に操る技術を開発することを目的としている.ネットワーク を介して利用可能なデバイスを,リモートデバイスと呼ぶ.
 リモートデバイスを他のコンピュータから利用する方法を図2.3.1 VM層の仮想パスを用いたリモートデバイスの制御 に示す.コンピュータAに接続されているリモートデバイスを,コンピュータBから利用するために,まずコンピュータAおよびコンピュータBにそれぞれ本ソ フトウェア (以下VM layerまたは単にVMと呼ぶ) を常駐させる.VMは,OS (VMの上なので,ゲストOSと呼ぶ) の下層に位置する特殊なプログラムであり,あらかじめCPUの状態を適切な状態に設定しておき,OS側が発行するin,out命令および,そのほかのすべ ての特権命令をトラップできるようになっている.
   図2.3.1
  2.3.1 VM 層の仮想パスを用いたリモートデバイ スの制御

 

  コンピュータBのOS がコンピュータAにつながっているデバイスを利用しようとして,in,out命令を発行すると,直ちにCPUの保護機能が働き,VMに制御が移る.VMは レジスタの値を読み出し,レジスタの値,およびCPUの状態を表すデータを独自プロトコルにてカプセル化し,コンピュータAのVMに送信する.データを受 け取ったコンピュータAのVMには,同マシンに接続されているNICにパケットが到達した時点で,割り込みによりOSから制御を奪う.送信されてきたデー タを元に,デバイスにコマンドを発行して,結果をコンピュータBのVMに送り返す,コンピュータBのVMは,送り返された結果を使って,通常のin, outが行われたのと同様にB上のOSを振る舞わせる.このようにして,Ethernet上に仮想的な内部バス,すなわち,仮想バスを作り出すことができ る.なお,VMはPCエミュレータのように動作し,ゲストOSはVMの存在を意識することはない.

 OSに仮想化されたハードウェアを提供するため,IA-32アーキテクチャのエミュレーションを提供するためのプログラムを開発した.現時点では完全な CPUのエミュレーションを提供するには至っていないが,ほとんどのCPU特権命令エミュレーションを実装し終えた.
 CPUエミュレーションの機能を確認するため,ゲストOSとしてDLXLinuxを立ち上げようとした.DLXLinux本体には,再コンパイル等の手 を一切加えずに起動させることを目標としたが,完全な起動には至らなかった.しかしながら大部分の部分の実装は終了しており,DLXLinuxの一部を起 動させることは可能である.図2.3.2にゲストOS (DLXLinux) のブートのスクリーンショット (カーネルスレッドの立上りのところで,まだトラブルが残っている)報告書作成時点 (3月3日) でのDLXLiunxの起動状況を示すスクリーンショットを示す.ゲストOS側の特権命令が,すべてVMの一般保護例外として処理され,VMが適切に命令 解析を行ない,命令のエミュレーションを行なっていることは確認済みである.
 また,Ethernetによる送受信も必要最低限実装されており,VMはIEEE 802.3 Rawフォーマットのフレームを送受信できる.

 

 

  図2.3.2
   2.3.2 ゲスト OS (DLXLinux) のブートのスクリーンショット ( カー ネルスレッドの立上りのところで,まだトラブルが残っている )

  

 
 開発物の詳細は以下の通り.

(1) ブートストラップ部
 VMを計算機内部の主記憶に適切にロードするためのプログラム.このプログラムはプログラムのロードと,その後プログラムが動作するために必要な計算機 の初期化処理などを含む.

(2) デバイスドライバ
 VMが動作するために必要なデバイスドライバである.作成したデバイスドライバはPCI (ISA),FDC (Floppy Disk Controller),ATA/ATAPI (IDE),NE2000互換NICである.これらはすべて完全に動作し,デバッグを終了している.新たなデバイスドライバの開発や,サードパーティ製の デバイスドライバの登場などを期待し,これらのデバイスドライバの実装は,すべてUNIXを真似た方法をとった.

(3) IEEE802.3 (Ethernet)
 VMの各種割り込みデータを送受信する際に必要な通信プロトコルである.実装は完了しており,VMはIEEE802.3 Rawフォーマットを送受信できる.VMはこのIEEE802.3 Rawフォーマット上に独自のプロトコルを乗せて,通信する.

(4) VM割り込み送受信部
 VMは,デバイスからの割り込みを,Ethernet上の他のホストへ,透過的に渡すことができる.この機能は,リモートデバイスを実装する上でなくて はならない機能である.具体的には,プログラムが各種周辺機器の外部割り込みを使用する際に必ず利用する割り込みコントローラ (PIC) i8259Aをエミュレーションするプログラムを作成することで実装した.

(5) VMページング部
 各種特権命令のエミュレーションを行なう.ゲストOSに,再コンパイル等の手を加えずとも動作させることを可能とするための重要な部分である.
 また,VMは自身のメモリ空間と,ゲストOSのメモリ空間を完全に独立させるため,ページング機構を利用する.図2.3.3 VMとゲストOSのメモリ空間に,物理メモリが64Mバイトであった場合のVMのページングの方法を示す.64Mバイトのうち,高位アドレスから1Mバイ トまでの範囲が,VMの範囲である (図の中の緑の部分).この範囲は,ゲストOSの干渉を一切許してはいけないため,VMはBIOSのプログラムを改ざんして,ゲストOS側には搭載メモリ より1Mバイト低い63Mバイトの物理メモリを通知する.そのため一通りのBIOSのプログラムをエミュレートするプログラムも開発した.ゲストOSは BIOSから得た物理メモリ搭載量である63Mバイトの分を,自分のメモリ領域とする.すなわち,ゲストOS側から見ると,VMのメモリは存在していない メモリ空間となる.

  図2.3.3.

     2.3.3 VM とゲスト OS の メモリ空間

  


 



10. PM評価とコメント

  高橋君はまだ19歳であるが,コンピュータの内側に関して特異な才能があ る.話を聞くと,小学校4年のときに,デザイン関係の仕事をしているお父さんに,市販のCのコンパイラを買ってほしいとせがんだという.恐るべき早熟であ る.PMの基準では,コンピュータプログラミングにはまり込むには早すぎる年齢だと思うが,案に相違して,高橋君の文章能力はかなりしっかりしており,平 均的な大学2年生のレベルを超えている.これだったら心配ない.
 大学では,プログラムを書いていない時間に胃が痛くなるという,ちょっと信じがたいエピソードを紹介してくれたが,Intelのチップを膨大なドキュメ ントやノウハウ情報と格闘しながらハックする才能ではそういうことになるのかもしれない.
 日本のCPUアーキテクチャ技術がどんどん退潮していく中にあって,このような才能を適正に伸ばしていくことはとても重要だと思う.
 さて,高橋君が言うように,複数台のマシンを所有し,操っていると,どうしてもあるマシンに装着されているデバイスを,他のマシンでも利用したいという 思いに駆られることがある.しかし,ノート型コンピュータや,最新のスリム型コンピュータは,基本的に一度買ってしまうと,内部のハードウェア構成を物理 的に変更することは不可能とはいえないまでも,きわめて困難で冒険的な作業である (メーカー保証外になってしまう).またそういった制約をクリアしているコンピュータであっても,物理的にハードウェア構成を変更することは,一度分解し て内部の機器を取り出して差し替えるといった作業をこなさなければならない.こういった作業にはハードウェアを痛めてしまうかもしれないといった懸念があ り,なにより専門知識が要求される.また他の物理的制限,たとえばスロットの不足,インタフェースの相違,根本的に変更不可能 (基板に直接取り付けられている),といった制限もあり,どうしても不可能な場合に直面することも珍しくない.
 こういった動機から,リモートデバイスの制御を最も抜本的な方法で実現しようとしたのがこの提案である.この「抜本的」という点が重要である.姑息な手 段を使わずに実に正統的な方法で問題にアタックしている.その代わり,越えるべき山は非常に高くなる,というより山の数が多くなる.短い開発期間に,すべ ての山を越えることはできなかったが,それは決して失敗を意味しない.越えるべき山が開発期間に対して多すぎただけであり,この調子で開発を進めていけ ば,必ず全部越えられることがわかっている山々なのである.そして,高橋君には短期間に一人でも十分山々を越える能力があるとPMは判断した.
 なお,ゲストOSに一切手を加えない,有名な市販製品VMwareとの違いは,
・ PC/AT互換機上直接実装されている.
・ CPUのin,out命令をEthernetで接続された他の端末に送信可能である.
の2点である.特に後者は本開発でしか実現されていない.
 リモートデバイスの制御は,まったく独力でIntelのチップ上に直にVMを実現するという冒険の一つの付録にしかすぎないとPMは判断している.こう いう経験をもっと積んで,大きな技術者に育ってほしい.高橋君には,こういうハードコアな興味をもっている人たちのためになにか本を書いてもらう手配をす るといいかなぁと思っている.

 上に述べたように開発期間にすべてのシステムはでき上がらなかったが,それでも湧き出してくる溢れる才能,若さ,開発能力に対して,スーパークリエータ の称号を送りたい.日本にもこんなことを一生懸命やる若者がいることを知ってもらいたいというPMの願望も込められている.これをバネにすべての山をなる べく早く越えてくれることを期待する.



  ページトップへ   






  Copyright(c) Information-technology Promotion Agency, Japan. All rights reserved 2004