本文僅是基於「了解基本概念」層面,所以會寫的比較簡單,想深入了解的同學可以讀一下兩篇很經典的*****:disco: running commodity operating systems on scalable multiprocessors和virtual machine monitors
肘子直接吃了其他人站在巨人肩膀上摘下的蘋果了。
jvm是程式級虛擬機器,在這裡就不贅述。
可以像物理機器一樣執行程式的一類執行在機器上的軟體
系統級虛擬機器:提供乙個足以支撐起乙個完整作業系統執行的平台
比如,vmware
程式級虛擬機器:為了執行單個外來程式而設計的
比如,jvm
系統級虛擬機器是由虛擬機器監視器(hypervisor或者virtual machine monitor,vmm)控制管理的,它提供了復用host機器的硬體資源(cpu,記憶體,i/o)硬體**介面的一類軟體。
全虛擬化(full visualization)
每個客戶作業系統(guest os)所發出的指令都要被翻譯成cpu能識別的指令格式
所以hypervisor的工作負荷會很大,因此會占用一定的資源,所以在效能方面不如裸機,但是執行速度要快於硬體模擬。
全虛擬化最大的優點就是執行在虛擬機器上的作業系統沒有經過任何修改,唯一的限制就是作業系統必須能夠支援底層的硬體。
比如,kvm
半虛擬化
在全虛擬化的基礎上,把客戶作業系統進行了修改,增加了乙個專門的api(hypercalls),這個api可以將客戶作業系統發出的指令進行最優化,即不需要hypervisor耗費一定的資源進行翻譯操作,因此hypervisor的工作負擔變得非常的小,因此整體的效能也有很大的提高。
缺點就是,要修改包含該api的作業系統,但是對於某些不含該api的作業系統(主要是windows)來說,就不行能用這種方法。
比如,xen
隨著硬體虛擬化技術的逐漸演化,執行於intel平台的全虛擬化的效能已經超過了準虛擬化產品,這一點在64位的作業系統上表現的更為明顯。加之,全虛擬化不需要對客戶機作業系統做任何修改的固有優勢。
參考:主要涉及三大方面:cpu的虛擬化,記憶體虛擬化,i/o虛擬化
cpu虛擬化旨在解決:如何安全地有效地讓cpu執行guestos的指令
根據cpu mode可以將指令分類如下:
對於host os:
非特權指令(non-privileged instructions)
all other instructions
比如,常規的算術運算
對於guest os:
privilege instructions與sensitive instructions的聯絡:
eg. x86和arm都是non-virtualizable cpu。
以inel vt-x為例,non-virtualizable cpu執行過程
目的是為了解決如何讓guestos訪問記憶體
目的在於模擬guestos訪問i/o裝置。
以kvm中guestos的應用需要訪問i/o裝置為例
了解一下就好了鏈結
【後記】
虛擬機器的坑很深,要是想要深入了解,最好辦法是實踐,比如,「kvm與其它虛擬化工具或雲計算平台的結合方案 (qemu、virtio、openstack)」
系統虛擬機器管理
bin bash 命令執行環境的指定 virt install 安裝虛擬機器 name 1 虛擬機器名稱指定,1表示指令碼後的第一串字元 ram 1000 記憶體 file var lib libvirt images 1.img 硬碟檔案 file size 8 硬碟檔案大小 cdrom var ...
系統虛擬機器管理
1.安裝 1.圖形安裝 選擇安裝方式 設定虛擬機器記憶體和cpu 設定記憶體大小 設定虛擬機器名稱 接下來根據設定嚮導一步步完成設定即可。2.指令碼安裝 bin bash 命令執行環境的指定 virt install 安裝虛擬機器 name 1 虛擬機器名稱指定,1表示指令碼後的第一串字元 ram ...
Linux centos系統虛擬機器配置
當裝好後開機進入登入root進入系統 ip addr 檢視網路資訊,第二項有ens33 vi etc sysconfig network scripts ifcfg ens33 修改onboot yes退出 service network restart 重啟網路服務,使配置生效 然後再次通過 ip...