SlideShare une entreprise Scribd logo
1  sur  18
軽快なBHyVe
  @syuu1228
BHyVeの現状
• 独自ローダからFreeBSDカーネルをゲス
 トOSとしてロード&ブート出来るだけ

• BIOS無いからブートローダが動かな
 い!
 →ディスクイメージから任意のOSを起
 動出来ない!
BIOSコールの仕組み
int 13h   ソフト割込(INT命令)


          CPUが割込ベクタを読む


          BIOS上のハンドラを実行
                    IO

                 ハードウェア
KVM上でのBIOSコール
        int 13h         ソフト割込(INT命令)


                        CPUが割込ベクタを読む


                        BIOS上のハンドラを実行
        SeaBIOSがHWへIO
                                    IO Trap
             を実行
                               QEMU HW
Guest                           Emulation
                                              QEMUが必要なHWエ
   HyperVisor                                 ミュレーションを実施
SeaBIOSをBHyVeに
     載せりゃええやん

• 提案しました
• 却下されました
• GPLだからです
• ( ゚∀゚)o彡゚BSDL! ( ゚∀゚)o彡゚BSDL!
でもBSDLでBIOSコールを
エミュレートするソフトはあるよ
• doscmdとか(FreeBSD上で動作)
• 仮想8086モードでDOSプログラムを走
 らせ、BIOSコールやDOS APIなどのソフ
 ト割り込みをtrap、エミュレート

• 32bit実装だし移植するならHyperVisor側
 に入れた方が楽
BIOSコールをHyperVisorで
    エミュレーションする
  Guest      ソフト割込(INT命令)
                         割り込み Trap

HyperVisor   BHyVe BIOS Emulation



 • ソフト割り込みをTrapしてHyperVisor側
   でBIOSエミュレーションを実行すれば
   よい?
Intel VTでソフト割り込みを
     Trapすると…

• 全てのソフト割り込みがTrapされる
• 多くのOSがシステムコールにソフト割
 り込みを使うが、それはゲストOSで処
 理して欲しいのでTrapしたくない
ソフト割り込みの中から
    BIOSコールだけを抽出
•   CPUのモードがリアルモードか仮想8086モードになっ
    た時にソフト割り込みの全Trapを有効化、プロテクト
    モードになった時に無効化
    →BIOSエミュレーションとCPUモードのステート管理
    を行う

•   この場合でも、リアルモードを用いるOSではシステム
    コールでTrapがかかってしまう


• 面倒くさそう
ついにこの本を役立てる時
が来たか(ゴゴゴゴゴゴ…
軽快なBIOSコール
    エミュレーションの提案
                   ソフト割込(INT命令)


                   CPUが割込ベクタを読む


                  擬似BIOS上のハンドラを実行
        擬似BIOSが
  VMCALL命令を発行                  VMCALL Trap
  (ハイパーコール)
                          BHyVe BIOS
Guest                      Emulation
                                       BHyVeが必要なBIOSコールエ
   HyperVisor                           ミュレーションを実施
擬似BIOS上の
    ハンドラ実行イメージ
push dx       /* dxを退避 */
 push cx      /* cxを退避 */

 xor dx, dx   /* dx = 0 (0番のvmcallはBIOSコール) */

 mov cx, 13h /* cx = 13h (int 13hである事を通知) */

 vmcall       /* HyperVisorへVMExit、BIOSエミュレーション */

 pop cx       /* cxを復帰 */

 pop dx       /* dxを復帰 */

 iret         /* 割り込みから復帰 */
軽快なBIOSコール
エミュレーションでは…

• 意図しないTrapを発生させない
• 発生させない為に努力をする必要もな
 い

• シンプル
まとめ
•   VM床ぶち抜き術はこんなところでも使えて
    非常に有用な技術です

•   あなたのお持ちのVT対応パソコンも早く床
    をぶち抜きたくてうずうずしています、期待
    に応えてあげましょう

•   Google Summer of Code 2012 proposal:
    http://bit.ly/bhyvebios
何でBIOS無いと
             ブートローダ動かんの
•   GRUBの例

    /*
      * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory
      *	

   Call with	

 %ah = 0x42
      *	

   	

   	

   %dl = drive number
      *	

   	

   	

   %ds:%si = segment:offset of disk address packet
      *	

   Return:
      *	

   	

   	

   %al = 0x0 on success; err code on failure
      */


    	

      movb	

$0x42, %ah
    	

      int	

 $0x13
      ↑BIOSコール(ソフトウェア割り込みにより実現)
BIOSコールの仕組み
  ③IO命令でHWへアクセス

                   highmem



                             FFFF:000F
                  ROM BIOS   FFFF:0000
                             F000:0000
②割込ベクタが指してるアドレス   VGAとか色々

    へジャンプ!                   A000:0000
                   lowmem
                             0000:0400
①割込ハンドラのアドレスを取得   割り込みベクタ
                             0000:0000
KVM上でのBIOSコール
   ③IO命令をKVMでtrap、
  QEMUでエミュレーション
                      highmem



                                FFFF:000F
                      SeaBIOS   FFFF:0000
                                F000:0000
②割込ベクタが指してるアドレス      VGAとか色々

    へジャンプ!                      A000:0000
                      lowmem
                                0000:0400
①割込ハンドラのアドレスを取得      割り込みベクタ
                                0000:0000

Contenu connexe

Tendances

20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
 
#ljstudy KVM勉強会
#ljstudy KVM勉強会#ljstudy KVM勉強会
#ljstudy KVM勉強会
Etsuji Nakai
 

Tendances (20)

Unsafe Nested Virtualization on Intel CPU
Unsafe Nested Virtualization on Intel CPUUnsafe Nested Virtualization on Intel CPU
Unsafe Nested Virtualization on Intel CPU
 
elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバ
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダ
 
MMIO on VT-x
MMIO on VT-xMMIO on VT-x
MMIO on VT-x
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
Play with UEFI
Play with UEFIPlay with UEFI
Play with UEFI
 
僕の考えたさいきょーのVMM開発環境
僕の考えたさいきょーのVMM開発環境僕の考えたさいきょーのVMM開発環境
僕の考えたさいきょーのVMM開発環境
 
Let's play with Goldfish
Let's play with GoldfishLet's play with Goldfish
Let's play with Goldfish
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
FreeBSD VPSでLive Migration
FreeBSD VPSでLive MigrationFreeBSD VPSでLive Migration
FreeBSD VPSでLive Migration
 
Windows使いのための仮想マシン入門
Windows使いのための仮想マシン入門Windows使いのための仮想マシン入門
Windows使いのための仮想マシン入門
 
みかん本 6.2 - 6.3
みかん本 6.2 - 6.3みかん本 6.2 - 6.3
みかん本 6.2 - 6.3
 
#ljstudy KVM勉強会
#ljstudy KVM勉強会#ljstudy KVM勉強会
#ljstudy KVM勉強会
 
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
Asterisk
AsteriskAsterisk
Asterisk
 
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみたCybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
 
Lfsをやってみよう
LfsをやってみようLfsをやってみよう
Lfsをやってみよう
 
20110205.apple1emu
20110205.apple1emu20110205.apple1emu
20110205.apple1emu
 
Wiiリモコンで遊ぶ
Wiiリモコンで遊ぶWiiリモコンで遊ぶ
Wiiリモコンで遊ぶ
 

En vedette

RESULTS.com Business Overview
RESULTS.com Business OverviewRESULTS.com Business Overview
RESULTS.com Business Overview
dwalling
 
Portfolio Dennis de Vogt
Portfolio Dennis de VogtPortfolio Dennis de Vogt
Portfolio Dennis de Vogt
elperiodistaah
 
A Message To Starbucks
A Message To StarbucksA Message To Starbucks
A Message To Starbucks
AJBlumenfeld
 
Twice Reply_Company Presentation
Twice Reply_Company PresentationTwice Reply_Company Presentation
Twice Reply_Company Presentation
Sprint Reply GmbH
 
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging FilesGoogle Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging Files
Carl Ocab
 
United Fresh Global Food Safety Conference 24 April 2009
United Fresh Global Food Safety Conference   24 April 2009United Fresh Global Food Safety Conference   24 April 2009
United Fresh Global Food Safety Conference 24 April 2009
MonachusConsulting
 

En vedette (20)

Sitecore.Workflows.Schritte. Wissen wie.Now.Namics.
Sitecore.Workflows.Schritte.Wissen wie.Now.Namics.Sitecore.Workflows.Schritte.Wissen wie.Now.Namics.
Sitecore.Workflows.Schritte. Wissen wie.Now.Namics.
 
RESULTS.com Business Overview
RESULTS.com Business OverviewRESULTS.com Business Overview
RESULTS.com Business Overview
 
Deepwater Horizon Drilling Rig
Deepwater Horizon Drilling RigDeepwater Horizon Drilling Rig
Deepwater Horizon Drilling Rig
 
AbcdáLio
AbcdáLioAbcdáLio
AbcdáLio
 
Portfolio Dennis de Vogt
Portfolio Dennis de VogtPortfolio Dennis de Vogt
Portfolio Dennis de Vogt
 
Han 342 En
Han 342 EnHan 342 En
Han 342 En
 
TSG Members Handbook
TSG Members HandbookTSG Members Handbook
TSG Members Handbook
 
Kelly C. Ruggless
Kelly C. RugglessKelly C. Ruggless
Kelly C. Ruggless
 
Italiaxelementaryschool
ItaliaxelementaryschoolItaliaxelementaryschool
Italiaxelementaryschool
 
A Message To Starbucks
A Message To StarbucksA Message To Starbucks
A Message To Starbucks
 
Total learning: Communities - Learning through Knowledge Sharing
Total learning: Communities - Learning through Knowledge SharingTotal learning: Communities - Learning through Knowledge Sharing
Total learning: Communities - Learning through Knowledge Sharing
 
Twice Reply_Company Presentation
Twice Reply_Company PresentationTwice Reply_Company Presentation
Twice Reply_Company Presentation
 
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing GuideContent Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
 
NLUG LinuxCon09 Presentation
NLUG LinuxCon09 PresentationNLUG LinuxCon09 Presentation
NLUG LinuxCon09 Presentation
 
La gestion del_riesgo_de_desastre_aplica
La gestion del_riesgo_de_desastre_aplicaLa gestion del_riesgo_de_desastre_aplica
La gestion del_riesgo_de_desastre_aplica
 
GUNDAM ROCK
GUNDAM ROCKGUNDAM ROCK
GUNDAM ROCK
 
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging FilesGoogle Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging Files
 
Ud22
Ud22Ud22
Ud22
 
Bridge Detailed Construction
Bridge Detailed ConstructionBridge Detailed Construction
Bridge Detailed Construction
 
United Fresh Global Food Safety Conference 24 April 2009
United Fresh Global Food Safety Conference   24 April 2009United Fresh Global Food Safety Conference   24 April 2009
United Fresh Global Food Safety Conference 24 April 2009
 

Similaire à An idea of bios emulation on b hy ve

物理マシンをケチる技術
物理マシンをケチる技術物理マシンをケチる技術
物理マシンをケチる技術
Satoshi KOBAYASHI
 
20120822_dstn技術交流会_仮想化について
20120822_dstn技術交流会_仮想化について20120822_dstn技術交流会_仮想化について
20120822_dstn技術交流会_仮想化について
dstn
 
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-VTechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
Kuninobu SaSaki
 
2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ
Takahiro Shinagawa
 
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
CODE BLUE
 

Similaire à An idea of bios emulation on b hy ve (20)

コンテナ今昔物語_2021_12_22
コンテナ今昔物語_2021_12_22コンテナ今昔物語_2021_12_22
コンテナ今昔物語_2021_12_22
 
物理マシンをケチる技術
物理マシンをケチる技術物理マシンをケチる技術
物理マシンをケチる技術
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
 
2012-12-04 BitVisor Summit (公開版)「BitVisorの現状と今後」
2012-12-04 BitVisor Summit (公開版)「BitVisorの現状と今後」2012-12-04 BitVisor Summit (公開版)「BitVisorの現状と今後」
2012-12-04 BitVisor Summit (公開版)「BitVisorの現状と今後」
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
qpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtioqpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtio
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
BitVisor Summit 2 「BitVisorの現状と今後」
BitVisor Summit 2 「BitVisorの現状と今後」BitVisor Summit 2 「BitVisorの現状と今後」
BitVisor Summit 2 「BitVisorの現状と今後」
 
20120822_dstn技術交流会_仮想化について
20120822_dstn技術交流会_仮想化について20120822_dstn技術交流会_仮想化について
20120822_dstn技術交流会_仮想化について
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
VIOPS04: Intel VT ~仮想化を支える基礎技術~
VIOPS04: Intel VT ~仮想化を支える基礎技術~VIOPS04: Intel VT ~仮想化を支える基礎技術~
VIOPS04: Intel VT ~仮想化を支える基礎技術~
 
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
 
サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順
 
TechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-VTechEd2010_T2-401_EffectiveHyper-V
TechEd2010_T2-401_EffectiveHyper-V
 
2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ2008-11-18 セキュアVMワークショップ
2008-11-18 セキュアVMワークショップ
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性Step-Oriented Programming による任意コード実行の可能性
Step-Oriented Programming による任意コード実行の可能性
 
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
Step-Oriented Programming による任意コード実行の可能性 by 坂井 弘亮
 
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門
 
第2回「システム管理ソリューションBOFM 4.0概要」(2011/05/19 on しすなま!)
第2回「システム管理ソリューションBOFM 4.0概要」(2011/05/19 on しすなま!)第2回「システム管理ソリューションBOFM 4.0概要」(2011/05/19 on しすなま!)
第2回「システム管理ソリューションBOFM 4.0概要」(2011/05/19 on しすなま!)
 

Plus de Takuya ASADA

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
Takuya ASADA
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Takuya ASADA
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Takuya ASADA
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレット
Takuya ASADA
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
Takuya ASADA
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
Takuya ASADA
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Takuya ASADA
 

Plus de Takuya ASADA (20)

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meeting
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
OSv噺
OSv噺OSv噺
OSv噺
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
 
Linux network stack
Linux network stackLinux network stack
Linux network stack
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレット
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性
 

An idea of bios emulation on b hy ve

  • 2. BHyVeの現状 • 独自ローダからFreeBSDカーネルをゲス トOSとしてロード&ブート出来るだけ • BIOS無いからブートローダが動かな い! →ディスクイメージから任意のOSを起 動出来ない!
  • 3. BIOSコールの仕組み int 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 IO ハードウェア
  • 4. KVM上でのBIOSコール int 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 SeaBIOSがHWへIO IO Trap を実行 QEMU HW Guest Emulation QEMUが必要なHWエ HyperVisor ミュレーションを実施
  • 5. SeaBIOSをBHyVeに 載せりゃええやん • 提案しました • 却下されました • GPLだからです • ( ゚∀゚)o彡゚BSDL! ( ゚∀゚)o彡゚BSDL!
  • 6. でもBSDLでBIOSコールを エミュレートするソフトはあるよ • doscmdとか(FreeBSD上で動作) • 仮想8086モードでDOSプログラムを走 らせ、BIOSコールやDOS APIなどのソフ ト割り込みをtrap、エミュレート • 32bit実装だし移植するならHyperVisor側 に入れた方が楽
  • 7. BIOSコールをHyperVisorで エミュレーションする Guest ソフト割込(INT命令) 割り込み Trap HyperVisor BHyVe BIOS Emulation • ソフト割り込みをTrapしてHyperVisor側 でBIOSエミュレーションを実行すれば よい?
  • 8. Intel VTでソフト割り込みを Trapすると… • 全てのソフト割り込みがTrapされる • 多くのOSがシステムコールにソフト割 り込みを使うが、それはゲストOSで処 理して欲しいのでTrapしたくない
  • 9. ソフト割り込みの中から BIOSコールだけを抽出 • CPUのモードがリアルモードか仮想8086モードになっ た時にソフト割り込みの全Trapを有効化、プロテクト モードになった時に無効化 →BIOSエミュレーションとCPUモードのステート管理 を行う • この場合でも、リアルモードを用いるOSではシステム コールでTrapがかかってしまう • 面倒くさそう
  • 11. 軽快なBIOSコール エミュレーションの提案 ソフト割込(INT命令) CPUが割込ベクタを読む 擬似BIOS上のハンドラを実行 擬似BIOSが VMCALL命令を発行 VMCALL Trap (ハイパーコール) BHyVe BIOS Guest Emulation BHyVeが必要なBIOSコールエ HyperVisor ミュレーションを実施
  • 12. 擬似BIOS上の ハンドラ実行イメージ push dx /* dxを退避 */  push cx /* cxを退避 */  xor dx, dx /* dx = 0 (0番のvmcallはBIOSコール) */  mov cx, 13h /* cx = 13h (int 13hである事を通知) */  vmcall /* HyperVisorへVMExit、BIOSエミュレーション */  pop cx /* cxを復帰 */  pop dx /* dxを復帰 */  iret /* 割り込みから復帰 */
  • 14. まとめ • VM床ぶち抜き術はこんなところでも使えて 非常に有用な技術です • あなたのお持ちのVT対応パソコンも早く床 をぶち抜きたくてうずうずしています、期待 に応えてあげましょう • Google Summer of Code 2012 proposal: http://bit.ly/bhyvebios
  • 15.
  • 16. 何でBIOS無いと ブートローダ動かんの • GRUBの例 /* * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory * Call with %ah = 0x42 * %dl = drive number * %ds:%si = segment:offset of disk address packet * Return: * %al = 0x0 on success; err code on failure */ movb $0x42, %ah int $0x13   ↑BIOSコール(ソフトウェア割り込みにより実現)
  • 17. BIOSコールの仕組み ③IO命令でHWへアクセス highmem FFFF:000F ROM BIOS FFFF:0000 F000:0000 ②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400 ①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000
  • 18. KVM上でのBIOSコール ③IO命令をKVMでtrap、 QEMUでエミュレーション highmem FFFF:000F SeaBIOS FFFF:0000 F000:0000 ②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400 ①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n