1. 程式人生 > >第一章 作業系統概述(二)

第一章 作業系統概述(二)

1.1.2 廣義的作業系統產品

在前面的核心界定中,是以執行中的狀態來劃定作業系統邊界的,這實際上是唯一準確的界定方法,但是對初次接觸核心這一概念的人而言,還是會有些抽象,下面我們嘗試把這一概念與使用者日常使用作業系統的經驗建立一些關聯,以便有一個直觀的概念。

當我們使用作業系統這一術語時,實際有兩種不同的語義,當我們把作業系統作為研究物件時是狹義的語義,特指核心,本書後面章節不加特別說明時採用此狹義語義;使用者使用的作業系統常常是廣義的語義(本書中一般使用“作業系統產品”指代這一語義),在核心之外還要包含大量應用軟體提供基本的操作環境,如果僅有核心在執行,使用者是完全無法操作計算機機的。作業系統產品的典型例子是一個新安裝完成的系統,其主要構成部分如圖1-1所示。

圖1-1 作業系統產品組成

(1)作業系統核心:核心管理計算機系統中所有底層資源,遮蔽所有其他程式對硬體的直接訪問,但是會以“系統呼叫”形式提供相應的資源訪問服務,任何核心之外的軟體最終都要通過核心使用系統資源。

(2)系統函式庫:程式設計時一般不會直接使用核心提供的系統呼叫介面,因為直接呼叫需要按照核心的規定設定一些CPU暫存器的值,最後以特定機器指令觸發,所以必須用匯編語言編寫。正常情況下這個呼叫過程會經過系統函式庫的封裝,最終以庫函式的形式提供高階語言的呼叫介面。系統函式庫可能由不同層次的多個函式庫組成,並且可能有針對不同程式語言的繫結,但是最基礎的還是直接封裝了作業系統核心系統呼叫的C庫。所有的應用軟體都會直接或間接呼叫C庫,即使程式設計時使用的不是C語言;例如使用Java語言開發程式,最終會通過Java虛擬機器來執行,而Java虛擬機器所提供的各種功能都會通過呼叫C庫中的函式最終通過作業系統核心實現。

(3)操作環境:實際是一些特定功能的應用程式集合,由於提供了使用者操作計算機的基本介面而與其他的應用軟體有所區別。操作環境分為兩大類:命令列介面和圖形使用者介面介面;前者以字元介面形式提供,實現命令列介面的關鍵應用程式被稱為shell,shell程式按行讀取使用者的輸入,根據輸入內容進行相應的內部處理或執行外部命令,從而完成使用者要求的任務;後者則提供一個圖形化的訪問入口,使用者通過滑鼠或觸屏等操作方式啟動特定程式,從而完成使用者任務。圖形使用者介面不是由單一應用程式實現,需要多種應用程式協調工作,例如需要“視窗管理器”實現所有視窗一致的外觀呈現和公共操作,需要“桌面管理器”來呈現桌面的隱喻,在桌面上顯示圖示元素並響應使用者的點選操作。

(4)應用軟體:特指作業系統產品自帶的一些應用軟體,不像操作環境相關的應用軟體那麼重要和關鍵,這些軟體可以實現使用者常常需要的一些特定功能,會比較容易地找到同等功能的其他軟體進行替換。這些應用軟體被歸入到作業系統產品中是因為它們隨作業系統捆綁銷售,不需要額外獲取安裝。不同時期作業系統自帶軟體集合會有一些差別,例如早期Windows是不帶IE瀏覽器的,後來成為標準配置部分,之後又曾經因反壟斷訴訟被裁定在歐洲銷售版本中不準捆綁IE瀏覽器,最終發現使用者無法接受而不了了之。IE瀏覽器就有很多可替代的產品,如Firefox、Chrome等。

介紹廣義的作業系統產品,目的之一是希望讀者對於作業系統的產品化有一些概念,雖然本書主要講解核心,但應該知道一個作業系統產品要想在市場上得到成功,核心在其中只佔很小的一部分。以本書會大量引述的Linux系統為例,其實開源軟體界一直有呼聲要求使用規範的名字——GNU/Linux,因為Linux本身僅僅是核心,作為作業系統產品,其中包含的大量程式來自開源的GNU專案,包括系統函式庫、開發工具、shell、大量工具軟體等等,這些程式的總量遠遠超過Linux核心。如果讀者對Linux有所瞭解,大概會聽說過一些Linux發行公司,如Redhat、Ubuntu等,這些公司基本不直接進行核心開發,其數百人甚至上千人的技術團隊主要從事的都是外圍軟體的開發,或者是不同開源軟體部件之間的適配和打包。

如前所述,核心的界定是根據執行態區分的,所以這是一個動態概念;如果想要找到核心的靜態對應物,可以從一個已安裝的作業系統中查詢特定檔案。例如,Linux系統下,/boot/目錄下vmlinuz開頭的檔案就是壓縮過的核心映像檔案;Windows下核心對應的檔案不止一個,預設情況下在C:\Windows\System32目錄下可以找到相應檔案:ntoskrnl.exe或者ntkrnlpa.exe對應NT核心,hal.dll對應硬體抽象層,win32k.sys對應Win32核心。觀察核心對應檔案的大小,能對核心在作業系統產品中所佔比重有個定性的認識:這些檔案大概都是在10個MB以下,即使考慮這些映像檔案有壓縮、一些核心模組在其他地方存放,但是相對一個新安裝作業系統幾個GB的空間佔用,核心在其中所佔比例還是很小的。

一些讀者可能會有這樣的疑問:既然核心是動態界定的,那麼執行中的核心有多大呢?或者說核心會佔據多少實體記憶體呢?這個問題是無法明確回答的,因為核心佔據的實體記憶體空間是動態變化的,如果你的計算機配備的記憶體多,核心可能會多佔一些,通過增加核心中的緩衝區提高裝置訪問效能;如果系統負載持續增加,核心又可能會釋放一些實體記憶體給應用程式使用。可以確定的是任何一種核心都會有最低實體記憶體空間要求,低於此配置則核心無法正常工作,但具體的最低配置要求隨作業系統以及版本而異。