パソコン(PC)に内臓されているCPUとメモリ、I/Oを分割して各VMに割り当て、OSにそれらを直接制御させることで、ホストOSなしで各OSが独立して動作可能なHypervisor(VMM)を開発するプロジェクトです。
最初の目標は、ひとつのPCでふたつのOSを動作させること、次の目標は各OSを個別に再起動可能にすることでしたが、2014年1月にこれらの目標を達成し、1.0をリリースしました。
OSは、Linux、Windows、FreeBSDが動きます。
VMMはBitVisor(BSDライセンス)をベースとし、AMLインタープリタや標準ライブラリの一部の関数をNetBSDやFreeBSDから移植しています。 Guest BIOSはSeaBIOS(GPL)をベースとします。
TinyVisor 0.7 (r64) 以下のことを確認済みです。 1. USB メモリに TinyVisor をインストール可能なこと。 2. Linux のファイルシステムに TinyVisor をインストール可能なこと。 3. vm0 のみで OS を起動可能なこと。 4. 次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 6.0 (amd64版) vm1: FreeBSD 9.0-RELEASE (amd64版) 5. 次の組み合わせで OS を起動可能なこと。 vm0: FreeBSD 9.0-RELEASE (amd64版) vm1: Debian GNU/Linux 6.0 (amd64版) 6. 次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 6.0 (amd64版) vm1: Debian GNU/Linux 6.0 (amd64版) 7. vm1 に以下のI/Oデバイスを割り当て動作すること。 vm1 のOS は Linux とする。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH USB: 玄人志向 USB3.0N4-PCIe (ルネサス uPD720200) VGA: GeForce 8400 GS 8. vm1 に以下のI/Oデバイスを割り当て動作すること。 vm1 のOS は FreeBSD とする。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH お問い合わせは、 tinyvisor-devel@lists.sourceforge.jp 宛にメールを送付してください。
------------------------------------------------------------------------ r53 | yuichi_xy | 2012-08-06 14:53:16 +0900 (月, 06 8月 2012) | 1 line vm0 以外の vm で動作している OS が、キーボードコントローラを使用して装置の再起動を試みた場合、再起動を試みた仮想 CPU を止めるようにした。 #28291 参照。 ------------------------------------------------------------------------ r54 | yuichi_xy | 2012-08-06 22:04:26 +0900 (月, 06 8月 2012) | 1 line HPET を 2 つめの VM (vm0 の次の vm) に占有させた。 #27965 参照。 ------------------------------------------------------------------------ r55 | yuichi_xy | 2012-08-06 22:54:54 +0900 (月, 06 8月 2012) | 1 line IOMMU が無効の状態で複数の VM を生成した場合は panic するようにした。 #27965 参 照。 ------------------------------------------------------------------------ r56 | yuichi_xy | 2012-08-10 22:02:04 +0900 (金, 10 8月 2012) | 1 line リアルモードの BIOS を呼び出す時や 2 個目以降のプロセッサを実行開始させる時に使 用するページテーブルと、VMM が普段使用するページテーブルを分けた。 ------------------------------------------------------------------------ r57 | yuichi_xy | 2012-08-11 21:21:39 +0900 (土, 11 8月 2012) | 1 line プロセス間で memmap 領域 (0x80000000 以降の領域) と、hphys 領域 (0x8000000000 以降の領域) を共有するようにした(r55以前は共有だったがr56で個別になってしまったの で元に戻した)。プロセスの実行中に例外が発生した場合、レジスタのダンプなどの情報 を出力してから、プロセスを殺すようにした。 ------------------------------------------------------------------------ r58 | yuichi_xy | 2012-08-11 23:03:18 +0900 (土, 11 8月 2012) | 1 line spin ロック保持中は、割り込みを無効にするようにした。 ------------------------------------------------------------------------ r59 | yuichi_xy | 2012-08-11 23:33:37 +0900 (土, 11 8月 2012) | 1 line Guest ソフトウェアのシリアル出力を、VMM 内の log バッファに保存しないようにした 。 ------------------------------------------------------------------------ r60 | yuichi_xy | 2012-08-12 15:04:55 +0900 (日, 12 8月 2012) | 1 line vm0.boot_int18 を指定しない時に 0x0007 へ jamp してしまうバグを修正。vm0.boot_parttion を vm0.boot_partition に修正。 ------------------------------------------------------------------------ r63 | yuichi_xy | 2012-09-23 23:00:30 +0900 (日, 23 9月 2012) | 1 line VT-d の Cap レジスタと Ecap レジスタをダンプするようにした。IOPT/EPT を構築する コードを整理した。 ------------------------------------------------------------------------ r64 | yuichi_xy | 2012-09-23 23:27:11 +0900 (日, 23 9月 2012) | 1 line コンパイラの対応状況にかかわらずデフォルトで 64 ビットの VMM を生成するようにし た。デフォルトでは DBGSH を無効化した。 ------------------------------------------------------------------------