【簡(jiǎn)介:】操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程本節(jié)討論操作系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)面臨的問(wèn)題。雖然這些問(wèn)題沒(méi)有完整的解決方案,但是有些方法還是行之有效的。設(shè)計(jì)目標(biāo)系統(tǒng)設(shè)計(jì)的首要問(wèn)題是,定義目標(biāo)和規(guī)
操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程
本節(jié)討論操作系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)面臨的問(wèn)題。雖然這些問(wèn)題沒(méi)有完整的解決方案,但是有些方法還是行之有效的。設(shè)計(jì)目標(biāo)系統(tǒng)設(shè)計(jì)的首要問(wèn)題是,定義目標(biāo)和規(guī)范。從高層來(lái)說(shuō),系統(tǒng)設(shè)計(jì)取決于所選硬件和系統(tǒng)類型:批處理、分時(shí)、單用戶、多用戶、分布式、實(shí)時(shí)或通用。除了最高設(shè)計(jì)層外,需求可能很難說(shuō)清。不過(guò),需求可分為兩個(gè)基本大類:用戶目標(biāo)(user goal)和系統(tǒng)目標(biāo)(system goal)。用戶要求系統(tǒng)具有一定的優(yōu)良性能:系統(tǒng)該便于使用、易于學(xué)習(xí)和使用、可靠、安全和快速。當(dāng)然,這些規(guī)范對(duì)于系統(tǒng)設(shè)計(jì)并不特別有用,因?yàn)槿绾螌?shí)現(xiàn)這些沒(méi)有定論。研發(fā)人員為設(shè)計(jì)、創(chuàng)建、維護(hù)和運(yùn)行操作系統(tǒng),也可定義一組相似要求:操作系統(tǒng)應(yīng)易于設(shè)計(jì)、實(shí)現(xiàn)和維護(hù),也應(yīng)靈活、可靠、正確且高效。同樣,這些要求在系統(tǒng)設(shè)計(jì)時(shí)并不明確,并可能有不同的理解??傊?,關(guān)于定義操作系統(tǒng)的需求,沒(méi)有唯一的解決方案?,F(xiàn)實(shí)中,存在許多類型的系統(tǒng),這也說(shuō)明了不同需求會(huì)產(chǎn)生不同解決方案,以便用于不同環(huán)境。例如,VxWorks(一種用于嵌入式系統(tǒng)的實(shí)時(shí)操作系統(tǒng))的需求與 MVS(用于 IBM 大型機(jī)的多用戶、多訪問(wèn)操作系統(tǒng))的需求相比,有很大不同。操作系統(tǒng)的分析與設(shè)計(jì)是個(gè)很有創(chuàng)意的工作。雖然沒(méi)有教科書能夠告訴我們?nèi)绾巫?,但是軟件工程(software engineering)的主要原則還是有用的。現(xiàn)在就來(lái)討論這些。機(jī)制與策略一個(gè)重要原則是策略(policy)與機(jī)制(mechanism)的分離。機(jī)制決定如何做,而策略決定做什么。例如,定時(shí)器是一種保護(hù) CPU 的機(jī)制,但是為某個(gè)特定用戶應(yīng)將定時(shí)器設(shè)置成多長(zhǎng)時(shí)間,就是一個(gè)策略問(wèn)題。對(duì)于靈活性,策略與機(jī)制的分離至關(guān)重要。策略可隨時(shí)間或地點(diǎn)而改變。在最壞情況下,每次策略的改變都可能需要改變底層機(jī)制。對(duì)策略改變不敏感的通用機(jī)制將是更可取的。這樣策略的改變只需重新定義一些系統(tǒng)參數(shù)。例如,現(xiàn)有一種機(jī)制,可賦予某些類型的程序相對(duì)更高的優(yōu)先級(jí)。如果這種機(jī)制能與策略分離開,那么它可用于支持 I/O 密集型程序應(yīng)比 CPU 密集型程序具有更高優(yōu)先級(jí)的策略,或者支持相反策略。微內(nèi)核操作系統(tǒng)(后續(xù)章節(jié)會(huì)詳細(xì)介紹)通過(guò)實(shí)現(xiàn)一組基本且簡(jiǎn)單的模塊,將機(jī)制與策略的分離用到了極致。這些模塊幾乎與策略無(wú)關(guān),通過(guò)用戶創(chuàng)建的內(nèi)核模塊或用戶程序本身,可以增加更高級(jí)的機(jī)制與策略。例如,看一下 UNIX 的發(fā)展。起初,它采用分時(shí)調(diào)度。而對(duì)最新版的 Solaris,調(diào)度由可加載表來(lái)控制。根據(jù)當(dāng)前的加載表,系統(tǒng)可以是分時(shí)的、批處理的、實(shí)時(shí)的、公平分享的或其他任意組合。通用調(diào)度機(jī)制可以通過(guò)單個(gè) load-new-table 命令對(duì)策略進(jìn)行重大改變。另一極端系統(tǒng)是 Windows,它的機(jī)制與策略都已編碼,以確保統(tǒng)一的系統(tǒng)風(fēng)格。所有應(yīng)用程序都有類似界面,因?yàn)榻缑姹旧硪言趦?nèi)核和系統(tǒng)庫(kù)中構(gòu)造了。Mac OS X 操作系統(tǒng)也有類似功能。對(duì)于所有的資源分配,策略決定非常重要。只要決定是否分配資源,就應(yīng)做出策略決定。只要問(wèn)題是“如何做”而不是“做什么”,就要由機(jī)制來(lái)決定。實(shí)現(xiàn)在操作系統(tǒng)被設(shè)計(jì)之后,就應(yīng)加以實(shí)現(xiàn)。操作系統(tǒng)由許多程序組成,且由許多人員在較長(zhǎng)時(shí)間內(nèi)共同編寫,因此關(guān)于實(shí)現(xiàn)很難形成通用原則。早期,操作系統(tǒng)是用匯編語(yǔ)言編寫的?,F(xiàn)在,雖然有的操作系統(tǒng)仍然用匯編語(yǔ)言編寫,但是大多數(shù)都是用高級(jí)語(yǔ)言(如 C)或更高級(jí)的語(yǔ)言(如 C++)來(lái)編寫的。實(shí)際上,操作系統(tǒng)可用多種語(yǔ)言來(lái)編寫。內(nèi)核的最低層可以采用匯編語(yǔ)言。高層函數(shù)可用 C;系統(tǒng)程序可用 C 或 C++,也可用解釋型腳本語(yǔ)言如 PERL 或 Python,還可用外殼腳本。事實(shí)上,有的 Linux 發(fā)布可能包括所有這些語(yǔ)言編寫的程序。首個(gè)不用匯編語(yǔ)言編寫的系統(tǒng)可能是用于 Burroughs 計(jì)算機(jī)的主控程序(Master Control Program,MCP)。MCP 采用 ALGOL 語(yǔ)言的變種來(lái)編寫。MIT 開發(fā)的 MULTICS 主要是采用系統(tǒng)程序語(yǔ)言 PL/1 來(lái)編寫的。Linux 和 Windows 操作系統(tǒng)內(nèi)核主要用 C 編寫,盡管有小部分是用匯編語(yǔ)言來(lái)編寫的用于設(shè)備驅(qū)動(dòng)程序與保存和恢復(fù)寄存器狀態(tài)的代碼。采用高級(jí)語(yǔ)言或至少系統(tǒng)實(shí)現(xiàn)語(yǔ)言來(lái)實(shí)現(xiàn)操作系統(tǒng)的優(yōu)勢(shì)與用高級(jí)語(yǔ)言來(lái)編寫應(yīng)用程序相同:代碼編寫更快,更為緊湊,更容易理解和調(diào)試。另外,編譯技術(shù)的改進(jìn)使得只要通過(guò)重新編譯,就可改善整個(gè)操作系統(tǒng)的生成代碼。最后,如果用高級(jí)語(yǔ)言來(lái)編寫,操作系統(tǒng)更容易移植(port)到其他硬件。例如,MS-DOS 是用 Intel 8088 匯編語(yǔ)言編寫的。因此,它只能直接用于 Intel X86 類型的 CPU。(注意,雖說(shuō) MS-DOS 只能本地運(yùn)行于 Intel X86 類型的 CPU,但是 X86 指令集模擬器可允許它運(yùn)行在其他 CPU 上——會(huì)更慢,會(huì)使用更多資源。正如前面所提到的,模擬器(emulator)程序可以在一個(gè)系統(tǒng)上復(fù)制另一個(gè)系統(tǒng)的功能。)而 Linux 操作系統(tǒng)主要是用 C 來(lái)編寫的,可用于多種不同 CPU,如 Intel X86、Oracle SPARC 和 IBM PowerPC 等。采用高級(jí)語(yǔ)言實(shí)現(xiàn)操作系統(tǒng)的缺點(diǎn)僅僅在于速度的降低和存儲(chǔ)的增加。不過(guò),這對(duì)當(dāng)今的系統(tǒng)已不再是主要問(wèn)題。雖然匯編語(yǔ)言高手能編寫更快、更小的子程序,但是現(xiàn)代編譯器能對(duì)大程序進(jìn)行復(fù)雜分析并采用高級(jí)優(yōu)化技術(shù)生成優(yōu)秀代碼?,F(xiàn)代處理器都有很深的流水線和很多功能塊,它們要比人類更容易處理復(fù)雜的依賴關(guān)系。與其他系統(tǒng)一樣,操作系統(tǒng)的重大性能改善很可能是來(lái)源于更好的數(shù)據(jù)結(jié)構(gòu)和算法,而不是優(yōu)秀的匯編語(yǔ)言代碼。另外,雖然操作系統(tǒng)很大,但是只有小部分代碼對(duì)高性能是關(guān)鍵的;中斷處理器、I/O管理器、內(nèi)存管理器及CPU調(diào)度器等,可能是關(guān)鍵部分。在系統(tǒng)編寫完并能正確工作后,可找出瓶頸程序,并用相應(yīng)匯編語(yǔ)言程序來(lái)替換。