溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于qemu的簡(jiǎn)介

發(fā)布時(shí)間:2020-08-04 13:47:57 來(lái)源:億速云 閱讀:576 作者:清晨 欄目:編程語(yǔ)言

小編給大家分享一下關(guān)于qemu的簡(jiǎn)介,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!

一、QEMU簡(jiǎn)介

QEMU是法布里斯·貝拉在Linux內(nèi)核上寫(xiě)的一個(gè)CPU模擬器,這套開(kāi)放源碼的模擬器軟件與Bochs、PearPC近似,但具有后兩者所不具備的高速度及跨平臺(tái)等特性。QEMU可以在不同的機(jī)器上運(yùn)行獨(dú)自開(kāi)發(fā)的操作系統(tǒng)與軟件,經(jīng)由KQEMU這個(gè)開(kāi)源的加速器,能模擬至接近真實(shí)電腦的速度。QEMU構(gòu)思巧妙, 效率極高, 在借助核心態(tài)的KQEMU加速器之后,模擬代碼的執(zhí)行速度甚至能夠接近真實(shí)機(jī)器。QEMU已成為目前使用最廣泛的模擬器,KVM和Google Android的模擬器都是基于QEMU的。

QEMU是一款開(kāi)源的模擬器及虛擬機(jī)監(jiān)管器(Virtual Machine Monitor, VMM)。QEMU主要提供兩種功能給用戶使用。一是作為用戶態(tài)模擬器,利用動(dòng)態(tài)代碼翻譯機(jī)制來(lái)執(zhí)行不同于主機(jī)架構(gòu)的代碼。二是作為虛擬機(jī)監(jiān)管器,模擬全系統(tǒng),利用其他VMM(Xen, KVM, etc)來(lái)使用硬件提供的虛擬化支持,創(chuàng)建接近于主機(jī)性能的虛擬機(jī)。

用戶可以通過(guò)不同Linux發(fā)行版所帶有的軟件包管理器來(lái)安裝QEMU。如在Debian系列的發(fā)行版上可以使用下面的命令來(lái)安裝:

sudo apt-get install qemu

或者在紅帽系列的發(fā)行版上使用如下命令安裝:

sudo yum install qemu -y

除此之外,也可以選擇從源碼安裝。

獲取QEMU源碼

可以從QEMU官網(wǎng)上下載QEMU源碼的tar包,以命令行下載2.0版本的QEMU為例:

$wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2
$tar xjvf qemu-2.0.0.tar.bz2

如果需要參與到QEMU的開(kāi)發(fā)中,最好使用Git獲取源碼:

$git clone git://git.qemu-project.org/qemu.git

編譯及安裝

獲取源碼后,可以根據(jù)需求來(lái)配置和編譯QEMU。

$cd qemu-2.0.0 //如果使用的是git下載的源碼,執(zhí)行cd qemu
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror  --target-list="x86_64-softmmu"
$make -j8
$sudo make install

configure腳本用于生成Makefile,其選項(xiàng)可以用./configure --help查看。這里使用到的選項(xiàng)含義如下:

--enable-kvm:編譯KVM模塊,使QEMU可以利用KVM來(lái)訪問(wèn)硬件提供的虛擬化服務(wù)。
--enable-vnc:?jiǎn)⒂肰NC。
--enalbe-werror:編譯時(shí),將所有的警告當(dāng)作錯(cuò)誤處理。
--target-list:選擇目標(biāo)機(jī)器的架構(gòu)。默認(rèn)是將所有的架構(gòu)都編譯,但為了更快的完成編譯,指定需要的架構(gòu)即可。

二、基本原理

QEMU作為系統(tǒng)模擬器時(shí),會(huì)模擬出一臺(tái)能夠獨(dú)立運(yùn)行操作系統(tǒng)的虛擬機(jī)。如下圖所示,每個(gè)虛擬機(jī)對(duì)應(yīng)主機(jī)(Host)中的一個(gè)QEMU進(jìn)程,而虛擬機(jī)的vCPU對(duì)應(yīng)QEMU進(jìn)程的一個(gè)線程。

關(guān)于qemu的簡(jiǎn)介

QEMU結(jié)構(gòu)圖

系統(tǒng)虛擬化最主要是虛擬出CPU、內(nèi)存及I/O設(shè)備。虛擬出的CPU稱之為vCPU,QEMU為了提升效率,借用KVM、XEN等虛擬化技術(shù),直接利用硬件對(duì)虛擬化的支持,在主機(jī)上安全地運(yùn)行虛擬機(jī)代碼(需要硬件支持)。虛擬機(jī)vCPU調(diào)用KVM的接口來(lái)執(zhí)行任務(wù)的流程如下(代碼源自QEMU開(kāi)發(fā)者Stefan的技術(shù)博客):

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
     ioctl(KVM_RUN)
     switch (exit_reason) {
     case KVM_EXIT_IO:  /* ... */
     case KVM_EXIT_HLT: /* ... */
     }
}

QEMU發(fā)起ioctrl來(lái)調(diào)用KVM接口,KVM則利用硬件擴(kuò)展直接將虛擬機(jī)代碼運(yùn)行于主機(jī)之上,一旦vCPU需要操作設(shè)備寄存器,vCPU將會(huì)停止并退回到QEMU,QEMU去模擬出操作結(jié)果。

虛擬機(jī)內(nèi)存會(huì)被映射到QEMU的進(jìn)程地址空間,在啟動(dòng)時(shí)分配。在虛擬機(jī)看來(lái),QEMU所分配的主機(jī)上的虛擬地址空間為虛擬機(jī)的物理地址空間。

QEMU在主機(jī)用戶態(tài)模擬虛擬機(jī)的硬件設(shè)備,vCPU對(duì)硬件的操作結(jié)果會(huì)在用戶態(tài)進(jìn)行模擬,如虛擬機(jī)需要將數(shù)據(jù)寫(xiě)入硬盤(pán),實(shí)際結(jié)果是將數(shù)據(jù)寫(xiě)入到了主機(jī)中的一個(gè)鏡像文件中。

以上是關(guān)于qemu的簡(jiǎn)介的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI