回覆列表
  • 1 # 使用者5484369306615

    我沒有檢視過deepin的具體原始碼,所以不知道它具體是怎麼實現的。但是基本原理還是知道點的。

    當虛擬機器軟體搭建虛擬機器的時候,虛擬機器軟體需要對虛擬機器的整個執行環境進行模擬,主要包括CPU、記憶體、南北橋晶片、磁碟等。單純靠軟體對這些裝置進行模擬是很耗CPU資源的,導致虛擬機器的效能比較差,特別是CPU。硬體廠商(主要是CPU廠商)為了解決這種效能問題,慢慢地將一些模擬功能搬到硬體上,如Intel的VT-x、VT-d技術。同時OS廠商也在為了提高虛擬機器的效能,針對虛擬機器環境提供一些新特性(如Windows的Hyper-v)、新驅動介面,或者新的虛擬裝置(如virtio、vhost等)的支援。

    為了讓OS廠商的新特性、新驅動、新裝置介面能否發揮出應有的作用,則需要讓OS知道自己執行在虛擬機器環境。所以其實系統能夠檢測到自己執行在虛擬機器環境是硬體廠商、虛擬機器模擬器廠商和OS廠商為了提高虛擬機器的效能有意為之的。

    具體實現方式有很多,比如:

    在CPU方面,以Intel的x86為例,直接執行作業系統和執行虛擬機器內的作業系統其實CPU的執行模式是不一樣的,CPU完全可以做到在不同模式下,若程式訪問某個CPU暫存器的時候,返回不一樣的結果,讓程式知道自己是執行在物理機上還是執行在虛擬機器上。虛擬機器軟體方面,由於虛擬機器軟體可以截獲虛擬機器內CPU很多資源訪問(暫存器、IO口、記憶體等),虛擬機器軟體完全可以透過截獲虛擬機器內CPU的這些資源訪問,讓這些訪問返回虛擬機器軟體想要的結果,例如虛擬機器內的CPU在訪問CPU型號資訊的時候,虛擬機器軟體可以截獲該訪問,然後讓該訪問返回kvm、qemu、virtualbox、vmware之類的欄位,讓虛擬機器內的軟體知道自己執行在虛擬機器上。在IO裝置方面,有些模擬的裝置其實是沒有對應的物理裝置,如virtio這種裝置,是沒有對應的物理裝置的,如果虛擬機發現有這種裝置,則也可以知道自己執行在虛擬機器中。

    所以,目前作業系統知道自己執行在虛擬機器中並不奇怪,是人們有意為之的,而且方法也聽多,目的是為了讓作業系統能夠調整到一個更適合虛擬機器環境的狀態,從而提高虛擬機器的效能和使用者體驗。

  • 中秋節和大豐收的關聯?
  • 沒有任何輔助工具要怎麼看盤?