深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现
前 言
第1章 CPU虛擬化 1
1.1 x86架構CPU虛擬化 1
1.1.1 陷入和模擬模型 2
1.1.2 x86架構虛擬化的障礙 2
1.1.3 VMX 3
1.1.4 VCPU生命周期 5
1.2 虛擬機切入和退出 8
1.2.1 GCC內聯匯編 8
1.2.2 虛擬機切入和退出及相關的上下文保存 10
1.3 陷入和模擬 15
1.3.1 訪問外設 15
1.3.2 特殊指令 22
1.3.3 訪問具有副作用的寄存器 27
1.4 對稱多處理器虛擬化 28
1.4.1 MP Table 28
1.4.2 處理器啟動過程 33
1.5 一個簡單KVM用戶空間實例 41
1.5.1 創建虛擬機實例 43
1.5.2 創建內存 43
1.5.3 創建處理器 44
1.5.4 Guest 46
1.5.5 加載Guest鏡像到內存 47
1.5.6 運行虛擬機 47
第2章 內存虛擬化 49
2.1 內存尋址 49
2.1.1 段式尋址 50
2.1.2 平坦內存模型 50
2.1.3 頁式尋址 54
2.1.4 頁式尋址實例 55
2.2 VMM為Guest準備物理內存 61
2.2.1 內核是如何獲取內存的 62
2.2.2 建立內存段信息 64
2.2.3 準備中斷0x15的處理函數以及設置IVT 65
2.2.4 中斷0x15的處理函數實現 68
2.2.5 虛擬內存條 69
2.3 實模式Guest的尋址 72
2.3.1 設置CPU運行于Virtual-8086模式 74
2.3.2 設置Guest模式下的cr3寄存器 75
2.3.3 虛擬MMU的上下文 75
2.3.4 缺頁異常處理 77
2.4 保護模式Guest的尋址 81
2.4.1 偷梁換柱cr3 83
2.4.2 影子頁表缺頁異常處理 86
2.5 EPT 92
2.5.1 設置EPT頁表 93
2.5.2 EPT異常處理 95
2.5.3 EPT支持下的地址翻譯過程 97
第3章 中斷虛擬化 99
3.1 虛擬中斷 99
3.2 PIC虛擬化 102
3.2.1 可編程中斷控制器8259A 103
3.2.2 虛擬設備向PIC發送中斷請求 106
3.2.3 記錄中斷到IRR 107
3.2.4 設置待處理中斷標識 108
3.2.5 中斷評估 110
3.2.6 中斷ACK 112
3.2.7 關于EOI的處理 113
3.2.8 中斷注入 114
3.3 APIC虛擬化 116
3.3.1 外設中斷過程 118
3.3.2 核間中斷過程 123
3.3.3 IRQ routing 125
3.4 MSI(X)虛擬化 128
3.4.1 MSI(X)Capability數據結構 129
3.4.2 建立IRQ routing表項 131
3.4.3 MSI設備中斷過程 132
3.5 硬件虛擬化支持 134
3.5.1 虛擬中斷寄存器頁面(virtual-APIC page) 134
3.5.2 Guest模式下的中斷評估邏輯 136
3.5.3 posted-interrupt processing 139
第4章 設備虛擬化 142
4.1 設備虛擬化模型演進 142
4.2 PCI配置空間及其模擬 144
4.3 設備透傳 152
4.3.1 虛擬配置空間 153
4.3.2 DMA重映射 157
4.3.3 中斷重映射 160
4.4 完全虛擬化 166
4.4.1 Guest發送數據 167
4.4.2 Guest接收數據 173
第5章 Virtio虛擬化 182
5.1 I/O棧 182
5.1.1 文件系統 182
5.1.2 通用塊層 190
5.1.3 塊設備驅動 194
5.1.4 page cache 196
5.1.5 bio 201
5.1.6 I/O調度器 202
5.2 Virtio協議 204
5.2.1 描述符表 205
5.2.2 可用描述符區域 207
5.2.3 已用描述符區域 208
5.2.4 Virtio設備的PCI配置空間 209
5.3 初始化Virtqueue 210
5.4 驅動根據I/O請求組織描述符鏈 216
5.5 驅動通知設備處理請求 221
5.6 設備處理I/O請求 222
5.7 驅動側回收I/O請求 226
5.8 設備異步處理I/O 229
5.9 輕量虛擬機退出 231
5.9.1 創建eventfd 232
5.9.2 kvmtool監聽eventfd 235
5.9.3 VM exit處理函數喚醒I/O任務 236
第6章 網絡虛擬化 239
6.1 基于Overlay的虛擬網絡方案 239
6.1.1 計算節點 240
6.1.2 網絡節點 247
6.1.3 Open vSwitch 251
6.2 虛擬機訪問外部主機 255
6.2.1 數據包在計算節點Linux網橋中的處理 256
6.2.2 數據包在計算節點的Open vSwitch中的處理 257
6.2.3 數據包在網絡節點的Open vSwitch中的處理 265
6.3 外部主機訪問虛擬機 272
6.3.1 數據包在網關中的處理過程 273
6.3.2 數據包在網絡節點的Open vSwitch中的處理 274
6.3.3 數據包在計算節點的Open vSwitch中的處理 279
6.3.4 數據包在Linux網橋中的處理 283
總結
以上是生活随笔為你收集整理的深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 娃哈哈董事长澄清!《狂飙》中AD钙奶不是
- 下一篇: 马斯克发话 推特将于3月31日开放其推荐