Soumettre la recherche
Mettre en ligne
Linux KVM のコードを追いかけてみよう
•
22 j'aime
•
4,846 vues
Tsuyoshi OZAWA
Suivre
第1回カーネル/VM探検隊 Linux KVM のコードを追いかけてみよう のスライドです。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 260
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
wata2ki
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
Taisuke Yamada
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
TCAMのしくみ
TCAMのしくみ
ogatay
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Recommandé
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
Linuxのsemaphoreとmutexを見る
Linuxのsemaphoreとmutexを見る
wata2ki
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
Taisuke Yamada
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
TCAMのしくみ
TCAMのしくみ
ogatay
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
Kuninobu SaSaki
並行実行制御の最適化手法
並行実行制御の最適化手法
Sho Nakazono
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
Yasunori Goto
OpenStack勉強会
OpenStack勉強会
Yuki Obara
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
National Cheng Kung University
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界
Fixstars Corporation
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
Motonori Shindo
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Preferred Networks
WAN - trends and use cases
WAN - trends and use cases
MarketingArrowECS_CZ
Unikernels: Rise of the Library Hypervisor
Unikernels: Rise of the Library Hypervisor
Anil Madhavapeddy
Contenu connexe
Tendances
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
Kuninobu SaSaki
並行実行制御の最適化手法
並行実行制御の最適化手法
Sho Nakazono
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
Yasunori Goto
OpenStack勉強会
OpenStack勉強会
Yuki Obara
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Takuya ASADA
Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
National Cheng Kung University
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
LINE Corporation
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界
Fixstars Corporation
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
Motonori Shindo
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Preferred Networks
Tendances
(20)
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
並行実行制御の最適化手法
並行実行制御の最適化手法
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
OpenStack勉強会
OpenStack勉強会
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
Vacuum徹底解説
Vacuum徹底解説
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Interpreter, Compiler, JIT from scratch
Interpreter, Compiler, JIT from scratch
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
HalideでつくるDomain Specific Architectureの世界
HalideでつくるDomain Specific Architectureの世界
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
En vedette
WAN - trends and use cases
WAN - trends and use cases
MarketingArrowECS_CZ
Unikernels: Rise of the Library Hypervisor
Unikernels: Rise of the Library Hypervisor
Anil Madhavapeddy
Hacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript Engines
Sencha
Attacking the Webkit heap [Or how to write Safari exploits]
Attacking the Webkit heap [Or how to write Safari exploits]
Seguridad Apple
Analisis skl, ki, dan kd prakarya
Analisis skl, ki, dan kd prakarya
eli priyatna laidan
QEMU - Binary Translation
QEMU - Binary Translation
Jiann-Fuh Liaw
3. CPU virtualization and scheduling
3. CPU virtualization and scheduling
Hwanju Kim
Virtualization with KVM (Kernel-based Virtual Machine)
Virtualization with KVM (Kernel-based Virtual Machine)
Novell
Virtualization Architecture & KVM
Virtualization Architecture & KVM
Pradeep Kumar
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStack
Boden Russell
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
En vedette
(11)
WAN - trends and use cases
WAN - trends and use cases
Unikernels: Rise of the Library Hypervisor
Unikernels: Rise of the Library Hypervisor
Hacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript Engines
Attacking the Webkit heap [Or how to write Safari exploits]
Attacking the Webkit heap [Or how to write Safari exploits]
Analisis skl, ki, dan kd prakarya
Analisis skl, ki, dan kd prakarya
QEMU - Binary Translation
QEMU - Binary Translation
3. CPU virtualization and scheduling
3. CPU virtualization and scheduling
Virtualization with KVM (Kernel-based Virtual Machine)
Virtualization with KVM (Kernel-based Virtual Machine)
Virtualization Architecture & KVM
Virtualization Architecture & KVM
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStack
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Similaire à Linux KVM のコードを追いかけてみよう
Secrets of building a debuggable runtime: Learn how language implementors sol...
Secrets of building a debuggable runtime: Learn how language implementors sol...
Dev_Events
Когда предрелизный не только софт
Когда предрелизный не только софт
CEE-SEC(R)
Objectclub2009summer Youth Session Takkanm
Objectclub2009summer Youth Session Takkanm
mitsutaka mimura
BlueHat v18 || A mitigation for kernel toctou vulnerabilities
BlueHat v18 || A mitigation for kernel toctou vulnerabilities
BlueHat Security Conference
Dynamic Overriding
Dynamic Overriding
rentzsch
sponsorAVAST-VB2014
sponsorAVAST-VB2014
Martin Hron
Gameboy emulator in rust and web assembly
Gameboy emulator in rust and web assembly
Yodalee
2020-ntn-vsphere_performance_principles_bondzio.pdf
2020-ntn-vsphere_performance_principles_bondzio.pdf
PhmNgcTr3
Scaling Django
Scaling Django
Mike Malone
Gerenciamento de Memória(2)
Gerenciamento de Memória(2)
elliando dias
Memory Virtualization
Memory Virtualization
Tsuyoshi OZAWA
Initiation concrète-à-la-virtualisation-devoxx-fr-2021
Initiation concrète-à-la-virtualisation-devoxx-fr-2021
Pierre-Antoine Grégoire
Lev
Lev
Kazuya Kawaguchi
Programming for Lego Mindstorms using Eclipse to take you back to your childh...
Programming for Lego Mindstorms using Eclipse to take you back to your childh...
Benjamin Cabé
近未来的並列 LL
近未来的並列 LL
Motohiro Takayama
Bootloader and MMU (english)
Bootloader and MMU (english)
Sneeker Yeh
Exportversions
Exportversions
oracle documents
Groovy, Transforming Language
Groovy, Transforming Language
Uehara Junji
Introduction to 8088 microprocessor
Introduction to 8088 microprocessor
Dwight Sabio
Synchronously call your async functions
Synchronously call your async functions
Igalia
Similaire à Linux KVM のコードを追いかけてみよう
(20)
Secrets of building a debuggable runtime: Learn how language implementors sol...
Secrets of building a debuggable runtime: Learn how language implementors sol...
Когда предрелизный не только софт
Когда предрелизный не только софт
Objectclub2009summer Youth Session Takkanm
Objectclub2009summer Youth Session Takkanm
BlueHat v18 || A mitigation for kernel toctou vulnerabilities
BlueHat v18 || A mitigation for kernel toctou vulnerabilities
Dynamic Overriding
Dynamic Overriding
sponsorAVAST-VB2014
sponsorAVAST-VB2014
Gameboy emulator in rust and web assembly
Gameboy emulator in rust and web assembly
2020-ntn-vsphere_performance_principles_bondzio.pdf
2020-ntn-vsphere_performance_principles_bondzio.pdf
Scaling Django
Scaling Django
Gerenciamento de Memória(2)
Gerenciamento de Memória(2)
Memory Virtualization
Memory Virtualization
Initiation concrète-à-la-virtualisation-devoxx-fr-2021
Initiation concrète-à-la-virtualisation-devoxx-fr-2021
Lev
Lev
Programming for Lego Mindstorms using Eclipse to take you back to your childh...
Programming for Lego Mindstorms using Eclipse to take you back to your childh...
近未来的並列 LL
近未来的並列 LL
Bootloader and MMU (english)
Bootloader and MMU (english)
Exportversions
Exportversions
Groovy, Transforming Language
Groovy, Transforming Language
Introduction to 8088 microprocessor
Introduction to 8088 microprocessor
Synchronously call your async functions
Synchronously call your async functions
Plus de Tsuyoshi OZAWA
YARN: a resource manager for analytic platform
YARN: a resource manager for analytic platform
Tsuyoshi OZAWA
Dynamic Resource Allocation Spark on YARN
Dynamic Resource Allocation Spark on YARN
Tsuyoshi OZAWA
Taming YARN @ Hadoop Conference Japan 2014
Taming YARN @ Hadoop Conference Japan 2014
Tsuyoshi OZAWA
Taming YARN @ Hadoop conference Japan 2014
Taming YARN @ Hadoop conference Japan 2014
Tsuyoshi OZAWA
Spark shark
Spark shark
Tsuyoshi OZAWA
Fluent logger-scala
Fluent logger-scala
Tsuyoshi OZAWA
Multilevel aggregation for Hadoop/MapReduce
Multilevel aggregation for Hadoop/MapReduce
Tsuyoshi OZAWA
Memcached as a Service for CloudFoundry
Memcached as a Service for CloudFoundry
Tsuyoshi OZAWA
First step for dynticks in FreeBSD
First step for dynticks in FreeBSD
Tsuyoshi OZAWA
第二回Bitvisor読書会 前半 Intel-VT について
第二回Bitvisor読書会 前半 Intel-VT について
Tsuyoshi OZAWA
第二回KVM読書会
第二回KVM読書会
Tsuyoshi OZAWA
Plus de Tsuyoshi OZAWA
(11)
YARN: a resource manager for analytic platform
YARN: a resource manager for analytic platform
Dynamic Resource Allocation Spark on YARN
Dynamic Resource Allocation Spark on YARN
Taming YARN @ Hadoop Conference Japan 2014
Taming YARN @ Hadoop Conference Japan 2014
Taming YARN @ Hadoop conference Japan 2014
Taming YARN @ Hadoop conference Japan 2014
Spark shark
Spark shark
Fluent logger-scala
Fluent logger-scala
Multilevel aggregation for Hadoop/MapReduce
Multilevel aggregation for Hadoop/MapReduce
Memcached as a Service for CloudFoundry
Memcached as a Service for CloudFoundry
First step for dynticks in FreeBSD
First step for dynticks in FreeBSD
第二回Bitvisor読書会 前半 Intel-VT について
第二回Bitvisor読書会 前半 Intel-VT について
第二回KVM読書会
第二回KVM読書会
Dernier
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
soniya singh
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
Softradix Technologies
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
Memoori
Slack Application Development 101 Slides
Slack Application Development 101 Slides
praypatel2
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
HampshireHUG
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
Neo4j
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
Pixlogix Infotech
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
Pooja Nehwal
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
HostedbyConfluent
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
shyamraj55
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
Key Features Of Token Development (1).pptx
Key Features Of Token Development (1).pptx
LBM Solutions
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
Delhi Call girls
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
Mark Billinghurst
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
ThousandEyes
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
OnBoard
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
hans926745
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
Padma Pradeep
Dernier
(20)
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
Slack Application Development 101 Slides
Slack Application Development 101 Slides
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Key Features Of Token Development (1).pptx
Key Features Of Token Development (1).pptx
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
Linux KVM のコードを追いかけてみよう
1.
Linux KVM
/VM 1 by Tsuyoshi Ozawa, softlab@univ. of Tsukuba. Twitter: oza_x86 2009 8 13 1
2.
2009
8 13 2
3.
1. VMM
2. Intel-VT 3. Linux KVM KVM 2009 8 13 3
4.
VMM 2009
8 13 4
5.
VMM 2009
8 13 5
6.
Virtual Machine
Monitor 2009 8 13 6
7.
Virtual Machine
Monitor 1. 2. (OS) 2009 8 13 7
8.
VMM 2009
8 13 8
9.
2009
8 13 9
10.
2009
8 13 10
11.
Qemu 2009
8 13 11
12.
2009
8 13 12
13.
2009
8 13 13
14.
Qemu 2009
8 13 14
15.
2009
8 13 15
16.
CPU 2009
8 13 16
17.
Main Memory
... ALU movl %eax %ebx ... 2009 8 13 17
18.
Main Memory
... ALU movl %eax %ebx ... fetch 2009 8 13 18
19.
Qemu
... 2009 8 13 19
20.
Qemu
Main Memory ... ALU movl %eax %ebx ... fetch 2009 8 13 20
21.
opcode = mem[pc];
execute(opcode); 2009 8 13 21
22.
mov
opcode = mem[pc]; execute(opcode); jmp 2009 8 13 22
23.
• 2009
8 13 23
24.
2009
8 13 24
25.
opcode[0..N] = mem[pc];
mid_ops=compile(opcode); execute(mid_ops); 2009 8 13 25
26.
opcode[0..N] = mem[pc];
mid_ops=compile(opcode); execute(mid_ops); 2009 8 13 26
27.
opcode[0..N] = mem[pc];
mid_ops=compile(opcode); execute(mid_ops); 2009 8 13 27
28.
2009
8 13 28
29.
2009
8 13 29
30.
•
• • 2009 8 13 30
31.
2009
8 13 31
32.
2009
8 13 32
33.
VMM 2009
8 13 33
34.
KVM 2009
8 13 34
35.
• 2009
8 13 35
36.
.section .data
message: .ascii "hello,gas!n" .section .text .global _start _start: movl $4,%eax movl $1,%ebx movl $message,%ecx movl $12,%edx int $0x80 2009 8 13 36
37.
./a.out
hello,gas! 2009 8 13 37
38.
Hello world 2009
8 13 38
39.
printf(“HelloWorld¥n”) 2009
8 13 39
40.
printf 2009
8 13 40
41.
2009
8 13 41
42.
2009
8 13 42
43.
write 2009
8 13 43
44.
write
out 2009 8 13 44
45.
.section .data
message: .ascii "hello,gas!n" .section .text .global _start _start: movl $4,%eax movl $1,%ebx movl $message,%ecx out movl $12,%edx int $0x80 2009 8 13 45
46.
...
outb %ax ... 2009 8 13 46
47.
Program
Display CPU outb 2009 8 13 47
48.
hello,gas! 2009
8 13 48
49.
• 2009
8 13 49
50.
•
VM 2009 8 13 50
51.
.section .data
message: .ascii "hello,gas!n" .section .text .global _start _start: movl $4,%eax movl $1,%ebx movl $message,%ecx out movl $12,%edx int $0x80 2009 8 13 51
52.
...
outb $hogehoge ... 2009 8 13 52
53.
hello,gas! 2009
8 13 53
54.
OS
. 2009 8 13 54
55.
VM
Virtual Program Display VirtualCPU outb 2009 8 13 55
56.
VM
Program Real Display VirtualCPU outb 2009 8 13 56
57.
hello,gas!
on host system?! 2009 8 13 57
58.
2009
8 13 58
59.
2009
8 13 59
60.
2009
8 13 60
61.
2009
8 13 61
62.
VM
out Virtual Program Display CPU 2009 8 13 62
63.
VM
out Virtual Program Display CPU outb 2009 8 13 63
64.
VM
out 2009 8 13 64
65.
Emu
Code trap CPU 2009 8 13 65
66.
Emu
Code CPU handle 2009 8 13 66
67.
VM
out Emu ret Code CPU 2009 8 13 67
68.
VM
out ack Virtual Program Display CPU 2009 8 13 68
69.
VM
out out 2009 8 13 69
70.
2009
8 13 70
71.
2009
8 13 71
72.
x86 2009
8 13 72
73.
? 2009
8 13 73
74.
2009
8 13 74
75.
2009
8 13 75
76.
? 2009
8 13 76
77.
2009
8 13 77
78.
x86
? 2009 8 13 78
79.
...
? 2009 8 13 79
80.
2009
8 13 80
81.
2009
8 13 81
82.
x86
• • Hypervisor Call • Xen 2009 8 13 82
83.
x86
• • LilyVM 2009 8 13 83
84.
x86
• • (JIT ) • VMWare 2009 8 13 84
85.
2009
8 13 85
86.
Intel
( AMD-V ) 2009 8 13 86
87.
Intel-VT 2009
8 13 87
88.
CPU
? 2009 8 13 88
89.
User
Privilege 2009 8 13 89
90.
User
Privilege 2009 8 13 90
91.
2009
8 13 91
92.
User
User warp Privilege Privilege 2009 8 13 92
93.
2009
8 13 93
94.
User
User Privilege Privilege 2009 8 13 94
95.
User
User Privilege Privilege 2009 8 13 95
96.
User
User Privilege Privilege trap 2009 8 13 96
97.
User
User Privilege Privilege Intel-VT 2009 8 13 97
98.
User
Privilege 2009 8 13 98
99.
VMX-Root Mode
(VM ) 2009 8 13 99
100.
User
Privilege 2009 8 13 100
101.
VMX-non root Mode
( ) 2009 8 13 101
102.
VMX non Root
Mode 2009 8 13 102
103.
User
User Privilege Privilege 2009 8 13 103
104.
vmlaunch
vmresume 2009 8 13 104
105.
KVM 2009
8 13 105
106.
KVM 2009
8 13 106
107.
Kernel-based
Virtul Machine 2009 8 13 107
108.
KVM 2009
8 13 108
109.
KVM
• •Intel-VT • •Qemu • •Linux • •Linux 2009 8 13 109
110.
KVM
• •Intel-VT • •Qemu • •Linux • •Linux KVM 2009 8 13 110
111.
KVM
• •VM • • • • OS 2009 8 13 111
112.
2009
8 13 112
113.
2009
8 13 113
114.
Main loop 2009
8 13 114
115.
KVM 2009
8 13 115
116.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 116
117.
2009
8 13 117
118.
VMX
VMX non Root Root Mode Mode 2009 8 13 118
119.
2009
8 13 119
120.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 120
121.
VMX non Root
Mode 2009 8 13 121
122.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 122
123.
User
Qemu KVM Program Qemu Linux Guest KVM Kernel Kernel 2009 8 13 123
124.
./qemu -hda disk1.img
(-hda ) 2009 8 13 124
125.
User
Qemu Program $ ./qemu -hda disk1 Linux Guest KVM Kernel Kernel 2009 8 13 125
126.
User
Qemu Program Qemu Linux Guest KVM Kernel Kernel 2009 8 13 126
127.
Qemu 2009
8 13 127
128.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel 2009 8 13 128
129.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 129
130.
2009
8 13 130
131.
2009
8 13 131
132.
vmlaunch
vmresume 2009 8 13 132
133.
VMX non Root
Mode 2009 8 13 133
134.
User
Qemu Program Linux Guest KVM VT Kernel Kernel 2009 8 13 134
135.
2009
8 13 135
136.
vmlaunch
vmresume 2009 8 13 136
137.
User
Qemu Program vmlaunch / vmresume Linux Guest KVM Kernel Kernel 2009 8 13 137
138.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 138
139.
VMX non root
Mode 2009 8 13 139
140.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 140
141.
2009
8 13 141
142.
VMX non Root
Mode IO 2009 8 13 142
143.
2009
8 13 143
144.
outb %ax 2009
8 13 144
145.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 145
146.
User
Qemu Program Linux Guest KVM Kernel Kernel outb %ax 2009 8 13 146
147.
VMX Root Mode 2009
8 13 147
148.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 148
149.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 149
150.
2009
8 13 150
151.
Qemu 2009
8 13 151
152.
User
Qemu Program IOCTL return Linux Guest KVM Kernel Kernel 2009 8 13 152
153.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 153
154.
User
Qemu Program io Linux Guest KVM Kernel Kernel 2009 8 13 154
155.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 155
156.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 156
157.
2009
8 13 157
158.
IOCTL
CPU 2009 8 13 158
159.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel 2009 8 13 159
160.
2009
8 13 160
161.
... 2009
8 13 161
162.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel vmlaunch vmresume 2009 8 13 162
163.
2009
8 13 163
164.
2009
8 13 164
165.
KVM
kvm-85 2009 8 13 165
166.
2009
8 13 166
167.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 167
168.
Qemu 2009
8 13 168
169.
$./qemu -hda disk1
... 2009 8 13 169
170.
qemu/vl.c main.c 2009
8 13 170
171.
4439 int
4440 { main (int argc, char **argv, char **envp) // . Shadow page table . 5425 kvm_qemu_create_context() // 5493 kvm_init(smp_cpus); ... // qemu/hw/pc.c 5554 machine->init(ram_size, vga_ram_size, boot_devices, 5555 kernel_filename, kernel_cmdline, 5556 initrd_filename, cpu_model); ... ... 5742 main_loop(); ... 5747 } 2009 8 13 171
172.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 172
173.
User
Qemu Program Qemu Linux Guest KVM Kernel Kernel 2009 8 13 173
174.
-
•machine->init • • qemu/hw/pc.c pc_init1 2009 8 13 174
175.
2009
8 13 175
176.
2009
8 13 176
177.
pc_init1
pc_new_cpu cpu_init = cpu_x86_init kvm_init_cpu pthread_create ap_main_loop kvm_main_loop_cpu 2009 8 13 177
178.
2009
8 13 178
179.
2009
8 13 179
180.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel 2009 8 13 180
181.
IOCTL 2009
8 13 181
182.
...
qemu/kvm-all.c kvm_cpu_exec 2009 8 13 182
183.
378 static int
kvm_main_loop_cpu (CPUState *env) 379 { 394 while (1) { 395 while (!has_work(env)) 396 kvm_main_loop_wait(env, 1000); 397 if (env->interrupt_request & (CPU_INTERRUPT_HARD | CPU_INTERRUPT_NMI)) 398 env->halted = 0; // . .... 404 } 405 if (!env->halted && !env->kvm_cpu_state.init) { 406 kvm_cpu_exec(env); // } } 413 } 2009 8 13 183
184.
int kvm_cpu_exec(){
... 461 ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); 478 switch (run->exit_reason) { 479 case KVM_EXIT_IO: 481 ret = kvm_handle_io(env, run->io.port, 482 (uint8_t *)run + run>io.data_offset, 483 run->io.direction, 484 run->io.size, 485 run->io.count); 486 break; case KVM_EXIT_MMIO: .... ... 2009 8 13 184
185.
648 int kvm_vcpu_ioctl(CPUState
*env, int type, ...) 649 { 658 ret = ioctl(env->kvm_fd, type, arg); 659 if (ret == -1) 660 ret = -errno; 661 662 return ret; 663 } 2009 8 13 185
186.
2009
8 13 186
187.
IOCTL 2009
8 13 187
188.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel 2009 8 13 188
189.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 189
190.
2009
8 13 190
191.
2009
8 13 191
192.
IOCTL 2009
8 13 192
193.
IOCTL 2009
8 13 193
194.
2009
8 13 194
195.
static struct file_operations
kvm_vcpu_fops = { .release = kvm_vcpu_release, .unlocked_ioctl = kvm_vcpu_ioctl, .compat_ioctl = kvm_vcpu_ioctl, .mmap = kvm_vcpu_mmap, }; 2009 8 13 195
196.
//
file->f_op = kvm_vcpu_fops; 2009 8 13 196
197.
kvm_vcpu_ioctl 2009
8 13 197
198.
static long kvm_vcpu_ioctl(struct
file *filp, unsigned int ioctl, unsigned long arg) { switch (ioctl) { case KVM_RUN: r = kvm_arch_vcpu_ioctl_run(vcpu, vcpu->run); break; .... } 2009 8 13 198
199.
VMX non Root
Mode 2009 8 13 199
200.
User
Qemu Program Linux Guest KVM VT Kernel Kernel 2009 8 13 200
201.
... 2009
8 13 201
202.
kvm_arch_vcpu_ioctl_run
__vcpu_run vcpu_enter_guest vmx_vcpu_run 2009 8 13 202
203.
vmx_vcpu_run
kernel/x86/vmx.c 2009 8 13 203
204.
User
Qemu Program vmlaunch / vmresume Linux Guest KVM Kernel Kernel 2009 8 13 204
205.
2009
8 13 205
206.
2009
8 13 206
207.
include/asm-x86/vmx.h
#define ASM_VMX_VMLAUNCH ".byte 0x0f, 0x01, 0xc2" #define ASM_VMX_VMRESUME ".byte 0x0f, 0x01, 0xc3" 2009 8 13 207
208.
2009
8 13 208
209.
vmlaunch/vmresume 2009
8 13 209
210.
User
Qemu Program vmlaunch / vmresume Linux Guest KVM Kernel Kernel 2009 8 13 210
211.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 211
212.
VMX non-root mode 2009
8 13 212
213.
2009
8 13 213
214.
VMX non Root
Mode IO 2009 8 13 214
215.
2009
8 13 215
216.
2009
8 13 216
217.
outb %ax 2009
8 13 217
218.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 218
219.
User
Qemu Program Linux Guest KVM Kernel Kernel outb %ax 2009 8 13 219
220.
2009
8 13 220
221.
"jne .Llaunched nt"
__ex(ASM_VMX_VMLAUNCH) "nt" "jmp .Lkvm_vmx_return nt" ".Llaunched: " __ex(ASM_VMX_VMRESUME) "nt" ".Lkvm_vmx_return: " vmlaunch /* */ vmresume ... ... 2009 8 13 221
222.
"jne .Llaunched nt"
__ex(ASM_VMX_VMLAUNCH) "nt" "jmp .Lkvm_vmx_return nt" ".Llaunched: " __ex(ASM_VMX_VMRESUME) "nt" ".Lkvm_vmx_return: " /* */ ... 2009 8 13 222
223.
2009
8 13 223
224.
2009
8 13 224
225.
out 2009
8 13 225
226.
out
in . 2009 8 13 226
227.
Intel-VT 2009
8 13 227
228.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 228
229.
2009
8 13 229
230.
Qemu 2009
8 13 230
231.
User
Qemu Program IOCTL return Linux Guest KVM Kernel Kernel 2009 8 13 231
232.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 232
233.
int kvm_cpu_exec(){
... 461 ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); 478 switch (run->exit_reason) { 479 case KVM_EXIT_IO: 481 ret = kvm_handle_io(env, run->io.port, 482 (uint8_t *)run + run>io.data_offset, 483 run->io.direction, 484 run->io.size, 485 run->io.count); 486 break; case KVM_EXIT_MMIO: .... ... 2009 8 13 233
234.
outb 2009
8 13 234
235.
int kvm_cpu_exec(){
... // 461 ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); 478 switch (run->exit_reason) { 479 case KVM_EXIT_IO: 481 ret = kvm_handle_io(env, run->io.port, 482 (uint8_t *)run + run>io.data_offset, 483 run->io.direction, 484 run->io.size, 485 run->io.count); 486 break; case KVM_EXIT_MMIO: outb .... ... 2009 8 13 235
236.
2009
8 13 236
237.
IO 2009
8 13 237
238.
User
Qemu Program io Linux Guest KVM Kernel Kernel 2009 8 13 238
239.
2009
8 13 239
240.
out 2009
8 13 240
241.
outb %al 2009
8 13 241
242.
outb %al 2009
8 13 242
243.
(
) 2009 8 13 243
244.
int kvm_cpu_exec(){
... // 461 ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); 478 switch (run->exit_reason) { 479 case KVM_EXIT_IO: 481 ret = kvm_handle_io(env, run->io.port, 482 (uint8_t *)run + run>io.data_offset, 483 run->io.direction, 484 run->io.size, 485 run->io.count); 486 break; case KVM_EXIT_MMIO: .... ... 2009 8 13 244
245.
kvm_handle_io
cpu_outb ioport_write 2009 8 13 245
246.
static void ioport_write(int
index, uint32_t address, uint32_t data) { static IOPortWriteFunc *default_func[3] = { default_ioport_writeb, default_ioport_writew, default_ioport_writel }; IOPortWriteFunc *func = ioport_write_table[index][address]; if (!func) func = default_func[index]; func(ioport_opaque[address], address, data); } ioport_write_table 2009 8 13 246
247.
(
) 2009 8 13 247
248.
User
Qemu Program io Linux Guest KVM Kernel Kernel 2009 8 13 248
249.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 249
250.
User
Qemu Program Linux Guest KVM Kernel Kernel 2009 8 13 250
251.
2009
8 13 251
252.
IOCTL
CPU 2009 8 13 252
253.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel 2009 8 13 253
254.
2009
8 13 254
255.
... 2009
8 13 255
256.
User
Qemu Program IOCTL Linux Guest KVM Kernel Kernel vmlaunch 2009 8 13 vmresume 256
257.
2009
8 13 257
258.
378 static int
kvm_main_loop_cpu(CPUState *env) 379 { 394 while (1) { 395 while (!has_work(env)) 396 kvm_main_loop_wait(env, 1000); 397 if (env->interrupt_request & (CPU_INTERRUPT_HARD | CPU_INTERRUPT_NMI)) 398 env->halted = 0; // . .... 404 } 405 if (!env->halted && !env->kvm_cpu_state.init) { 406 kvm_cpu_exec(env); // } } 413 } 2009 8 13 258
259.
2009
8 13 259
260.
Twitter 2009
8 13 260
Télécharger maintenant