電子工業(yè)出版社獨家提供,嚴(yán)禁轉(zhuǎn)載!
1.4 操作系統(tǒng)結(jié)構(gòu)設(shè)計
操作系統(tǒng)是一種大型、復(fù)雜的并發(fā)系統(tǒng),為了研制操作系統(tǒng),首先必須研究它的結(jié)構(gòu),力求設(shè)計出結(jié)構(gòu)良好的程序。操作系統(tǒng)的結(jié)構(gòu)設(shè)計有兩層含義:一是研究操作系統(tǒng)的整體結(jié)構(gòu),由程序的構(gòu)成成分組成操作系統(tǒng)程序的構(gòu)造過程和方法;二是研究操作系統(tǒng)程序的局部結(jié)構(gòu),包括數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu)。采用不同的構(gòu)件和構(gòu)造方法可組成不同結(jié)構(gòu)的操作系統(tǒng)。本節(jié)將在討論操作系統(tǒng)構(gòu)件之后,全面介紹各種操作系統(tǒng)的構(gòu)造方法。
1.4.1 操作系統(tǒng)的組件
通常把組成操作系統(tǒng)程序的基本單位稱作操作系統(tǒng)的構(gòu)件。剖析現(xiàn)代操作系統(tǒng),構(gòu)成操作系統(tǒng)的基本單位除內(nèi)核之外,主要還有進(jìn)程、線程、類程和管程。
1.內(nèi)核
現(xiàn)代操作系統(tǒng)中大都采用了進(jìn)程的概念,為了解決系統(tǒng)的并發(fā)性、共享性和隨機性,并使進(jìn)程能協(xié)調(diào)地工作,單靠計算機硬件提供的功能是十分不夠的。例如,進(jìn)程調(diào)度工作目前就不能用硬件來實現(xiàn);而進(jìn)程自己調(diào)度自己也是困難的。所以,系統(tǒng)必須有一個軟件部分能對硬件處理器及有關(guān)資源進(jìn)行首次改造,以便給進(jìn)程的執(zhí)行提供良好運行環(huán)境,這個部分就是操作系統(tǒng)的內(nèi)核。
由于操作系統(tǒng)設(shè)計的目標(biāo)和環(huán)境不同,內(nèi)核的大小和功能有很大差別。有些設(shè)計希望把內(nèi)核做得盡量小僅具有極少的必需功能,稱為微內(nèi)核(microkernel),其他功能都在核外實現(xiàn),通過微內(nèi)核提供的消息傳遞機制完成其余功能模塊間的聯(lián)系;有些設(shè)計則希望內(nèi)核具有較多的功能,雖然其內(nèi)部也可劃分成層次或模塊,但運行時是一個大二進(jìn)制映像,模塊間的聯(lián)系可通過函數(shù)或過程調(diào)用實現(xiàn),稱為單內(nèi)核(monolithic kernel)。操作系統(tǒng)的一個基本問題就是內(nèi)核的功能設(shè)計。微內(nèi)核結(jié)構(gòu)是現(xiàn)代操作系統(tǒng)的特征之一,這種方法把內(nèi)核和核外服務(wù)程序的開發(fā)分離,可為特定應(yīng)用程序或運行環(huán)境要求定制服務(wù)程序,具有較好的可伸縮性,簡化了實現(xiàn),提供了靈活性,很適合分布式系統(tǒng)的構(gòu)造。
一般而言,內(nèi)核必須提供以下3個方面的功能。
(1)中斷處理。中斷處理是內(nèi)核中最基本的功能,也是操作系統(tǒng)賴以活動的基礎(chǔ),為了縮短屏蔽中斷的時間,增加系統(tǒng)內(nèi)的并發(fā)性,通常它僅僅進(jìn)行有限的、簡短的處理,其余任務(wù)交給在內(nèi)核之外的特殊用戶態(tài)進(jìn)程完成。當(dāng)中斷事件產(chǎn)生時,先由內(nèi)核截獲并轉(zhuǎn)向中斷處理例行程序進(jìn)行原則處理,它分析中斷事件的類型和性質(zhì),進(jìn)行必要的狀態(tài)修改,然后交給內(nèi)核之外的進(jìn)程去處理。例如,產(chǎn)生外圍設(shè)備結(jié)束中斷事件時,內(nèi)核首先分析是否正常結(jié)束,如果是正常結(jié)束,那么,就應(yīng)釋放等待該外圍傳輸?shù)倪M(jìn)程;否則啟動相應(yīng)設(shè)備管理進(jìn)程進(jìn)行出錯或異常處理。又如當(dāng)操作員請求從控制臺輸入命令時,內(nèi)核將把這一任務(wù)轉(zhuǎn)交給命令管理進(jìn)程去處理,以接收和執(zhí)行命令。
(2)短程調(diào)度。主要職能是分配處理器。當(dāng)系統(tǒng)中發(fā)生了一個事件之后,可能一個進(jìn)程要讓出處理器,而另一個進(jìn)程又要獲得處理器。短程調(diào)度按照一定的策略管理處理器的轉(zhuǎn)讓,以及完成保護(hù)和恢復(fù)現(xiàn)場的工作。由于它是協(xié)調(diào)進(jìn)程競爭處理器資源的程序,所以它不是進(jìn)程而是內(nèi)核中的一個程序。
(3)原語管理。原語是內(nèi)核中實現(xiàn)某一功能的不可中斷過程。為了協(xié)調(diào)進(jìn)程完成通信、并發(fā)執(zhí)行和共享資源,各種原語是必不可少的。通信原語為進(jìn)程相互傳遞消息,同步原語能協(xié)調(diào)并發(fā)進(jìn)程之間的種種制約關(guān)系。此外,還有其他原語,如啟動外圍設(shè)備工作的啟動原語,若啟動不成功則請求啟動者應(yīng)等待,顯然,這個啟動過程應(yīng)該是完整的,否則在成為等待狀態(tài)時,可能外圍設(shè)備已經(jīng)空閑。由于設(shè)備的操作與硬件密切相關(guān),故通常設(shè)備驅(qū)動程序等功能都放在內(nèi)核中完成。
內(nèi)核是操作系統(tǒng)對裸機的首次改造,內(nèi)核和裸機組成了一臺虛擬機,進(jìn)程就在這臺虛擬機上運行,它比裸機的功能更強大,具有以下特性:
(1)虛擬機沒有中斷,因而,進(jìn)程的設(shè)計者不再需要有硬件中斷的概念,用戶進(jìn)程執(zhí)行中無須處理中斷;
(2)虛擬機為每個進(jìn)程提供了一臺虛擬處理器,每個進(jìn)程就好像在各自的私有處理器上順序地推進(jìn),實現(xiàn)了多個進(jìn)程的并發(fā)執(zhí)行;
(3)虛擬機為進(jìn)程提供了功能較強的指令系統(tǒng),即它們能夠使用機器非特權(quán)指令、系統(tǒng)調(diào)用和原語所組成的新的指令系統(tǒng)。
為了保證系統(tǒng)的有效性和靈活性,設(shè)計內(nèi)核應(yīng)遵循少而精的原則。如果內(nèi)核功能過強,則一方面在修改系統(tǒng)時可能牽動內(nèi)核;另一方面它占用的內(nèi)存容量和執(zhí)行時間都會增大,且屏蔽中斷的時間過長也會影響系統(tǒng)效率。因而,設(shè)計內(nèi)核時應(yīng)注意:中斷處理要簡單;調(diào)度算法要有效;原語應(yīng)靈活有力、數(shù)量適當(dāng)。這樣就可以做到下次修改系統(tǒng)時,盡量少改動內(nèi)核,執(zhí)行時中斷屏蔽時間縮短。
2.進(jìn)程管理
程序本身并不能做什么,只有在CPU執(zhí)行它的指令時才能有所作為;因此,可以把進(jìn)程看做是正在運行的程序。但是當(dāng)我們進(jìn)一步研究時,對進(jìn)程的定義將更為普遍。例如:一個分時用戶程序(如編譯器)是一個進(jìn)程,個人用戶在PC 上運行的字處理程序是一個進(jìn)程,一個系統(tǒng)任務(wù)(如輸出到打印機)也是一個進(jìn)程,并可以提供允許進(jìn)程創(chuàng)建與其并發(fā)執(zhí)行的子進(jìn)程的系統(tǒng)調(diào)用。
進(jìn)程需要特定的資源(包括CPU時間、內(nèi)存、文件和I/O設(shè)備)來完成工作。這些資源或者在進(jìn)程創(chuàng)建時分配給它,或者在其運行時分配。除了在進(jìn)程創(chuàng)建時所獲得的各種物理資源和邏輯資源以外,各種各樣的初始化數(shù)據(jù)(或輸入)也可能一同傳送給進(jìn)程。例如,考慮一個能夠在終端的顯示屏上顯示一個文件狀態(tài)的進(jìn)程。這個進(jìn)程將獲得包含輸入的文件名,將執(zhí)行相應(yīng)的指令和系統(tǒng)調(diào)用來獲取所期望的信息并顯示在終端上。
著重強調(diào)程序本身不是進(jìn)程;程序是靜態(tài)實體(passive entity)(好像是存儲在磁盤中的文件的內(nèi)容),而進(jìn)程是動態(tài)實體(active entity),它用一個程序計數(shù)器來指明要執(zhí)行的下一條指令。進(jìn)程必須要按順序執(zhí)行,CPU執(zhí)行完進(jìn)程的一條指令后再執(zhí)行下一條,直到進(jìn)程結(jié)束。進(jìn)一步地講,一次最多執(zhí)行一條代表該進(jìn)程的指令。這樣,從來就不會出現(xiàn)兩個獨立運行的序列。但一個程序在運行時創(chuàng)建多個進(jìn)程是非常普遍的。
進(jìn)程是并發(fā)程序設(shè)計的一個工具,并發(fā)程序設(shè)計支撐了多道程序設(shè)計,由于進(jìn)程能確切、動態(tài)地刻畫計算機系統(tǒng)內(nèi)部的并發(fā)性,更好地解決系統(tǒng)資源的共享性,所以,在操作系統(tǒng)的發(fā)展史上,進(jìn)程概念被較早地引入了系統(tǒng)。它在操作系統(tǒng)的理論研究和設(shè)計實現(xiàn)上均發(fā)揮了重要作用。采用進(jìn)程概念使得操作系統(tǒng)結(jié)構(gòu)變得清晰,主要表現(xiàn)如下。
(1)一個進(jìn)程到另一個進(jìn)程的控制轉(zhuǎn)移由進(jìn)程調(diào)度機構(gòu)統(tǒng)一管理,不能雜亂無章,隨意進(jìn)行。
(2)進(jìn)程之間的交互如信號發(fā)送、消息傳遞和同步互斥等活動由通信及同步機制完成,從而使進(jìn)程無法有意或無意破壞其他進(jìn)程的數(shù)據(jù)。因此,每個進(jìn)程相對獨立,相互隔離,提高了系統(tǒng)的安全性和可靠性。
(3)進(jìn)程結(jié)構(gòu)較好地刻畫了系統(tǒng)的并發(fā)性,動態(tài)地描述出系統(tǒng)的執(zhí)行過程,因而具有進(jìn)程結(jié)構(gòu)的操作系統(tǒng),結(jié)構(gòu)清晰、整齊劃一,可維護(hù)性好。