OSI虛擬機模型
“虛擬”就是在暗示某時某地,雖然一個對象或者設備並不存在,但人們可以看到它
“虛擬機”這個詞容易讓許多人產生豐富的聯想。流行媒體和新聞廣播在報道關於計算機模擬和計算機游戲的新發展時,通常會用到“虛擬”這個詞。在任何一種情況下,使用“虛擬”就是在暗示某時某地,雖然一個物體或者設備並不存在,但人們可以看到它。虛擬的這一用法是關於擴展虛擬機發展的合理假設。擴展虛擬機的創建和繼續發展是計算機操作系統在能力和靈活性上的雙重邏輯提高。
要領悟擴展虛擬機模型,關鍵是要理解現代計算機是怎樣被設計的以及操作系統是如何控制它的。現代操作系統由一系列的指令集組成,指令集結合在一起組成服務例程。服務例程和數據結合在一起,成為提交給計算機的應用程序。把指令組合成一個服務例程,就好比辦公室職員將簡單的動作組合起來,完成一個更復雜的任務(比如辦公室供應目錄)一樣。例如,文員只有一個可以在內存執行的有限指令集。這些指令僅限於計算,記錄前一操作的結果,以及將某種信息存檔以備後用。單獨使用這些指令並沒有多大的價值,但是這些指令可以被組合成一個序列,使得文員完成一個辦公室供應目錄。這個指令序列可能會是:數出記錄紙的數量,記錄結果,數出鉛筆的數量,記錄結果,數出紙夾的數量,記錄結果,存檔保存。這個序列可以被反復使用,來完成目錄服務請求。使用“數出記錄紙的數量”這樣的指令,是假設辦公室文員具有像識別出記錄紙和精確計數這樣的本能。對於人類來講,識別物體和計數是文員大腦和眼睛的自然功能。而對於模擬的辦公室文員或者計算機,這些功能需要在硬件級別設計並在電路系統中體現。當詳細考察辦公室文員的動作時,很顯然需要在電路系統中實現一些經常使用的基本功能,而不是組合較簡單的指令。辦公室文員必須親自在辦公室走來走去,檢查物體,用記事本和鉛筆記錄計數結果等等。這些功能將被當作一系列重復的硬件動作和軟件指令來實現。例如,“記錄最後一次結果”這條指令將包括以下操作:訪問一個存儲部件(如磁盤存儲器),定位存儲數據的空間,在本地寄存器中獲得要記錄的數據,傳輸數據,以及將數據寫入硬盤。在電路層,有一個基本層,所有指令都是從這個層面上衍生而來。
最底層的指令是那些提交給計算機的零一代碼。它們生成移動數據,配置系統或者為下一個動作創建條件的操作。這個級別可以被認為是機器指令級別,操作系統級別的指令就是從這個級別上衍生出來的。現在,我們都清楚地知道任何指令集都是它下一層指令集的簡單組合。辦公室文員所要完成的任務,實際上是一系列子任務。這些子任務被組合在一起,形成一個更復雜的操作序列。當“目錄”命令下達給辦公室文員時,觀察者只能知道目錄這個詞的含義和辦公室文員的整體動作。底層的指令子集對於觀察者來說是不可見的。每個連續的指令層,包括機器電路,機器代碼,操作系統指令和應用程序代碼,都對它的下一層用戶隱藏底層指令。組合指令和構建更復雜操作的能力,是理解擴展虛擬機的關鍵。
擴展虛擬機的最終目標是建立計算機中並不存在的能力和模擬設備。例如,大部分計算機都有一個硬盤來存儲數據和程序指令。這個硬盤可能實際上在其它計算機上,或者由計算機上的多個設備組成的。在這種情況下,擴展虛擬機方法就是編寫一個指令序列,使用戶覺得計算機上只有一個硬盤驅動器。模擬出來的這個單一驅動器,它的存儲能力和所有計算機上的硬件驅動器的存儲能力相同。通過計算機,用戶只能看到一個硬件驅動器。用戶只要使用組合而成的指令,就可以像在一個大的硬件驅動器上存儲和獲取數據一樣。用戶調用的指令訪問由底層指令組合而成的子例程。子例程中的底層指令處理什麼樣的信息存儲在哪個硬盤上這樣的細節。