VT 入門番外篇——初識 VT


寫在前面

  此系列是本人一個字一個字碼出來的,包括示例和實驗截圖。由於系統內核的復雜性,故可能有錯誤或者不全面的地方,如有錯誤,歡迎批評指正,本教程將會長期更新。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閑錢,可以打賞支持我的創作。如想轉載,請把我的轉載信息附在文章后面,並聲明我的個人信息和本人博客地址即可,但必須事先通知我

你如果是從中間插過來看的,請仔細閱讀 羽夏看Win系統內核——簡述 ,方便學習本教程。

  看此教程之前,問幾個問題,基礎知識儲備好了嗎?保護模式篇學會了嗎?練習做完了嗎?沒有的話就不要繼續了。


🔒 華麗的分割線 🔒


初識

  如下的內容節選自New Blue Pill並略微修改以更好的入門VT。如果自己了解這些基本概念,就沒必要看初識了。
  在討論VT之前我們首先談談虛擬概念。虛擬virtualization是指對計算機資源的抽象,一種常用的定義是:“虛擬就是這樣的一種技術,它隱藏了系統、應用和終端用戶賴以交互的計算機資源的物理性的一面,最常用的方法就是把單一的物理資源轉化為多個邏輯資源,當然也可以把多個物理資源轉化為一個邏輯資源(這在存儲設備和服務器上很常見)。”
  在2005年和2006年,IntelAMD都開發出了支持硬件虛擬技術的CPU,也就是在此時,x86平台才真正有可能實現完全虛擬化。2007年年初,Intel還進一步地發布了VT-d技術規范,從而在硬件上支持IO操作的虛擬化。隨着硬件虛擬化技術越來越廣泛的采用,開發者也開始用虛擬技術來做一些其他的事情。
  有了虛擬技術的基本概念,下面我們談談硬件虛擬化技術HEV。硬件虛擬化技術Hardware Enabled Virtualization,HEV也就是在硬件層面上,更確切地說是在CPU里對虛擬技術提供直接支持,並通過這種設計提高虛擬效率、降低開發難度。在硬件虛擬化技術誕生前,在編寫虛擬機的過程中,為了實現多個虛擬機上的真實物理地址隔離,需要編程實現把客戶機的物理地址翻譯為真實機器的物理地址。同時也需要給不同的客戶機操作系統編寫不同的虛擬設備驅動程序,使之能夠共享同一真實硬件資源。硬件虛擬化技術則在硬件上實現了內存地址甚至於IO設備的映射,因此大大簡化了編寫虛擬機的過程。而其硬件直接支持二次尋址和I/O映射的特性也提升了虛擬機在運行時的性能。
  在硬件虛擬化技術中,一個重要的概念就是VMM,英文全稱為Virtual Machine Monitor,有的書稱之為Hypervisor,它專指在使用硬件虛擬化技術時創建出的特權層,該層提供給虛擬機開發者,用來實現虛擬硬件與真實硬件的通信和一些事件處理操作,因此它的權限級別要大於或等於操作系統權限。如下為硬件虛擬化技術架構示意圖:

  如下是VMM的使用架構示意圖:

  由於我們介紹的是IntelVT技術,所以我們關注的是Intel-VTx。在VT技術中,設計架構上同樣存在兩種角色—虛擬機管理器Virtual Machine Monitors,VMM和客戶機Guest,兩者分處在VMX rootVMX non-root兩種模式下。VT技術的設計目標如下。
  對於VMM層,進入此層則代表進入了VMX root模式:

  1. 為每個虛擬機提供虛擬處理器,並且可以在恰當的時候把它放在真正的物理處理器上,從而使得這個虛擬處理器可以處理指令。
  2. VMM層可以控制處理器資源、物理內存、管理中斷和IO操作。

  對於Guest Machine,進入此層則代表進入了VMX non-root模式:

  1. 每個虛擬機使用相同的接口來使用虛擬處理器、內存、存儲設備等資源。
  2. 每個虛擬機可以獨立地不受干擾地運行,虛擬機間都是相互獨立的。
  3. 對於虛擬機來說,VMM層像是完全透明的。

  如下是VMM的生命周期示意圖:

  之前我們學過內核、驅動以及程序編寫,我們可以做一個對比:

  有了這些基本概念之后,我們就可以比較方便的繼續后續的入門。

准備

  在簡述當中,我們強調了要求有驅動開發的基礎,如果不會的話,請把 羽夏看Win系統內核——驅動篇 學習完畢再回來進行,當然保護模式的知識是基礎也不要落下。
  要實現VT最小框架,就需要一些匯編指令,比如vmxon等指令。這一切的一切編譯器並沒有提供,但是,微軟幫我們實現了這些功能,使得我們不必需要自己寫匯編來實現,提高代碼的可移植性,否則我們寫32位的VT移植到64位有一些是不一樣的,需要自己重新修改構建。只需要在驅動項目中引用intrin.h這個頭文件即可使用,x86 內部函數列表 中包含了所有的微軟幫我們實現的函數。
  由於我們是最小的VT架構實現,請把虛擬機按照我們初學保護模式的配置:單核、32位的WinXP,於此同時要開啟嵌套VT-x/AMD/V,否則就算你的VT架構代碼寫的是對的,也報錯:

推薦項目

  在GitHub上有比較成熟的項目 HyperPlatform ,學習好入門之后,可以根據自己的需要進行拓展。

下一篇

  VT 入門番外篇——最小 VT 實現(上)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM