深度探索 Linux 系統虛擬化:原理與實現

王柏生,謝廣軍著

  • 出版商: 機械工業
  • 出版日期: 2020-10-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 292
  • 裝訂: 平裝
  • ISBN: 7111666062
  • ISBN-13: 9787111666066
  • 相關分類: Linux
  • 立即出貨 (庫存 < 3)

買這商品的人也買了...

商品描述

這是一部深度講解如何在Linux操作系統環境下用軟件虛擬出一台“物理”計算機的著作。
兩位作者都是百度的技術專家,一位是百度的主任架構師,一位是百度智能雲的副總經理,都在操作系統和虛擬化等領域有多年的實踐經驗。
本書從計算機體系結構、操作系統、硬件等多個方面深度探索瞭如何從CPU、內存、中斷、
外設、網絡5個維度去虛擬化Linux系統,不僅剖析了其中的關鍵技術原理,而且深入闡述了具體的實現。

全書共6章:
第1章:CPU虛擬化
介紹了X86架構下的VMX擴展,討論了在VMX下虛擬CPU的完整生命週期,
著重闡述了Host和Guest的切換、指令的模擬以及KVM是如何虛擬多處理器的。
第2章:內存虛擬化
討論了操作系統如何為虛擬機呈現物理內存,結合影子頁表以及EPT探討了KVM如何完成從GVA到HPA的2層地址映射。
第3章:中斷虛擬化
首先,討論了從單核系統的8259A開始,到多核系統的APIC,
再到繞開I/O APIC直接從設備向LAPIC發送基於消息的MSI的虛擬化原理和實現。
然後,討論了Intel為了提高效率,是如何從硬件層面對虛擬化中斷進行支持的,以及KVM是如何使用它們的。
第4~5章外設虛擬化
從完全虛擬化開始,依次講解了半虛擬化(Virtio)和Intel的VT-d支持下的硬件輔助虛擬化。
通過實現一個模擬串口帶領讀者直觀體會了設備虛擬化的基本原理,
然後深入闡述了Virito標準和實現,以及支持SR-IOV的DMA重映射和中斷重映射。
第6章網絡虛擬化
討論了在通用硬件網絡的基礎上,操作系統如何虛擬出專用的網絡設備,為租戶組建虛擬網絡。

作者簡介

王柏生

技術專家,先後就職於中科院軟件所、紅旗Linux和百度,現任百度主任架構師。
在操作系統、虛擬化技術、分佈式系統、雲計算、自動駕駛等相關領域耕耘多年,有著豐富的實踐經驗。
著有暢銷書《深度探索Linux操作系統》(2013年出版)。

 

謝廣軍


計算機專業博士,畢業於南開大學計算機系。
技術專家,有多年的IT行業工作經驗。
現擔任百度智能雲副總經理,負責雲計算相關產品的研發。
多年來一直從事操作系統、虛擬化技術、分佈式系統、大數據、
雲計算等相關領域的研發工作,實踐經驗豐富。

目錄大綱

目錄
前言
第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