解剖KVM的內部是如何運作的?

2021-10-01 03:35:06 字數 1416 閱讀 7929

1. kvm架構

kvm基本結構有2個部分構成:

kvm 驅動,現在已經是linux kernel的乙個模組了。其主要負責虛擬機器的建立,虛擬記憶體的分配,vcpu暫存器的讀寫以及vcpu的執行。

另個組成是qemu,用於模擬虛擬機器的使用者空間元件,提供i/o裝置模型,訪問外設的途徑。

圖1 kvm基本結構

kvm基本結構如上圖。kvm已經是核心模組,被看作是乙個標準的linux 字符集裝置(/dev/kvm)。qemu通過libkvm應用程式介面,用fd通過ioctl向裝置驅動來傳送建立,執行虛擬機器命令。裝置驅動kvm就會來解析命令(kvm_dev_ioctl函式在kvm_main.c檔案中),如下圖:

圖2 kvm_dev_ioctl函式

kvm 模組讓linux主機成為乙個虛擬機器監視器(vmm),並且在原有的linux兩種執行模式基礎上,新增加了客戶模式,客戶模式擁有自己的核心模式和使用者模式。在虛擬機器執行時,三種模式的工作各為:

客戶模式: 執行非i/o的客戶**,虛擬機器執行在這個模式下。

使用者模式:代表使用者執行i/o指令,qemu執行在這個模式下。

核心模式:實現客戶模式的切換,處理因為i/o或者其他指令引起的從客戶模式退出(vm_exit)。kvm 模組工作在這個模式下。

在kvm的模型中,每乙個gust os都是作為乙個標準的linux程序,都可以使用linux程序管理命令管理。

這裡假如qemu通過ioctl發出kvm_create_vm 指令,建立了乙個vm後,qemu需要需要傳送一些命令給vm,如kvm_create_vcpu。這些命令當然也是通過ioctl傳送的,使用者程式中用ioctl傳送kvm_create_vm得到的返回值就是新建立的vm對應的fd(kvm_vm),fd是建立的指向特定虛擬機器例項的檔案描述符,之後利用這個fd傳送命令給vm進行訪問控制。kvm解析這些命令的函式是kvm_vm_ioctl。

2. kvm 工作原理

kvm基本工作原理概述:

使用者模式的qemu利用libkvm通過ioctl進入核心模式,kvm模組未虛擬機器建立虛擬記憶體,虛擬cpu後執行vmlauch指令進入客戶模式。載入guest os並執行。如果guest os 發生外部中斷或者影子頁表缺頁之類的情況,會暫停guest os的執行,退出客戶模式出行異常處理,之後重新進入客戶模式,執行客戶**。如果發生i/o事件或者訊號佇列中有訊號到達,就會進入使用者模式處理。(如下圖)

圖3 kvm工作原理流程圖

(文段節選自網路)

ERP系統是如何運作的呢?

如果您的企業在滿足生產計畫方面落後,並且導致製造過程中的其他問題 如積壓或高成本 那麼企業資源規劃 erp 系統可能是您的可行選擇之一。企業資源規劃 erp 軟體是一種能夠管理企業各個領域的資訊系統,例如產品,客戶,商,員工,生產設施等。erp系統監督和控制製造工廠內的資源,其中它作為乙個綜合商業軟...

關係型資料庫是如何運作的 上

作為一名開發者,我討厭使用我不明白的技術。此外,關係型資料庫已經使用超40年,肯定有它過人的原因。因此,我花了大量時間來想真正弄懂它裡面如同黑盒子那樣的奧秘。關係型資料庫實際上是非常有趣的,因為它是基於實用和復用的概念。但是限於篇幅,以下我將把重點放在資料庫如何處理sql查詢的問題上。本文內容大致劃...

關係型資料庫是如何運作的 上

作為一名開發者,我討厭使用我不明白的技術。此外,關係型資料庫已經使用超40年,肯定有它過人的原因。因此,我花了大量時間來想真正弄懂它裡面如同黑盒子那樣的奧秘。關係型資料庫實際上是非常有趣的,因為它是基於實用和復用的概念。但是限於篇幅,以下我將把重點放在資料庫如何處理sql查詢的問題上。本文內容大致劃...