《处理器虚拟化技术》
《處理器虛擬化技術》
基本信息
作者: 鄧志???
出版社:電子工業出版社
ISBN:9787121230196
上架時間:2014-5-30
出版日期:2014 年6月
開本:16開
頁碼:646
版次:1-1
所屬分類:計算機 > 計算機組織與體系結構 > 微處理器/CPU
更多關于》》》《處理器虛擬化技術》
?
編輯推薦
《處理器虛擬化技術》一書深入講解了Intel VT-x技術的VMX架構知識,并且對整個x86/x64體系有更深入的探討!全書案例豐富,結構規整,可讀性強!
?
內容簡介
??? 書籍
??? 計算機書籍
《處理器虛擬化技術》針對在intel處理器端的虛擬化技術(intel virtualization technology for x86,即intel vt-x)進行全面講解。在intel vt-x技術下實現了vmx(virtual-machine extensions,虛擬機擴展)架構平臺來支持對處理器的虛擬化管理。因此,vmx架構是intel vt-x技術的核心。《處理器虛擬化技術》內容圍繞vmx架構實現細節展開全面講解。但intel vt-d(virtualization technology for directed i/o)和intel vt-c(virtualization technology for connectivity)技術并不在本書的描述范圍。同時,也不針對amd-v技術進行討論。
《處理器虛擬化技術》共分為7章,書的整體結構也較為規整,可讀性比較強。《處理器虛擬化技術》共提供14個例子,對vmx架構的一些特色功能進行輔助講解。
讀者閱讀《處理器虛擬化技術》,可以學習intel vt-x技術的vmx架構知識,并且對整個x86/x64體系有更深入的了解!可以說,不了解vmx架構,根本算不上對x86/x64體系熟悉,因為,在處理器的虛擬化技術里需要使用全方位的體系知識,對處理器在非常細節的地方進行虛擬化處理。
因此,《處理器虛擬化技術》適合有一定x86/x64體系知識基礎或者想更深入學習x86/x64體系知識的讀者。
?
?
目錄
《處理器虛擬化技術》
第1 章 系統平臺 1
1.1 環境及工具 1
1.1.1 使用vmware 2
1.1.2 使用bochs 4
1.1.3 在真實機器上運行 4
1.1.4 build 工具 4
1.2 64 位與32 位代碼的混合編譯 7
1.2.1 使用符號__x64 7
1.2.2 指令操作數 8
1.2.3 64-bit 模式下其他指令處理 11
1.2.4 函數重定義表 15
1.3 地址空間 17
1.4 數據結構 23
1.4.1 pcb 結構 23
1.4.2 lsb 結構 37
1.4.3 初始化pcb 38
1.4.4 sda 結構 42
1.4.5 初始化sda 56
1.4.6 drs 結構 57
1.5 系統啟動 59
1.5.1 boot 階段 59
1.5.2 stage1 階段 62
1.5.2.1 stage1 階段的多處理器初始化 66
1.5.2.2 bsp 的收尾工作 68
1.5.2.3 aps 的stage1 階段工作 70
1.5.3 stage2 階段 73
1.5.3.1 bsp 在stage2 最后處理 80
1.5.3.2 aps 在stage2 階段收尾工作 81
1.5.4 stage3 階段 83
1.5.4.1 bsp 在stage3 階段的最后工作 87
1.5.4.2 aps 在stage3 階段收尾工作 88
1.5.5 例子1-1 90
1.6 系統機制 91
1.6.1 分頁機制 91
1.6.1.1 pae 分頁模式實現 91
1.6.1.2 ia-32e 分頁模式實現 98
1.6.2 多處理器機制 102
1.6.2.1 調度任務 102
1.6.2.2 處理器切換 109
1.6.3 調試記錄機制 113
1.6.3.1 例子1-2 120
1.6.3.2 運行結果 121
第2 章 vmx 架構基礎 122
2.1 虛擬化概述 123
2.1.1 虛擬設備 124
2.1.2 地址轉換 125
2.1.3 設備的i/o 訪問 125
2.2 vmx 架構 126
2.2.1 vmm 與vm 127
2.2.2 vmxon 與vmcs 區域 127
2.2.3 檢測vmx 支持 128
2.2.4 開啟vmx 進入允許 128
2.3 vmx operation 模式 129
2.3.1 進入vmx operation 模式 130
2.3.2 進入vmx operation 的制約 131
2.3.2.1 ia32_feature_control 寄存器 131
2.3.2.2 cr0 與cr4 固定位 133
2.3.2.3 a20m 模式 135
2.3.3 設置vmxon 區域 135
2.3.3.1 分配vmxon 區域 135
2.3.3.2 vmxon 區域初始設置 135
2.3.4 退出vmx operation 模式 136
2.4 vmx operation 模式切換 137
2.4.1 vm entry 138
2.4.2 vm exit 139
2.4.3 smm 雙重監控處理下 140
2.5 vmx 能力的檢測 141
2.5.1 檢測是否支持vmx 141
2.5.2 通過msr 組檢查vmx 能力 141
2.5.3 例子2-1 146
2.5.4 基本信息檢測 147
2.5.5 允許為0 以及允許為1 位 149
2.5.5.1 決定vmx 支持的功能 150
2.5.5.2 控制字段設置算法 150
2.5.6 vm-execution 控制字段 151
2.5.6.1 pin-based vm-execution control 字段 151
2.5.6.2 primary processor-based vm-execution control 字段 152
2.5.6.3 secondary processor-based vm-execution control 字段 152
2.5.7 vm-exit control 字段 152
2.5.8 vm-entry control 字段 153
2.5.9 vm-function control 字段 153
2.5.10 cr0 與cr4 的固定位 154
2.5.10.1 cr0 與cr4 寄存器設置算法 155
2.5.11 vmx 雜項信息 156
2.5.12 vmcs 區域字段index 值 157
2.5.13 vpid 與ept 能力 157
2.6 vmx 指令 158
2.6.1 vmx 指令執行環境 159
2.6.2 指令執行的狀態 159
2.6.3 vmfailvalid 事件原因 160
2.6.4 指令異常優先級 161
2.6.5 vmcs 管理指令 161
2.6.5.1 vmptrld 指令 162
2.6.5.2 vmptrst 指令 162
2.6.5.3 vmclear 指令 162
2.6.5.4 vmread 指令 163
2.6.5.5 vmwrite 指令 165
2.6.6 vmx 模式管理指令 166
2.6.6.1 vmxon 指令 167
2.6.6.2 vmxoff 指令 167
2.6.6.3 vmlaunch 指令 167
2.6.6.4 vmresume 指令 168
2.6.6.5 返回到executive monitor 168
2.6.7 cache 刷新指令 169
2.6.7.1 invept 指令 170
2.6.7.2 invvpid 指令 170
2.6.8 調用服務例程指令 171
2.6.8.1 vmcall 指令 171
2.6.8.2 vmfunc 指令 172
第3 章 vmcs 結構 173
3.1 vmcs 狀態 173
3.1.1 activity 屬性 174
3.1.2 current 屬性 174
3.1.3 launch 屬性 174
3.2 vmcs 區域 175
3.2.1 vmxon 區域 176
3.2.2 executive-vmcs 與smm-transfer vmcs 176
3.2.3 vmcs 區域格式 176
3.3 訪問vmcs 字段 177
3.3.1 字段id 格式 178
3.3.2 不同寬度的字段處理 179
3.4 字段id 值 181
3.4.1 16 位字段id 181
3.4.2 64 位字段id 182
3.4.3 32 位字段id 184
3.4.4 natural-width 字段id 185
3.5 vm-execution 控制類字段 187
3.5.1 pin-based vm-execution control 字段 188
3.5.2 processor-based vm-execution control 字段 190
3.5.2.1 primary processor-based vm-execution control 字段 191
3.5.2.2 secondary processor-based vm-execution control 字段 195
3.5.3 exception bitmap 字段 200
3.5.4 pfec_mask 與pfec_match 字段 200
3.5.5 i/o bitmap address 字段 202
3.5.6 tsc offset 字段 202
3.5.7 guest/host mask 與read shadow 字段 202
3.5.8 cr3-target 字段 203
3.5.9 apic-access address 字段 203
3.5.10 virtual-apic address 字段 204
3.5.11 tpr threshold 字段 204
3.5.12 eoi-exit bitmap 字段 204
3.5.13 posted-interrupt notification vector 字段 205
3.5.14 posted-interrupt descriptor address 字段 205
3.5.15 msr bitmap address 字段 205
3.5.16 executive-vmcs pointer 206
3.5.17 eptp 字段 206
3.5.18 virtual-processor identifier 字段 207
3.5.19 ple_gap 與ple_window 字段 207
3.5.20 vm-function control 字段 209
3.5.21 eptp-list address 字段 210
3.6 vm-entry 控制類字段 210
3.6.1 vm-entry control 字段 211
3.6.2 vm-entry msr-load 字段 214
3.6.3 事件注入控制字段 214
3.6.3.1 vm-entry interruption information 字段 215
3.6.3.2 vm-entry exception error code 字段 217
3.6.3.3 vm-entry instruction length 字段 217
3.7 vm-exit 控制類字段 218
3.7.1 vm-exit control 字段 218
3.7.2 vm-exit msr-store 與msr-load 字段 220
3.8 guest-state 區域字段 221
3.8.1 段寄存器字段 224
3.8.1.1 access right 字段 224
3.8.2 gdtr 與idtr 字段 229
3.8.3 msr 字段 229
3.8.4 smbase 字段 229
3.8.5 activity state 字段 230
3.8.6 interruptibility state 字段 232
3.8.7 pending debug exceptions 字段 235
3.8.7.1 #db 異常的處理 237
3.8.8 vmcs link pointer 字段 243
3.8.9 vmx-preemption timer value 字段 243
3.8.10 pdptes 字段 243
3.8.11 guest interrupt status 字段 244
3.9 host-state 區域字段 245
3.10 vm-exit 信息類字段 247
3.10.1 基本信息類字段 248
3.10.1.1 exit reason 字段 248
3.10.1.2 vm-exit 原因 249
3.10.1.3 exit qualification 字段 255
3.10.1.4 由某些指令引發的vm-exit 256
3.10.1.5 由#db 異常引發的vm-exit 256
3.10.1.6 由#pf 異常引發的vm-exit 257
3.10.1.7 由sipi 引發的vm-exit 257
3.10.1.8 由i/o smi 引發的vm-exit 257
3.10.1.9 由任務切換引發的vm-exit 258
3.10.1.10 訪問控制寄存器引發的vm-exit 259
3.10.1.11 由mov-dr 指令引發的vm-exit 260
3.10.1.12 由i/o 指令引發的vm-exit 260
3.10.1.13 由于訪問apic-access page 引發的vm-exit 261
3.10.1.14 由ept violation 引發的vm-exit 262
3.10.1.15 由eoi 虛擬化引發的vm-exit 264
3.10.1.16 由apic-write 引發的vm-exit 264
3.10.1.17 guest-linear address 字段 264
3.10.1.18 guest-physical address 字段 265
3.10.2 直接向量事件類信息字段 265
3.10.2.1 vm-exit interruption information 字段 265
3.10.2.2 vm-exit interruption error code 字段 267
3.10.3 間接向量事件類信息字段 267
3.10.3.1 idt-vectoring information 字段 268
3.10.3.2 idt-vectoring error code 字段 269
3.10.4 指令類信息字段 269
3.10.4.1 vm-exit instruction length 字段 269
3.10.4.2 vm-exit instruction information 字段 272
3.10.5 i/o smi 信息類字段 280
3.10.6 指令錯誤類字段 280
3.11 vmm 初始化實例 280
3.11.1 vmcs 相關的數據結構 281
3.11.1.1 vmb 結構 281
3.11.1.2 vsb 結構 284
3.11.1.3 vmcs buffer 結構 287
3.11.2 初始化vmxon 區域 288
3.11.3 初始化vmcs 區域 289
3.11.3.1 分配vmcs 區域 290
3.11.3.2 vmcs 初始化模式 291
3.11.3.3 vmcs buffer 初始化 293
3.11.4 例子3-1 297
第4 章 vm-entry 處理 301
4.1 發起vm-entry 操作 302
4.2 vm-entry 執行流程 303
4.3 指令執行的基本檢查 303
4.4 檢查控制區域及host-state 區域 305
4.4.1 vm-execution 控制區域檢查 305
4.4.1.1 檢查pin-based vm-execution control 字段 306
4.4.1.2 檢查primary processor-based vm-execution control 字段 306
4.4.1.3 檢查secondary processor-based vm-execution control 字段 307
4.4.1.4 檢查cr3-target 字段 308
4.4.2 vm-exit 控制區域檢查 308
4.4.2.1 vm-exit control 字段的檢查 308
4.4.2.2 msr-store 與msr-load 相關字段的檢查 308
4.4.3 vm-entry 控制區域檢查 309
4.4.3.1 vm-entry control 字段的檢查 309
4.4.3.2 msr-load 相關字段的檢查 309
4.4.3.3 事件注入相關字段的檢查 309
4.4.4 host-state 區域的檢查 310
4.4.4.1 host 控制寄存器字段的檢查 310
4.4.4.2 host-rip 的檢查 310
4.4.4.3 段selector 字段的檢查 311
4.4.4.4 段基址字段的檢查 311
4.4.4.5 msr 字段的檢查 311
4.5 檢查guest-state 區域 311
4.5.1 檢查控制寄存器字段 312
4.5.2 檢查rip 與rflags 字段 312
4.5.3 檢查dr7 與ia32_debugctl 字段 313
4.5.4 檢查段寄存器字段 313
4.5.4.1 virtual-8086 模式下的檢查 314
4.5.4.2 unrestricted guest 位為0 時的檢查 315
4.5.4.3 unrestricted guest 位為1 時的檢查 318
4.5.5 檢查gdtr 與idtr 字段 320
4.5.6 檢查msr 字段 320
4.5.7 檢查activity state 字段 321
4.5.8 檢查interruptibility state 字段 321
4.5.9 檢查pending debug exception 字段 322
4.5.10 檢查vmcs link pointer 字段 322
4.5.11 檢查pdpte 字段 323
4.5.11.1 由加載cr3 引發的pdpte 檢查 323
4.6 檢查guest state 引起的vm-entry 失敗 324
4.7 加載guest 環境信息 324
4.7.1 加載控制寄存器 325
4.7.2 加載dr7 與ia32_debugctl 325
4.7.3 加載msr 325
4.7.4 smbase 字段處理 326
4.7.5 加載段寄存器與描述符表寄存器 326
4.7.5.1 unusable 段寄存器 327
4.7.5.2 加載gdtr 與idtr 327
4.7.6 加載rip、rsp 和rflags 327
4.7.7 加載pdpte 表項 327
4.8 刷新處理器cache 328
4.9 更新vritual-apic 狀態 328
4.9.1 ppr 虛擬化 329
4.9.2 虛擬中斷評估與delivery 329
4.10 加載msr-load 列表 329
4.10.1 ia32_efer 的加載處理 330
4.10.2 其他msr 字段的加載處理 331
4.11 由加載guest state 引起的vm-entry 失敗 331
4.12 事件注入 332
4.12.1 注入事件的delivery 335
4.12.1.1 保護模式下的事件注入 335
4.12.1.2 實模式下的事件注入 338
4.12.1.3 virtual-8086 模式下的事件注入 338
4.12.2 注入事件的間接vm-exit 339
4.13 執行pending debug exception 341
4.13.1 注入事件下的#db 異常delivery 342
4.13.2 例子4-1 346
4.13.3 非注入事件下的#db 異常delivery 351
4.14 使用mtf vm-exit 功能 354
4.14.1 注入事件下的mtf vm-exit 354
4.14.2 非注入事件下的mtf vm-exit 355
4.14.3 mtf vm-exit 與其他vm-exit 355
4.14.4 mtf vm-exit 的優先級別 356
4.14.5 例子4-2 356
4.15 vm-entry 后直接導致vm-exit 的事件 362
4.15.1 vm-exit 事件的優先級別 362
4.15.2 tpr below threshold vm-exit 363
4.15.3 pending mtf vm-exit 364
4.15.4 由pending debug exception 引發的vm-exit 364
4.15.5 vmx-preemption timer 364
4.15.6 nmi-window exiting 366
4.15.7 interrupt-window exiting 367
4.16 處理器的可中斷狀態 367
4.16.1 中斷的阻塞狀態 367
4.16.2 阻塞狀態的解除 368
4.16.3 中斷的阻塞 369
4.16.4 vm-entry 后的可中斷狀態 370
4.17 處理器的活動狀態 370
4.17.1 active 與inactive 狀態 371
4.17.2 事件的阻塞 371
4.17.3 inactive 狀態的喚醒 372
4.17.4 vm-entry 后的活動狀態 372
4.18 vm-entry 的機器檢查事件 373
第5 章 vm-exit 處理 374
5.1 無條件引發vm-exit 的指令 374
5.2 有條件引發vm-exit 的指令 375
5.3 引發vm-exit 的事件 377
5.4 由于vm-entry 失敗導致的vm-exit 380
5.5 例子5-1 380
5.6 指令引發的異常與vm-exit 385
5.6.1 優先級高于vm-exit 的異常 386
5.6.2 vm-exit 優先級高于指令的異常 387
5.6.3 例子5-2 387
5.7 vm-exit 的處理流程 389
5.8 記錄vm-exit 的相關信息 390
5.9 更新vm-entry 區域字段 391
5.10 更新處理器狀態信息 391
5.10.1 直接vm-exit 事件下的狀態更新 393
5.10.2 間接vm-exit 事件下的狀態更新 394
5.10.3 其他情況下的狀態更新 395
5.11 保存guest 環境信息 397
5.11.1 保存控制寄存器,debug 寄存器及msr 397
5.11.2 保存rip 與rsp 397
5.11.3 保存rflags 399
5.11.4 保存段寄存器 399
5.11.5 保存gdtr 與idtr 400
5.11.6 保存activity 與interruptibility 狀態信息 400
5.11.7 保存pending debug exception 信息 400
5.11.8 保存vmx-preemption timer 值 402
5.11.9 保存pdpte 402
5.11.10 保存smbase 與vmcs-link pointer 403
5.12 保存msr-store 列表 403
5.13 加載host 環境 404
5.13.1 加載控制寄存器 404
5.13.2 加載dr7 與msr 405
5.13.3 加載host 段寄存器 405
5.13.3.1 加載selector 406
5.13.3.2 加載base 406
5.13.3.3 加載limit 406
5.13.3.4 加載access rights 407
5.13.4 加載gdtr 與idtr 408
5.13.5 加載rip,rsp 及rflags 408
5.13.6 加載pdpte 408
5.14 更新host 處理器狀態信息 409
5.15 刷新處理器cache 信息 409
5.16 加載msr-load 列表 410
5.17 vmx-abort 411
第6 章 內存虛擬化 412
6.1 ept(擴展頁表)機制 412
6.1.1 ept 機制概述 413
6.1.1.1 guest 分頁機制與ept 413
6.1.2 ept 頁表結構 416
6.1.3 guest-physical address 417
6.1.4 eptp 417
6.1.5 4k 頁面下的ept 頁表結構 418
6.1.6 2m 頁面下的ept 頁表結構 422
6.1.7 1g 頁面下的ept 頁表結構 424
6.1.8 ept 導致的vm-exit 426
6.1.8.1 ept violation 426
6.1.8.2 ept misconfiguration 427
6.1.8.3 ept 頁故障的優先級 428
6.1.8.4 修復ept 頁故障 431
6.1.9 accessed 與dirty 標志位 436
6.1.10 ept 內存類型 438
6.1.11 eptp switching 440
6.1.12 實現ept 機制 442
6.2 cache 管理 454
6.2.1 linear mapping(線性映射) 455
6.2.2 guest-physical mapping(guest 物理映射) 456
6.2.3 combined mapping(合并映射) 457
6.2.4 cache 域 458
6.2.5 cache 建立 463
6.2.6 cache 刷新 465
6.2.6.1 invlpg 指令刷新cache 468
6.2.6.2 invpcid 指令刷新cache 468
6.2.6.3 invvpid 指令刷新cache 469
6.2.6.4 invept 指令刷新cache 470
6.2.6.5 invvpid 指令使用指南 470
6.2.6.6 invept 指令使用指南 471
6.3 內存虛擬化管理 473
6.3.1 分配物理內存 473
6.3.2 實模式guest os 內存處理 475
6.3.3 guest 內存虛擬化 476
6.3.3.1 guest 虛擬地址轉換 477
6.3.3.2 guest os 的cache 管理 479
6.4 例子6-1 482
6.4.1 guestboot 模塊 483
6.4.2 guestkernel 模塊 486
6.4.3 vsb 結構 495
6.4.4 vmm 初始化guest 498
6.4.5 使用vmx-preemption timer 503
6.4.6 host 處理流程 507
6.4.7 運行結果 511
第7 章 中斷虛擬化 522
7.1 異常處理 522
7.1.1 反射異常給guest 523
7.1.2 恢復guest 異常 526
7.1.2.1 直接恢復 526
7.1.2.2 例子7-1 527
7.1.2.3 恢復原始向量事件 533
7.1.3 處理任務切換 535
7.1.3.1 檢查任務切換條件 535
7.1.3.2 vmm 處理任務切換 537
7.1.3.3 恢復guest 運行 547
7.1.3.4 例子7-2 551
7.2 local apic 虛擬化 554
7.2.1 監控guest 訪問local apic 554
7.2.1.1 例子7-3 555
7.2.2 local apic 虛擬化機制 571
7.2.3 apic-access page 573
7.2.3.1 apic-access page 的設置 574
7.2.4 虛擬化x2apic msr 組 577
7.2.5 virtual-apic page 578
7.2.6 apic-access vm-exit 581
7.2.6.1 apic-access vm-exit 優先級別 581
7.2.7 虛擬化讀取apic-access page 582
7.2.8 虛擬化寫入apic-access page 584
7.2.9 虛擬化基于msr 讀local apic 587
7.2.10 虛擬化基于msr 寫local apic 588
7.2.11 虛擬化基于cr8 訪問tpr 589
7.2.12 local apic 虛擬化操作 589
7.2.12.1 tpr 虛擬化 590
7.2.12.2 ppr 虛擬化 591
7.2.12.3 eoi 虛擬化 591
7.2.12.4 self-ipi 虛擬化 593
7.2.13 虛擬中斷的評估與delivery 593
7.2.13.1 虛擬中斷的評估 594
7.2.13.2 虛擬中斷的delivery 596
7.2.14 posted-interrupt 處理 597
7.3 中斷處理 601
7.3.1 攔截int 指令 601
7.3.1.1 處理idtr.limit 602
7.3.1.2 處理#gp 異常 605
7.3.1.3 處理中斷delivery 608
7.3.1.4 完成中斷的delivery 操作 618
7.3.1.5 例子7-4 628
7.3.2 處理nmi 632
7.3.2.1 攔截nmi 632
7.3.2.2 虛擬nmi 634
7.3.3 處理外部中斷 634
7.3.3.1 攔截外部中斷 634
7.3.3.2 轉發外部中斷 635
7.3.3.3 監控guest 設置8259 637
7.3.3.4 例子7-5 642
本圖書信息來源:互動出版網
轉載于:https://www.cnblogs.com/china-pub/p/3806047.html
總結
以上是生活随笔為你收集整理的《处理器虚拟化技术》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ajax完成python flask
- 下一篇: Shell 脚本——测试命令