怎麼讓intel晶片開啟晶片虛擬化(晶片也是一個硬體實現的虛擬機)
2023-09-22 10:18:22 3
怎麼讓intel晶片開啟晶片虛擬化?晶片和虛擬機的相同點是什麼?,下面我們就來說一說關於怎麼讓intel晶片開啟晶片虛擬化?我們一起去了解並探討一下這個問題吧!

怎麼讓intel晶片開啟晶片虛擬化
晶片和虛擬機的相同點是什麼?
它們都使用二進位的指令。
晶片和虛擬機的不同點是什麼?
晶片是用硬體電路實現的,而虛擬機是用軟體代碼實現的。
從物理上來說兩者的區別很大,但從數學上來說,兩者沒有區別。
1,計算機是一個分層次的信息處理系統,
計算機系統是分層次、分模塊的,而且不同的層次和模塊之間的耦合度很低。
如果耦合度高了,那說明設計的不好,例如英特爾的CISC指令集[捂臉]
指令的選擇和寄存器的分配,在編譯器裡本來是互不幹擾的兩個步驟,但是intel的乘法因為使用默認寄存器(eax, edx),給軟體帶來了額外的複雜度。
所以,CISC指令集就不是一個好的設計,因為指令和寄存器之間的耦合度太大。
正常的設計應該是像ARM那樣:指令只做指令的事,寄存器只做寄存器的事,井水不犯河水。
實際上,ARM的各個指令之間也分的很詳細:
1)LDR指令只負責把數據從內存加載到寄存器,
2)STR指令只負責把數據從寄存器保存到內存,
3)其他指令只負責在寄存器內運算,不訪問內存,
所以,ARM是一個層次劃分的非常好的指令集。
同樣是寫(機器碼生成的)代碼,ARM的就可以用for循環,而intel的就會有更多的if else[笑哭]
if else多了之後,代碼就會非常難看。
所以說,最好的代碼是這樣的:
for (i = 0; i handler(ctx);
if (ret < 0)
return ret;
}
return 0;
總之,不管分了多少層,每一層要做什麼,不同的層次之間是不能互相干擾的。
這是計算機系統的設計原則。
2,在分層設計之後,更換個別層次的實現方式,不該對整個系統產生影響。
所以,Linux既可以在CPU上跑,也可以在qemu虛擬機上跑。
甚至,虛擬機都可以裝在windows上,然後Linux還是一樣跑。
為什麼可以這樣?
就是因為計算機是個分層次的、耦合度很低的系統。
每一層的實現對於其他層來說是個「黑盒」,每一層的運行也不依賴其他層的細節,只需要API。
所以,指令集就是底層系統(晶片、虛擬機)與上層軟體之間的API。
至於底層系統使用虛擬機去實現,還是使用硬體電路去實現,都不會對上層軟體造成幹擾。
當然硬體電路的速度會更快,因為它是直接基於自然界的電磁理論的[呲牙]
但是,除了運行速度不同之外,虛擬機和硬體電路之間沒有數學和哲學上的不同。
3,晶片的指令集可以做成虛擬機,虛擬機的指令集也可以做成晶片。
在信息處理的意義上,它們是等價的。
抽象代數認為,加法和乘法都是群,就是因為它們都是二元運算符,都能把集合上的兩個數變成一個數。
不管是虛擬機還是晶片電路,都能把指令碼跑起來。
所以從抽象的角度看,它們是相同的。
「道德經」上說,「同謂之玄」。
所以C 能做的事,java也能做[捂臉]
java就是在虛擬機上跑的,C 編譯之後是在CPU上跑的。
,