陳 渝 向 勇
摘要:“操作系統(tǒng)”作為計算機科學(xué)與技術(shù)專業(yè)的一門重要基礎(chǔ)課程,強調(diào)理論知識和實踐的相互促進。本文針對如何為不同能力不同基礎(chǔ)的學(xué)生提供更有效的實驗指導(dǎo)模式,使操作系統(tǒng)實驗教學(xué)能夠讓學(xué)生更全面和深入地理解操作系統(tǒng)的有關(guān)知識,從而全面掌握操作系統(tǒng)的整體框架和流程,做了有益探討。
關(guān)鍵詞:操作系統(tǒng);實驗;教學(xué);
中圖分類號:G642 文獻標(biāo)識碼:B
1前言
“操作系統(tǒng)”作為計算機科學(xué)與技術(shù)專業(yè)的一門重要基礎(chǔ)課程,高校的操作系統(tǒng)實驗是對操作系統(tǒng)原理的具體實現(xiàn)。通過對操作系統(tǒng)源代碼的分析和功能實現(xiàn)的實踐,可以使學(xué)生深入了解操作系統(tǒng)的功能,加深對操作系統(tǒng)所涉及的概念、原理等的理解,體驗操作系統(tǒng)原理中很少涉及的復(fù)雜軟件架構(gòu)的具體實現(xiàn)等。因此,本文就“操作系統(tǒng)”實驗課實驗內(nèi)容的設(shè)置及實驗環(huán)境和教學(xué)方法加以分析探討。
2當(dāng)前國內(nèi)外操作課程實驗的特點
把“實際設(shè)計操作系統(tǒng)”作為“操作系統(tǒng)”課程實驗的教學(xué)目標(biāo)是一個看似情理,卻很難有效操作的事情。當(dāng)前國內(nèi)外高校操作系統(tǒng)實驗的幾種形式如下所示:
第一類是模擬驗證型實驗,即選擇操作系統(tǒng)原理中的一些典型技術(shù),如內(nèi)存頁替換算法、進程調(diào)度算法等,用基于應(yīng)用程序編程的方法來實現(xiàn)相關(guān)技術(shù),算法所涉及的資源是實際不存在的。這種類型實驗的特點是可以方便地對操作系統(tǒng)原理中所涉及的典型技術(shù)進行實現(xiàn),有助于對操作系統(tǒng)原理的理解。但學(xué)生較難體會實際操作系統(tǒng)對計算機硬件的交互,以及操作系統(tǒng)的實際框架和部分運行機制(如中斷)的特點。
第二類是使用驗證型實驗,即選擇某實際操作系統(tǒng)(Windows、Linux、OpenSolaris等)作為實驗環(huán)境,通過具體使用、編寫應(yīng)用程序和采用相關(guān)系統(tǒng)工具來觀察和驗證實際操作系統(tǒng)中一些技術(shù)。這種類型實驗的特點是讓學(xué)生置身于真實的操作系統(tǒng)中,可了解這些技術(shù)的具體實現(xiàn) 情況。但學(xué)生較難涉足操作系統(tǒng)設(shè)計的鍛煉,對操作系統(tǒng)內(nèi)部細節(jié)了解不深。
第三類是剖析驗證型實驗,即結(jié)合操作系統(tǒng)原理來分析一個具體的操作系統(tǒng)實現(xiàn)(如Linux、WRK、MINIX等),比較原理和實現(xiàn)之間的差異。這種方法的目的是將操作系統(tǒng)的基本原理與操作系統(tǒng)的具體實例結(jié)合起來,并通過實驗來替換或改變操作系統(tǒng)中已有的功能。采用這種方法的教師對所講授的操作系統(tǒng)的結(jié)構(gòu)和實現(xiàn)要非常熟悉,對教師的要求較高。另一方面要求學(xué)生理解具體的操作系統(tǒng)實現(xiàn),對學(xué)生分析操作系統(tǒng)源碼的能力要求也較高。
第四類是擴展設(shè)計型實驗,即提供一個從無到有的漸進式操作系統(tǒng)原型,由學(xué)生對其功能進行完善和擴充。如首先設(shè)計引導(dǎo)程序,然后再設(shè)計內(nèi)存的管理、外設(shè)管理等一系列實驗,由學(xué)生在漸進式操作系統(tǒng)原型的基礎(chǔ)上來完成實際的大部分功能、策略和算法等。如何讓學(xué)生理解一個完整的操作系統(tǒng)的架構(gòu)是此類型實驗的難點。
為了更好地開展“操作系統(tǒng)”教學(xué),我們這幾年分析了解了國內(nèi)外重點大學(xué)的操作系統(tǒng)實驗教學(xué),并重點參考了MIT“操作系統(tǒng)”課程6.828的實驗內(nèi)容,對上述四種類型實驗都進行了一定得嘗試和改進。我們認(rèn)為對于研究型大學(xué),第四類實驗是一種比較好的實驗方式。這種實驗方式需要一個簡潔的功能齊全的微型教學(xué)用操作系統(tǒng),需要一個方便的運行調(diào)試環(huán)境和詳細的實驗指導(dǎo)書,這三者缺一不可。下面我們將就這些方面對目前正在開展的操作系統(tǒng)實驗教學(xué)進行闡述。
3操作系統(tǒng)實驗課程設(shè)計
3.1實驗內(nèi)容設(shè)計
我們的操作系統(tǒng)實驗教學(xué)為擴展設(shè)計型實驗,即提供一個從無到有的漸進式操作系統(tǒng)原型,由學(xué)生對其功能進行完善和擴充。通過實驗課程學(xué)習(xí),讓學(xué)生最終能夠自己設(shè)計并實現(xiàn)一個操作系統(tǒng)。為此我們的操作系統(tǒng)實驗環(huán)節(jié)分為8個主要部分,每個部分相對獨立、也有一定的依賴性。清華大學(xué)操作系統(tǒng)實驗內(nèi)容如下:
(1) 引導(dǎo)程序和OS啟動: 個人完成
(2) 中斷與設(shè)備管理: 個人完成
(3) 內(nèi)存管理: 個人完成
(4) 進程管理: 個人完成
(5) 處理器調(diào)度: 個人完成
(6) 同步互斥與死鎖: 個人完成
(7) 文件系統(tǒng): 個人完成
(8)OS監(jiān)控器: 小組完成
前7實驗部分就可以構(gòu)建成一個簡單且功能全面的操作系統(tǒng),第8個實驗讓學(xué)生能夠?qū)Σ僮飨到y(tǒng)有一個更好的全局了解。我們重視個性化培養(yǎng),倡導(dǎo)層次教學(xué)法,鼓勵學(xué)生積極討論學(xué)習(xí),從個性化發(fā)展的角度考察學(xué)生的創(chuàng)新思維能力和理解問題的能力。根據(jù)學(xué)生的學(xué)習(xí)能力和興趣的不同,對學(xué)生的要求也要分出層次。通過設(shè)置擴展實驗來讓水平高的學(xué)生有更多的鍛煉的機會。通過細化實驗指導(dǎo)書、設(shè)置簡單實驗并提前公布答案來讓水平低的學(xué)生能夠理解實驗的內(nèi)容和目標(biāo)。
3.2實驗用操作系統(tǒng)設(shè)計
實驗用操作系統(tǒng)要求功能全面(便于學(xué)生理解原理)、代碼量很小(便于學(xué)生分析源碼和架構(gòu))、能在實際的常用計算機上運行;這幾方面者是相互矛盾的。我們通過調(diào)研,采用MIT的xv6教學(xué)用操作系統(tǒng)作為我們的基礎(chǔ)。xv6的特點是模擬了早期的Unix V6實現(xiàn),并改進在Intel x86上運行,且支持SMP架構(gòu)。我們在xv6的基礎(chǔ)上進行了重新設(shè)計和改進,采用漸進的方式形成8個實驗內(nèi)容單元,每個單元的代碼量都很小,第一個實驗中的源代碼一共只有不到300行代碼,第六個實驗中的源代碼頁只有5000多行。
xv6基于典型的UNIX操作系統(tǒng)設(shè)計思路。簡單地說,xv6是一種能區(qū)分內(nèi)核態(tài)和用戶態(tài),基于扁平(或虛存)內(nèi)存管理的層次型單體內(nèi)核,應(yīng)用程序和操作系統(tǒng)是處于不同的特權(quán)狀態(tài)和地址空間。代表應(yīng)用程序的用戶態(tài)進程運行在CPU的用戶態(tài)(又稱非特權(quán)模式,用戶模式),無法直接訪問系統(tǒng)硬件和操作系統(tǒng)中的系統(tǒng)數(shù)據(jù),而操作系統(tǒng)運行在CPU的核心態(tài)(又稱特權(quán)模式,內(nèi)核模式),可以訪問系統(tǒng)硬件和核心數(shù)據(jù)。下面分別從系統(tǒng)調(diào)用接口、進程/線程管理、內(nèi)存管理、文件系統(tǒng)、I/O管理等幾個方面進行總體分析。
系統(tǒng)調(diào)用是應(yīng)用程序訪問操作系統(tǒng)的接口。在系統(tǒng)調(diào)用接口上,通用操作系統(tǒng)與基于此操作系統(tǒng)的應(yīng)用程序處于兩個不同的CPU特權(quán)態(tài),操作系統(tǒng)處于核心態(tài),而應(yīng)用程序處于用戶態(tài)。在核心態(tài)可以執(zhí)行CPU特權(quán)指令,而用戶態(tài)無法執(zhí)行特權(quán)指令,且只能通過特定的指令或中斷來訪問操作系統(tǒng)提供的各種功能。這在一定程度上保證了系統(tǒng)整體的安全,避免應(yīng)用程序?qū)Σ僮飨到y(tǒng)可能的破壞。
在內(nèi)存管理方面,xv6操作系統(tǒng)采用了虛擬內(nèi)存管理方式,這樣一般情況下不同進程的地址空間不能直接訪問,且應(yīng)用程序不能直接訪問內(nèi)核地址空間。所以一個錯誤的應(yīng)用程序不會導(dǎo)致系統(tǒng)的崩潰,從而增加了系統(tǒng)的可靠性。在內(nèi)存分配和釋放的管理上,xv6相對實現(xiàn)得比較簡單,采用基于可變分區(qū)分配的首次適配算法,容易產(chǎn)生內(nèi)存碎片。
在進程管理方面,當(dāng)前操作系統(tǒng)結(jié)合虛存管理,采用進程的管理方式。進程代表了一個程序執(zhí)行的過程以及其所占用的計算機資源(包括CPU、內(nèi)存、文件等),進程的執(zhí)行流可用線程來表示。操作系統(tǒng)的調(diào)度單位可以是進程。一個進程可以包含多個線程,屬于同一進程的多個線程共享進程管理的資源,比如屬于同一進程的多個線程共享進程所管理的內(nèi)存,這些線程可以直接訪問屬于進程的全局地址空間。 xv6操作系統(tǒng)實現(xiàn)了一個基于進程的簡單進程管理機制。
在文件系統(tǒng)管理方面,當(dāng)前通用操作系統(tǒng)結(jié)合虛存管理,實現(xiàn)了多種復(fù)雜、高效且可靠的文件系統(tǒng),且建立了一個統(tǒng)一的虛擬文件系統(tǒng)層,屏蔽不同文件系統(tǒng)的差異,對上層提供統(tǒng)一的接口。且與用戶管理和進程管理結(jié)合,可實現(xiàn)安全管理,保證對文件的安全訪問。xv6操作系統(tǒng)實現(xiàn)了一個相對簡單的基于inode索引方式的文件系統(tǒng)。
在I/O管理方面,xv6操作系統(tǒng)與通用操作系統(tǒng)(特別是類UNIX操作系統(tǒng))差別不是特別大,都把設(shè)備“看成”是一種特殊的設(shè)備文件,有設(shè)備號,用文件的訪問接口來進行打開、關(guān)閉、讀、寫和控制等操作。在靈活性方面,xv6驅(qū)動程序不能像通用操作系統(tǒng)那樣根據(jù)硬件情況動態(tài)加載,而是在編譯時候就靜態(tài)確定的。
4結(jié)束語
經(jīng)過多年的探索與實踐,“操作系統(tǒng)”課程已成為清華大學(xué)計算機系的重要的專業(yè)基礎(chǔ)課。操作系統(tǒng)的發(fā)展,依賴于教、學(xué)雙方的共同參與和努力,以及不斷改革創(chuàng)新的教學(xué)方法。