ダウンロードリスト

プロジェクト概要

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

システム要件

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

リリース時刻: 2014-01-11 23:13
tinyvisor 1.0 (1 個のファイル 非表示)

リリースノート

TinyVisor 1.0 (r153)


新機能

VM1の動作中に、VM0を再起動可能にしました。

VM0, VM1でFedora 20を起動・再起動可能にしました。


その他の変更

VMM実行中は割り込みを無効化しておき、割り込み関連の要因でVMexitが発生したときのみ、割り込みを一つ受け取りInjectするようにしました(ベースとしたBitVisorの設計に戻しました)。

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


動作確認内容

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


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

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

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

14. qemu 上で TinyVisor を起動可能なこと。

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

18. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Fedora 20 (x86_64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

19. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: FreeBSD 9.2-RELEASE (amd64版)
   vm1: Fedora 20 (x86_64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

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

20. IvyBridge マシンにおいて vm1 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

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

22. IvyBridge マシンにおいて vm0 で動作している FreeBSD 9.2-RELEASE
    (amd64版) を再起動可能なこと。

23. IvyBridge マシンにおいて vm0 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

24. Debian GNU/Linux 7.0 (amd64版)でビルド可能なこと。

25. Fedora 20 (x86_64版)でビルド可能なこと。


修正した問題


#32827 Fedora 20でビルドするとBIOSのコンパイルがエラーになる

#32812 VM0/VM1でFedora 20を起動すると、CPU1以降を認識できない

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

#32764 FreeBSDをVM0で起動すると、ログインプロンプトが画面に表示されない

#32722 VM0でFreeBSDを起動すると、ACPI tableのcheck sumエラーがでる


既知の問題


#32902 VM1でFedora 20を再起動すると、xHCIに接続されているデバイスが認識できない

#32901 VM1でFedora 20を再起動すると、ログイン画面が表示されない

#32660 VM0で起動したFreeBSDを再起動すると、NICで通信ができない

#32404 VM1にCPUを1個しか割り当てずにVM1でFreeBSDを起動しようとすると、NICがリンクアップしない

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

変更履歴

------------------------------------------------------------------------
r127 | yuichi_xy | 2013-11-23 22:27:51 +0900 (土, 23 11月 2013) | 1 line

BIOS: AHCI HBA reset を実行
------------------------------------------------------------------------
r128 | yuichi_xy | 2013-11-24 17:28:05 +0900 (日, 24 11月 2013) | 1 line

VM0のOSによるACPI RESET_REGへの書き込みフックし、VM0の仮想CPUをリセットし、guestbootコードを再度メモリにロードし、VM0のBSPにguestbootを実行させるようにした。 #31349 参照
------------------------------------------------------------------------
r129 | yuichi_xy | 2013-11-24 22:02:25 +0900 (日, 24 11月 2013) | 1 line

guestboot コードの不要なコードを削除
------------------------------------------------------------------------
r130 | yuichi_xy | 2013-11-24 23:28:21 +0900 (日, 24 11月 2013) | 1 line

VM0の起動時、ビデオモードの設定と、INT 13/AH=0Dhによる HDD DISKS のリセットを行うようにした。 #31349 参照
------------------------------------------------------------------------
r131 | yuichi_xy | 2013-12-08 23:18:37 +0900 (日, 08 12月 2013) | 1 line

r128 で、 VM1 の OS がキーボードコントローラにアクセス可能になってしまい Free BSD が起動しなくなったため、アクセス不可能に戻した。
------------------------------------------------------------------------
r132 | yuichi_xy | 2013-12-09 21:51:54 +0900 (月, 09 12月 2013) | 6 lines

OSの再起動に伴うVMリセットを強化
  * VM0のリセット時にPICを初期化
  * VM0のリセット時にIOAPICのRDTを全てマスク
  * VM0/VM1のリセット時にAPICのLVTを全てマスク
  * VM0/VM1のリセット時にvBSPのAPICを有効のままにする
#31349 参照
------------------------------------------------------------------------
r133 | yuichi_xy | 2013-12-15 17:33:24 +0900 (日, 15 12月 2013) | 3 lines

VMM起動時、BSP以外の論理プロセッサのLocal APICも有効にした。
VMのリセット時、vBSP以外の論理プロセッサのLocal APICも有効にした。
VMのリセット時、Local APICのLVTをマスクするため、Local APICを一時的に無効化してすぐに有効化するようにした。
------------------------------------------------------------------------
r134 | yuichi_xy | 2013-12-15 23:03:01 +0900 (日, 15 12月 2013) | 1 line

VM のリセット時、PIC や I/O APIC 、Local APIC をマスクした後、最大256個の割り込みを受信して EOI を発行するようにした。
------------------------------------------------------------------------
r135 | yuichi_xy | 2013-12-15 23:32:09 +0900 (日, 15 12月 2013) | 1 line

r134 で rflags レジスタの IF ビットの位置を間違えていたため修正。
------------------------------------------------------------------------
r136 | yuichi_xy | 2013-12-16 22:08:32 +0900 (月, 16 12月 2013) | 1 line

VMM実行時は割り込みを無効化しておき、割り込みをinject可能なときに割り込みを一個だけ受け取る。 #31349 参照
------------------------------------------------------------------------
r137 | yuichi_xy | 2013-12-16 23:45:11 +0900 (月, 16 12月 2013) | 1 line

VM0 かどうかの判定に cpu_is_bsp を使っていた部分を vm_get_id に変更。
------------------------------------------------------------------------
r138 | yuichi_xy | 2013-12-21 00:03:48 +0900 (土, 21 12月 2013) | 1 line

VM の再起動時、デバイスのリセットを行った後に、割り込みの受信とEOIの発行をするようにした。 #31349 参照
------------------------------------------------------------------------
r139 | yuichi_xy | 2013-12-21 17:17:52 +0900 (土, 21 12月 2013) | 1 line

r136 で行ったVMM 実行時は割り込みを無効化する改造を、 SVM にも対応させた。 #31349, #31925 参照
------------------------------------------------------------------------
r140 | yuichi_xy | 2013-12-23 15:04:52 +0900 (月, 23 12月 2013) | 1 line

VM0の再起動時、PIT,RTCを初期化し、IO APICのGSI 1をExtINTに設定し、PICのISA IRQ0をアンマスクするようにした。 #31349 参照
------------------------------------------------------------------------
r141 | yuichi_xy | 2013-12-23 20:17:16 +0900 (月, 23 12月 2013) | 1 line

BIOS: r127 で追加した AHCI HBA reset を無効化した。 #32658 参照
------------------------------------------------------------------------
r142 | yuichi_xy | 2013-12-24 22:05:05 +0900 (火, 24 12月 2013) | 1 line

vm0.boot_int18を指定した場合、VM0の再起動時に80hのHDDのMBRをロードするようにした。 #31349 参照
------------------------------------------------------------------------
r143 | yuichi_xy | 2013-12-28 19:20:29 +0900 (土, 28 12月 2013) | 1 line

VM0 の再起動時も、Secondary Bus Resetを発行する
------------------------------------------------------------------------
r144 | yuichi_xy | 2013-12-31 22:18:54 +0900 (火, 31 12月 2013) | 1 line

ACPI tableを書き換えるときにchecksumを更新していなかったので更新するようにした。 #32722 参照
------------------------------------------------------------------------
r145 | yuichi_xy | 2014-01-01 23:17:52 +0900 (水, 01  1月 2014) | 1 line

シリアルコントローラエミュレータが、TBR empty 割り込みが無効化されているにも関わらず、割り込みをinjectしていた不具合を修正。
------------------------------------------------------------------------
r146 | yuichi_xy | 2014-01-02 12:56:42 +0900 (木, 02  1月 2014) | 1 line

VM0 においても、シリアルコントローラエミュレータが割り込みを Inject 可能にした。 #32764 参照
------------------------------------------------------------------------
r147 | yuichi_xy | 2014-01-02 13:04:41 +0900 (木, 02  1月 2014) | 1 line

I/O APIC のテーブルが論理ディスティネーションモードに設定されている場合、エミュレータ契機の割り込みを Inject しないようにした。
------------------------------------------------------------------------
r148 | yuichi_xy | 2014-01-03 12:05:41 +0900 (金, 03  1月 2014) | 1 line

SVM 環境において、VMexit 時に exitintinfo を intr_info へコピーするようにした。 #31925 参照
------------------------------------------------------------------------
r149 | yuichi_xy | 2014-01-03 18:12:31 +0900 (金, 03  1月 2014) | 1 line

FACP flag を見て、ACPI RESET_REG への対応有無を確認するようにした。
------------------------------------------------------------------------
r150 | yuichi_xy | 2014-01-04 23:46:44 +0900 (土, 04  1月 2014) | 1 line

BIOS: TinyVisor 用の設定ファイル bios/tinyvisor_config を登録。bios/.config が存在しない場合、bios/tinyviso_config を bios/.config へコピーするようにした。 LC_ALL=C make SeaBIOS をビルドするようにした。 #32827 参照。
------------------------------------------------------------------------
r151 | yuichi_xy | 2014-01-06 23:14:16 +0900 (月, 06  1月 2014) | 1 line

Non-paged protect modeの場合、supoervisor-mode execution preventionを無効化した。また、DSH を使用した自分宛のプロセッサ間割り込みを送信可能にした。 #32812 参照
------------------------------------------------------------------------
r152 | yuichi_xy | 2014-01-07 23:26:57 +0900 (火, 07  1月 2014) | 1 line

ゲストソフトウェアによるCR0 の PG ビットの変更時に、CR4 の値を更新するようにした。
------------------------------------------------------------------------
r153 | yuichi_xy | 2014-01-11 21:40:23 +0900 (土, 11  1月 2014) | 1 line

例外処理関連のデバッグメッセージを無効化
------------------------------------------------------------------------