硬科技:為何x86的虛擬化這麼難搞(中)

2020.03.10 08:00AM
照片中包含了英特爾、英特爾、集成電路、中央處理器、現場可編程門陣列

前情提要。各位科科想必已經了解,多工作業系統是一種常見的虛擬化應用,只要執行「動搖國本」的特權指令,或可能破壞系統強固性的應用程式,都將統一經由系統呼叫介面,在作業系統的監控下取得服務,不會也不能直接存取底層硬體資源,以免隨便動一動,整台電腦的軟體通通一起壯烈殉情。

在這裡各位科科也可以趁機學到2個專有名詞,並釐清某些相當然耳的既成概念,這也是虛擬化應用的一部分。

ABI和API傻傻分不清楚

照片中提到了應用程式、系統呼叫、(ABI),包含了設計、英特爾、產品設計、設計、牌

同樣採用x86指令集架構的Windows和Linux,卻無法相互執行其應用程式?

同樣是Windows作業系統,無法在32位元OS上執行x64版本應用程式?(這裡就先不提WoW了)

32位元Windows作業系統可以執行所有Win32應用程式?無須重新編譯?

因為ABI(Application Binary Interface)定義了機器碼如何存取資料結構與運算程式,此處所定義的介面相當低階並且相依於硬體,結合處理器指令集與作業系統的服務呼叫等雙重特性,讓編譯好的目的碼(Object Code)可順暢運行,無須修改。不同的作業系統有其相異的ABI規範,所以在一般條件下Windows無法執行Linux應用程式,反之亦同。

那和常見的「應用程式介面」API(Application Programming Interface)有何不同?

API的功能在於「讓程式碼可在支援相同API的環境中編譯」,定義的是「程式碼與作業系統/函式庫之間的抽象介面」,提高應用程式的維護性和擴展性。中國那邊譯作「應用編程介面」其實是比較貼切的翻譯。

「Binary Translation(二進位代碼轉換)」是在處理器虛擬化領域經常出現的名詞,那像IBM的PowerVM Lx86,可在Power系統上執行x86的Linux應用程式,請問是動到那一層?

當然是ABI啊,答案不是很清楚嗎?

照片中提到了Linux kernel-to-userspace、Linux kernel-internal、API stability is guaranteed, source code,包含了linux標準、Linux內核接口、應用程序接口、應用程序二進制接口、Linux標準庫

「中斷」和「例外」也不一樣

「計算機(Computer,或叫電腦)」與「計算器(Calculator)」最大的不同點在於「進行條件判斷」與「變更執行流程」的能力,可依據不同的條件,執行不同的指令,做為人類用來處理資料的工具,以產生有效的資訊。這麼簡單的道理,相信各位科科都懂。

那如果外部週邊裝置要求傳輸資料,如飢腸轆轆嗷嗷待哺的I/O,或著發生了不可預期的狀況,像程式所需要的指令和資料並不位於存取的記憶體位址、算術邏輯運算單位出現溢位、應用程式嘗試做出可能危害作業系統核心的舉動,作業系統那該如何應對?

前者是「硬體中斷(Interrupt)」,硬體發出指令集定義的中斷請求(IRQ,有在古早電腦的BIOS調整過板卡週邊IRQ互衝的科科應該都有點年紀了),處理器暫停執行,作業系統藉由維護中斷向量表,去找出相對應的中斷處理服務的位址,進一步進行中斷發生後的後繼作業。後者則是俗稱「軟體中斷」的「例外(Exception)」,講的白話一點,作業系統的「設陷(Trap)」實作就綁在處理器的例外機能上面,或著換個角度,處理器廠商有義務在指令集層面提供適當的功能,方便作業系統廠商實現多工環境。

照片中提到了Interrupt Process (from three potential sources)、Hardware、Processor,包含了硬件中斷、打斷、處理、中斷處理程序、中斷請求

軟硬兼備才能克盡全功

因此,像確保系統安定性的「雙模式運作」、處理器警告作業系統潛在危險的「侵權觸發例外」、提高切換速度的「執行資料結構」(如上篇提到的TSS)、以及強化應用程式與作業系統互動的「標準化系統呼叫介面」,都是需要處理器指令集與作業系統兩者兼備才能功德圓滿。這也是x86指令集到了80386支援分頁式虛擬記憶體和虛擬86模式,才足以支撐高效能多工作業系統條件的理由。

大多數人一談到x86指令集的歷代重大擴充,多半第一時間只會想到從MMX、SSE、SSE2、SSE3、SSE4到AVX這些讓理論運算效能變得比較好看的SIMD指令,但滿足「作業系統生存基本需要」才是真正的舉足輕重,而這些「平日基本功」的效率,更是決定處理器效能的關鍵,無論Intel AMD從不敢輕忽,只是容易被忽略,站在時代浪頭上的科科除外。

但x86上的硬體虛擬化可沒這麼簡單,科科。

照片中提到了Virtualization Performance Improvements、• Intel® Virtualization technology、addresses today's IT concerns,跟英特爾有關,包含了英特爾、網頁、組織、線

資料來源

2 則回應

  • 你要己經推出好幾年的 Windows Subsystem for Linux 情何以堪
    2020-04-27
  • 1980年代,有好幾個電腦迷思,AI、平行處理、可容錯系統,在那個時候都開始發展,有人可以介紹一下,可容錯系統到底商業化了沒?
    2020-03-10