際際滷

際際滷Share a Scribd company logo
/糸艶厩/一厩馨を岷俊澣いて徭恬閣珂
2018-06-04
寄舞 v寔
2018/06/04 寄舞 v寔 2
KVMとは
¢
Kernel-based Virtual Machine[1]
¢
∀觧屶址C嬬を隔つx86ハ`ドウェア貧のLinux鬚
頼畠∀觧C嬬[1]
C ∀觧屶址C嬬
¢
Intel VT
¢
AMD-V
C 頼畠∀觧(Full virtualization)
¢
蒙協のハ`ドウェアを頼畠にシミュレ`トしていること
¢
xZ: ∀觧(Paravirtualization)
[1] http://linux-kvm.org
2018/06/04 寄舞 v寔 3
KVMは採をしてくれるのか?
Kernel
Userspace
2018/06/04 寄舞 v寔 4
KVMは採をしてくれるのか?
Kernel
Userspace
KVMは
∀覽弔CPUを
喘吭してくれる
2018/06/04 寄舞 v寔 5
KVMは採をしてくれるのか?
Kernel
Userspace
/dev/kvm
を宥じてO協
/dev/kvm
2018/06/04 寄舞 v寔 6
KVMは採をしてくれるのか?
Kernel
Userspace
/dev/kvm
¢ VM恬って。
¢ VCPU恬って。
¢
メモリはこれね。
¢
カ`ネルレベルの
I尖
¢ IO
2018/06/04 寄舞 v寔 7
gはgに澣けます
Kernel
Userspace
/dev/kvm
open(^/dev/kvm ̄)
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
ioctl(KVM_RUN)
switch (exit_reason) {
case KVM_EXIT_IO:
/* ... */
case KVM_EXIT_HLT:
/* ... */
}
}
gは
こんなLに
澣ける
2018/06/04 寄舞 v寔 8
/dev/kvmを岷俊澣いてみる
https://github.com/cupnes/bare_metal_kvm
2018/06/04 寄舞 v寔 9
1. Hello KVM!
¢
IOとしてはシリアル宥佚のみをサポ`トする
VMを恬る
¢
シリアル僕佚のIOアドレスへ猟忖を僕佚するだ
けのg佩バイナリをVMのアドレス腎gへマッ
プして、VMのCPUにg佩させる
サンプルコ`ド
https://github.com/cupnes/bare_metal_kvm/tree/master/01_hello
2018/06/04 寄舞 v寔 10
1. Hello KVM!
VM
CPU
ROM
(g佩バイナリ
がある)
Serial
ア`キテクチャ
2018/06/04 寄舞 v寔 11
1. Hello KVM!
メモリマップ
リニアアドレス腎g IOアドレス腎g
0x0000 0000 ROM(4KB)
0x0000 1000
0x0000
0x0001
0x0002 シリアル僕佚
レジスタ
(1バイト)
2018/06/04 寄舞 v寔 12
2. BIOSを咾す
¢
ROMをBIOS(SeaBIOS)にして、BIOSを咾す
¢
m卷駅勣なデバイスを弖紗する
¢
このステップではBIOSが咾い討い徨が
シリアル竃薦で_JできればOKとする
サンプルコ`ド
https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios
エラ`I尖?デバッグI尖などをったもの
https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios_no
debug
2018/06/04 寄舞 v寔 13
2. BIOSを咾す
VM
CPU
ROM
(BIOS)
Serial
ア`キテクチャ
護りzみ
コントロ`ラ
RAM
タイマ`
2018/06/04 寄舞 v寔 14
2. BIOSを咾す
メモリマップ
リニアアドレス腎g IOアドレス腎g
0x0000 0000
RAM(640KB)
0x000a 0000
0x0000
0x0402
0x0403
シリアル僕佚
レジスタ
(1バイト)
0x000c 0000 RAM(128KB)
0x000e 0000
?
?
?
ROM(128KB)
0x0010 0000
0xfffe 0000 ROM(128KB)
0x1 0000 0000
BIOS
BIOS
(shadow)

More Related Content

/糸艶厩/一厩馨を岷俊澣いて徭恬閣珂

  • 2. 2018/06/04 寄舞 v寔 2 KVMとは ¢ Kernel-based Virtual Machine[1] ¢ ∀觧屶址C嬬を隔つx86ハ`ドウェア貧のLinux鬚 頼畠∀觧C嬬[1] C ∀觧屶址C嬬 ¢ Intel VT ¢ AMD-V C 頼畠∀觧(Full virtualization) ¢ 蒙協のハ`ドウェアを頼畠にシミュレ`トしていること ¢ xZ: ∀觧(Paravirtualization) [1] http://linux-kvm.org
  • 3. 2018/06/04 寄舞 v寔 3 KVMは採をしてくれるのか? Kernel Userspace
  • 4. 2018/06/04 寄舞 v寔 4 KVMは採をしてくれるのか? Kernel Userspace KVMは ∀覽弔CPUを 喘吭してくれる
  • 5. 2018/06/04 寄舞 v寔 5 KVMは採をしてくれるのか? Kernel Userspace /dev/kvm を宥じてO協 /dev/kvm
  • 6. 2018/06/04 寄舞 v寔 6 KVMは採をしてくれるのか? Kernel Userspace /dev/kvm ¢ VM恬って。 ¢ VCPU恬って。 ¢ メモリはこれね。 ¢ カ`ネルレベルの I尖 ¢ IO
  • 7. 2018/06/04 寄舞 v寔 7 gはgに澣けます Kernel Userspace /dev/kvm open(^/dev/kvm ̄) ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: /* ... */ case KVM_EXIT_HLT: /* ... */ } } gは こんなLに 澣ける
  • 8. 2018/06/04 寄舞 v寔 8 /dev/kvmを岷俊澣いてみる https://github.com/cupnes/bare_metal_kvm
  • 9. 2018/06/04 寄舞 v寔 9 1. Hello KVM! ¢ IOとしてはシリアル宥佚のみをサポ`トする VMを恬る ¢ シリアル僕佚のIOアドレスへ猟忖を僕佚するだ けのg佩バイナリをVMのアドレス腎gへマッ プして、VMのCPUにg佩させる サンプルコ`ド https://github.com/cupnes/bare_metal_kvm/tree/master/01_hello
  • 10. 2018/06/04 寄舞 v寔 10 1. Hello KVM! VM CPU ROM (g佩バイナリ がある) Serial ア`キテクチャ
  • 11. 2018/06/04 寄舞 v寔 11 1. Hello KVM! メモリマップ リニアアドレス腎g IOアドレス腎g 0x0000 0000 ROM(4KB) 0x0000 1000 0x0000 0x0001 0x0002 シリアル僕佚 レジスタ (1バイト)
  • 12. 2018/06/04 寄舞 v寔 12 2. BIOSを咾す ¢ ROMをBIOS(SeaBIOS)にして、BIOSを咾す ¢ m卷駅勣なデバイスを弖紗する ¢ このステップではBIOSが咾い討い徨が シリアル竃薦で_JできればOKとする サンプルコ`ド https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios エラ`I尖?デバッグI尖などをったもの https://github.com/cupnes/bare_metal_kvm/tree/master/02_bios_no debug
  • 13. 2018/06/04 寄舞 v寔 13 2. BIOSを咾す VM CPU ROM (BIOS) Serial ア`キテクチャ 護りzみ コントロ`ラ RAM タイマ`
  • 14. 2018/06/04 寄舞 v寔 14 2. BIOSを咾す メモリマップ リニアアドレス腎g IOアドレス腎g 0x0000 0000 RAM(640KB) 0x000a 0000 0x0000 0x0402 0x0403 シリアル僕佚 レジスタ (1バイト) 0x000c 0000 RAM(128KB) 0x000e 0000 ? ? ? ROM(128KB) 0x0010 0000 0xfffe 0000 ROM(128KB) 0x1 0000 0000 BIOS BIOS (shadow)