讀書筆記 現代作業系統 8多處理機 8 3虛擬化

2021-07-15 11:12:21 字數 2892 閱讀 7489

虛擬化(virtualization)這種技術允許一台機器中存在多台虛擬機器,每一台虛擬機器可能執行不同的作業系統。

虛擬化起作用的原因是:

大部分伺服器停機的原因不是因為硬體的故障,而是因為臃腫、不可靠、有漏洞的軟體,特別是作業系統。使用虛擬化技術,唯一乙個執行在核心態的軟體是管理程式(hypervisor),它的**量比乙個完整作業系統的**量少兩個數量級,漏洞更少。

優勢:

- 減少了物理機器的數量從而節省了硬體、電源的開支以及占用更少的空間。

- 檢查點和虛擬機器的遷移比在乙個普通的作業系統中進行程序遷移更加容易。

- 執行那些不再被支援或不能再當前硬體上工作的作業系統中遺留的程式

- 在軟體開發中,乙個程式設計師想要在不同的作業系統上測試軟體

管理程式分為兩種

i型管理程式(虛擬機器監控器)

它實質上就是一種作業系統,因為他是唯一乙個執行子核心態的程式。它的工作是支援多個副本,也稱作虛擬機器(virtual macine),與普通的作業系統所支援的程序類似。

ii型管理程式

它只是乙個執行在作業系統平台上,能夠「解釋」機器指令集的使用者程式,它也建立了乙個虛擬機器。

執行在管理系統之上的作業系統統稱為客戶作業系統(guest operating system)

在ii型管理程式的情況下,執行在硬體上的作業系統稱為宿主作業系統(host operating system)

敏感指令(sensitive instruction):每個核心態和使用者態的處理器有一組只能在核心態執行的指令集合,比如io指令、改變mmu狀態的指令等。

特權指令(privileged instruction):如果在使用者態情況下執行會引起陷入。

當且僅當敏感指令是特權指令的子集時,機器才是可虛擬化的。

imb/370具有這樣的特性,但是intel386是不具有這樣的特性的,所以虛擬機器有兩種型別。

後來intel引入了vt技術(virtualization technology)。amd引入svm(secure virtual machine)。

vt等技術的基本思想是:建立容器使得虛擬機器可以在其內執行,當乙個客戶作業系統在一容器內啟動,它將繼續執行直到它引起了異常而陷入到管理程式。

在支援vt技術的處理器上,當客戶作業系統執行一條敏感指令時,發生到核心的陷入。管理程式分析分析指令,如果它是來自虛擬機器中的客戶作業系統還是來自虛擬機器中的使用者程式。

如果是作業系統指令,管理程式排程將要執行的指令。

如果是使用者程式指令,它**面對執行在使用者態的敏感指令時真是硬體的行為。如果虛擬機器支援vt,則陷入到虛擬機器的客戶作業系統中,如果不支援指令被忽略。

它實際上是vt技術出現之前的替代品。典型的應用是vmware。優點是即使在不可虛擬化的硬體上,它也能正常工作。

具體工作原理省略。這裡說明一點,ii性管理程式未必比i型的慢甚至還要更快。

另乙個流行的處理方法是更改作業系統的源**,從而略過敏感質量的執行,轉而呼叫管理程式呼叫。這個過程呼叫集合實際上形成了api,只是這個api用於作業系統呼叫。

這樣的優勢是以核心態執行在硬體上的程式應該短小、可靠,由更少的**組成。

但是準虛擬化也有一些問題:

如果所有指令都被管理指令所代替,作業系統如何在物理機器上執行呢?

市場上有多種管理指令,如果相容他們

乙個解決方案是當核心需要執行一些敏感操作時會轉而呼叫特殊的例程,這些特殊的例程稱為(vmi虛擬機器介面),形成的底層與硬體或管理程式進行互動。這些例程不依賴於特定硬體和管理程式。

在vmi之下有一些相容不同管理程式或硬體的函式庫從而實現適配。

從虛擬位址到實體地址的頁面對映。這個對映由(多級)頁表所定義。通過作業系統設定處理器中的控制暫存器,使之指向頂級頁表,從而動態設定頁面對映。

管理程式必須為每一台虛擬機器建立乙個影子頁表(shadow page table),用以實現該虛擬機器使用的虛擬頁面到管理程式分配給他們的物理頁面之間的對映。

問題在於每次作業系統改變頁表,管理程式必須相應的改變其影子頁表。但是作業系統改變記憶體就行,由於不需要敏感指令,管理程式根本不用知道這種改變,所以就不會更新它的由實際硬體使用的影子頁表。

客戶作業系統在啟動的時候會探測有哪些裝置。

一種方法是想客戶作業系統報告裝置資訊,然後客戶作業系統載入響應的裝置驅動程式以使用這些裝置。當裝置驅動器試圖進行io操作時,他們會讀寫裝置的硬體暫存器。這些指令是敏感指令,將會陷入到管理程式,管理程式根據需要讀取寫入資料。

這樣的問題是每個作業系統都認為它擁有全部的磁碟分割槽,而是灰機上虛擬機器比分區多的多,需要管理程式在物理磁碟上為每個虛擬機器建立乙個檔案或區域作為它的物理磁碟,並為其完成偏移量操作。這樣也帶來一些好處,可以為軟體遮蔽硬體公升級或更換帶來的影響。

另乙個問題是dma,dma使用實體地址,管理程式在dma操作開始之前介入,並完成位址轉換。不過帶有io的mmu出現後解決了這個問題

另一種操作io的方法是讓其中乙個虛擬機器執行標準的作業系統,並把其他虛擬機器的io請求全部反射給它去處理。這個虛擬作業系統成為domain0。

對於ii型管理程式:宿主作業系統保留所有連線到計算機上的所有怪異的io驅動程式。

對於i型管理程式:或者自身包含驅動,或者呼叫domain0中的驅動(類似於宿主作業系統)。略略

現代作業系統之多處理機系統(中)

多計算機是緊耦合cpu,不共享儲存器,每台計算機都有自己的儲存器。在多計算機中可採用兩種減緩機制。在第一種機制中,每個訊息首先被分解 由使用者軟體或網路介面進行 稱為有最大長度限制的快,稱為報。該交換機制稱為儲存轉換包交換,由願節點的網路介面卡注入到第乙個交換機的報組成。當整個包到達乙個乙個輸入緩衝...

讀書筆記 現代作業系統

ch1.1.作業系統中,抽象非常重要,乙個複雜的任務可以抽象成多個簡單的子任務,將複雜的硬體抽象成簡單的介面,書中針對向上層應用提供的介面做詳細的講解,但是對於使用者 終端使用者 介面不會做研究.2.作業系統中的資源有時間資源和空間資源,以及硬碟的空間資源,時間資源是時間復用的 如cpu的輪轉 空間...

《現代作業系統》讀書筆記 執行緒

執行緒是最小的任務排程單位,是依賴於程序而存在的迷你程序。和程序一樣,執行緒也有三種狀態 執行 就緒 阻塞。我認為,執行緒是程序中任務真正的執行者,而程序提供了記憶體空間 cpu 程式計數器以及暫存器讓執行緒使用。對於程序來說,多個程序之間無法分享記憶體空間,對於一些應用而言,共享記憶體空間的能力是...