ダウンロードリスト

プロジェクト概要

パソコン(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)をベースとします。

システム要件

システム要件が設定されていません

リリース時刻: 2013-09-15 15:48
tinyvisor 0.10 (1 個のファイル 非表示)

リリースノート

TinyVisor 0.10 (r112)


新機能

PCに実装されている物理メモリをすべてVMMの仮想アドレス空間に固定的にマップすることで、命令エミュレーションののオーバヘッドを削減し、4GB以降のメモリのみを割り当てたvm1でOSを起動可能にしました。

vm1 に割り当てたデバイスに対し、vm0 の BIOS/OS から I/O アクセスやメモリアクセスができないようにすることで、vm0とvm1を同時起動するときの競合が発生しないようにしました。


その他の変更

バグ修正をしました。「修正した問題」を参照してください。


動作確認内容

以下のことを確認済です。


1. USB メモリに TinyVisor をインストール可能なこと。

2. Linux のファイルシステムに TinyVisor をインストール可能なこと。

3. vm0 のみで OS を起動可能なこと。

4. Nehalem マシンにおいて、次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: FreeBSD 9.1-RELEASE (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128)
        NIC: Realtek RTL811DH

5. Nehalem マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: FreeBSD 9.1-RELEASE (amd64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128)
        NIC: Realtek RTL811DH
        USB: 玄人志向 USB3.0N4-PCIe (ルネサス uPD720200)
        VGA: GeForce 8400 GS

6. Nehalem マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)

7. Nehalem マシンにおいて vm1 で動作している Debian GNU/Linux 7.0
   (amd64版) を再起動可能なこと。

8. IvyBridge マシンにおいて、次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: FreeBSD 9.1-RELEASE (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E

9. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: FreeBSD 9.1-RELEASE (amd64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E

10. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)

11. IvyBridge マシンにおいて vm1 で動作している Debian GNU/Linux 7.0
    (amd64版) を再起動可能なこと。


修正した問題


#31963 gcc 4.7.2 で SPT3 を無効化した VMM をコンパイルすると、GRUB のロード中にストール

#31926 vm0 と vm1 を作成した時に vm1 側で AHCI タイムアウトが発生し OS が起動しない

#31858 4GB以上のメモリをvm1に割り当てると、Linux が起動中にストールする

#31857 4GB境界を跨ぐメモリをvm1に割り当てると、vm1の再起動時にAHCIがタイムアウトする


既知の問題


#31925 Qemu上でTinyvisorを起動したところ、Linuxが起動しない

#31392 vm1のFreeBSDを再起動すると、AHCIの初期化に失敗する

#30457 複数のCPUを生成したQEMU上でTinyVisorを動作させると、Guest Linuxがsoft lockupのエラー

#29706 vm0 を GRUB で止めている状態で、 vm1 を起動しシャットダウンすると、0x0F の割り込みが発生し VMM がパニック

#29240 VMM起動後のGRUB画面で、Ctrl+ALT+DELを入力すると、VMMがpanic

#29191 USBメモリにVMMとGRUBを書き込んでみたところ、panic

#28765 boot_drive=81でOSの起動したところ、General protection faultが発生し panic

変更履歴

------------------------------------------------------------------------
r108 | yuichi_xy | 2013-08-31 17:40:32 +0900 (土, 31  8月 2013) | 1 line

vm1 に割り当てたデバイスに対し、vm0 の BIOS/OS から I/O アクセスやメモリアクセスができないようにした。 #31926 参照
------------------------------------------------------------------------
r109 | yuichi_xy | 2013-08-31 22:21:01 +0900 (土, 31  8月 2013) | 1 line

vm1 の再起動時、メモリマップエントリの2つ目以降が示すメモリを初期化していないバグを修正
------------------------------------------------------------------------
r110 | yuichi_xy | 2013-08-31 23:08:05 +0900 (土, 31  8月 2013) | 1 line

BIOS の AHCI ドライバを改造し、コマンドリストや FIS のアドレスを設定する時に、上位 32 ビットを 0 に設定するようにした。 #31857
------------------------------------------------------------------------
r111 | yuichi_xy | 2013-09-01 15:33:59 +0900 (日, 01  9月 2013) | 1 line

PC に実装されている物理メモリをすべて VMM の仮想アドレス空間に固定的にマップするようにした。#31858 参照
------------------------------------------------------------------------
r112 | yuichi_xy | 2013-09-08 15:07:03 +0900 (日, 08  9月 2013) | 1 line

LIST2_DEL を、インライン関数を呼び出す実装から、「式の中の文」(丸括弧で囲んだ複文)の実装に修正。#31963 参照
------------------------------------------------------------------------