蔣 鵬,金煒東
(西南交通大學(xué)電氣工程學(xué)院,四川成都 610031)
“操作系統(tǒng)原理”是計(jì)算機(jī)科學(xué)與計(jì)算以及相關(guān)專業(yè)的一門重要的專業(yè)基礎(chǔ)課程[1]。該課程的實(shí)驗(yàn)課使得學(xué)生能夠動手修改操作系統(tǒng)內(nèi)核并進(jìn)行編譯和運(yùn)行,是一種解決目前操作系統(tǒng)課程過于理論化的一種有效手段[2]。但是目前的實(shí)驗(yàn)課基本上以使用操作系統(tǒng)接口為主,難以深入到處理機(jī)管理、內(nèi)存管理等操作系統(tǒng)原理級別的知識點(diǎn)。因此,迫切需要一種不依賴具體硬件而又可以修改運(yùn)行的操作系統(tǒng)供學(xué)生實(shí)驗(yàn)。
國內(nèi)外很多高校都開設(shè)了操作系統(tǒng)實(shí)驗(yàn),主要包括驗(yàn)證型實(shí)驗(yàn)、操作型實(shí)驗(yàn)、源代碼剖析實(shí)驗(yàn)以及拓展設(shè)計(jì)型實(shí)驗(yàn)等四大類別。
(1)驗(yàn)證型實(shí)驗(yàn)是指驗(yàn)證“操作系統(tǒng)原理”中一些常用的技術(shù),例如進(jìn)程調(diào)度算法等。一般編寫一些應(yīng)用程序來模擬驗(yàn)證“操作系統(tǒng)原理”中一些較為抽象和難以理解的章節(jié)。這類實(shí)驗(yàn)方法比較簡單,可以直觀地給學(xué)生展示一些算法的難點(diǎn)。但是由于這類方法是通過模擬實(shí)驗(yàn)來完成,無法模擬和驗(yàn)證與硬件相關(guān)的章節(jié)例如中斷處理等。另外,這類方法也無法給學(xué)生一個完整操作系統(tǒng)的概念。
(2)操作性實(shí)驗(yàn)是目前比較常見的一種實(shí)驗(yàn)類型。主要是通過在Linux或者Windows上讓學(xué)生體驗(yàn)一下操作系統(tǒng)提供的接口,包括命令接口和編程接口。通過操作系統(tǒng)的接口,可以使得學(xué)生直觀地觀察到操作系統(tǒng)提供的服務(wù)和采用的技術(shù)。另外,這類實(shí)驗(yàn)的好處在于可以使得學(xué)生在真實(shí)的操作系統(tǒng)上進(jìn)行實(shí)驗(yàn),有利于對操作系統(tǒng)本身的理解。但是,這類方法最大的問題在于無法深入理解操作系統(tǒng)的底層和原理。
(3)源代碼剖析實(shí)驗(yàn)是目前國外比較常見的“操作系統(tǒng)原理”實(shí)驗(yàn)方法。學(xué)生可以通過分析Linux和MINIX等開源的操作系統(tǒng),較為深入地理解操作系統(tǒng)提供的服務(wù)以及組織結(jié)構(gòu)。這種方法可以涵蓋絕大多數(shù)操作系統(tǒng)原理內(nèi)容。要求學(xué)生和教師對于Linux和MINIX等操作系統(tǒng)熟悉程度較高。
(4)拓展設(shè)計(jì)型實(shí)驗(yàn)是目前比較流行的一種實(shí)驗(yàn)方案[3]。該方法通過修改操作系統(tǒng)內(nèi)核達(dá)到拓展操作系統(tǒng)的目的。這種方法一般要求在實(shí)際的硬件環(huán)境下,通過編譯和運(yùn)行一個操作系統(tǒng)以達(dá)到教學(xué)目的。但是這種實(shí)驗(yàn)方法成本較高,需要專門的硬件和軟件平臺,不利于大規(guī)模推廣。
綜上所述,目前操作“系統(tǒng)原理課程”實(shí)驗(yàn)改革還處于一種尚待完善的階段。由于受到硬件環(huán)境限制,目前大多數(shù)實(shí)驗(yàn)課程還都停留在使用操作系統(tǒng)層面上。雖然一些重點(diǎn)大學(xué)已經(jīng)開設(shè)了修改和拓展操作系統(tǒng)的實(shí)驗(yàn),但總體而言有針對性的拓展和修改操作系統(tǒng)的實(shí)驗(yàn)還比較少。
我們針對本科教學(xué)的特點(diǎn),提出一種針對操作系統(tǒng)實(shí)驗(yàn)課程設(shè)計(jì)的新思路和新方法。該方法通過修改開源操作系統(tǒng)以拓展操作系統(tǒng)功能為目標(biāo),使得學(xué)生能夠動手修改操作系統(tǒng)和根據(jù)需要拓展一個簡單的操作系統(tǒng)。該實(shí)驗(yàn)無需特定的硬件平臺支持,就在Windows平臺上加上VC++編譯器即可完成操作系統(tǒng)的修改和運(yùn)行驗(yàn)證。
操作系統(tǒng)實(shí)驗(yàn)首先一定是開放源代碼的,這樣學(xué)生才能深入到操作系統(tǒng)內(nèi)部進(jìn)行研究。現(xiàn)有大家熟知的開源操作系統(tǒng)Linux和MINIX以及一些嵌入式操作系統(tǒng)例如eCos和ucosII等可供選擇,采用哪種策略才能選擇一個便于學(xué)習(xí)的操作系統(tǒng)是一個需要解決的問題。我們認(rèn)為,作為教學(xué)用途的開源操作系統(tǒng)應(yīng)該具備代碼精簡 、便于學(xué)習(xí)、功能完善 、易于移植和不依賴特定硬件等幾個特點(diǎn)。
雖然Linux等操作系統(tǒng)功能強(qiáng)大,但學(xué)生難以在短時間內(nèi)掌握這樣龐大的操作系統(tǒng)。因此,我們選擇了FreeRTOS作為教學(xué)的操作系統(tǒng)[4]。FreeRTOS是一種實(shí)時嵌入式操作系統(tǒng),其代碼精簡,核心代碼少于5000行。該系統(tǒng)包含相對完整的基于時鐘中斷的搶占式內(nèi)核,以及信號量、鎖和內(nèi)存管理等多種常見操作系統(tǒng)服務(wù)。另外,F(xiàn)reeRTOS能夠在VC++下編譯,能夠在Windows環(huán)境下模擬執(zhí)行。這就不需要特定的硬件支持就可以讓操作系統(tǒng)運(yùn)行起來。因此選擇該操作系統(tǒng)作為學(xué)習(xí)系統(tǒng)具有修改后即可運(yùn)行等便于學(xué)習(xí)的特性。
我們?yōu)樵撜n程設(shè)計(jì)了進(jìn)程管理、同步與死鎖、處理器調(diào)度和內(nèi)存管理等四個主要實(shí)驗(yàn)。其中前兩個實(shí)驗(yàn)為基本實(shí)驗(yàn),是每個學(xué)生都必須參加的實(shí)驗(yàn)。后兩個實(shí)驗(yàn)為拓展實(shí)驗(yàn),其對學(xué)生的編程能力要求較高,適合于有興趣的學(xué)生。每個實(shí)驗(yàn)相對獨(dú)立,但也有一定的關(guān)聯(lián)性。
(1)進(jìn)程管理:通過FreeRTOS創(chuàng)建新的進(jìn)程使學(xué)生能夠深入了解進(jìn)程創(chuàng)建的過程以及PCB(Process Control Block)的作用。由于FreeRTOS的PCB相對比較簡單,只有棧指針、標(biāo)識和優(yōu)先級等選項(xiàng),而且可以通過VC++的斷點(diǎn)調(diào)整功能跟蹤一個任務(wù)創(chuàng)建的過程。結(jié)合觀察結(jié)果,深入分析內(nèi)核相關(guān)代碼,從而實(shí)現(xiàn)對進(jìn)程管理原理的深入理解。
(2)處理機(jī)調(diào)度:FreeRTOS采用的基于時鐘中斷的優(yōu)先級搶占內(nèi)核。為了使學(xué)生深入直觀地了解搶占式內(nèi)核,該實(shí)驗(yàn)要求對FreeRTOS調(diào)度器進(jìn)行修改,將任務(wù)調(diào)度信息儲存到一個特定格式的文件。通過分析不同優(yōu)先級任務(wù)調(diào)度情況,可以讓學(xué)生深刻體會到時鐘中斷是觸發(fā)調(diào)度的重要契機(jī)。而且當(dāng)高優(yōu)先級任務(wù)進(jìn)行就緒隊(duì)列后,時鐘中斷可以使高優(yōu)先級任務(wù)立即搶占低優(yōu)先級任務(wù)。
(3)同步和死鎖:通過創(chuàng)建三個FreeRTOS的任務(wù),并爭奪四個信號量來模擬死鎖情況。通過該模擬死鎖,使學(xué)生深刻理解了死鎖的四個條件:互斥條件,請求與保持條件,不剝奪條件和環(huán)路等待條件。
(4)內(nèi)存管理:由于FreeRTOS自帶的內(nèi)存管理算法相對比較復(fù)雜。本實(shí)驗(yàn)設(shè)計(jì)將FreeRTOS的內(nèi)存分配和釋放算法切換至簡單的固定分區(qū)分配算法,即將內(nèi)存劃分成幾個不同大小的分區(qū),每個分區(qū)設(shè)置一定數(shù)目的內(nèi)存塊供系統(tǒng)使用。
該實(shí)驗(yàn)的目的是讓學(xué)生了解內(nèi)存分配的基本原理,以及不同內(nèi)存分配算法的優(yōu)缺點(diǎn)。
上述四個主要的實(shí)驗(yàn)內(nèi)容構(gòu)成了“操作系統(tǒng)原理”的實(shí)驗(yàn)主要部分,基本覆蓋了“操作系統(tǒng)原理”這門課程的重點(diǎn)和難點(diǎn)部分。在實(shí)驗(yàn)中,每組學(xué)生選擇完成其中一個或者多個實(shí)驗(yàn)。在實(shí)驗(yàn)過程中,根據(jù)學(xué)生的學(xué)習(xí)能力和興趣的不同,設(shè)置基本實(shí)驗(yàn)和拓展實(shí)驗(yàn)兩大類型。由于實(shí)驗(yàn)可以在學(xué)生自己的計(jì)算機(jī)上完成,因此不需要進(jìn)入專門實(shí)驗(yàn)室就可以完成實(shí)驗(yàn)。
本文通過一個在Windows環(huán)境下可以執(zhí)行的實(shí)時操作系統(tǒng)FreeRTOS,實(shí)現(xiàn)了使學(xué)生深入了解操作系統(tǒng)的目標(biāo)。由于該操作系統(tǒng)的精簡和較好的可移植性,學(xué)生可以通過閱讀操作系統(tǒng)代碼和修改操作系統(tǒng)功能來全面和深入的學(xué)習(xí)一個實(shí)時操作系統(tǒng),從而避免了“操作系統(tǒng)原理”這門課程過于理論化的問題。當(dāng)然,學(xué)生在實(shí)現(xiàn)“操作系統(tǒng)原理”實(shí)驗(yàn)改革方面還是遇到了不少困難。例如學(xué)生C語言基礎(chǔ)較差,難以看懂操作系統(tǒng)內(nèi)核代碼等。
[1] 湯子瀛 哲鳳屏 湯小丹,計(jì)算機(jī)操作系統(tǒng),[M].西安:西安電子科技大學(xué)出版社,2004。
[2] 陳渝,向勇,“操作系統(tǒng)”課程實(shí)驗(yàn)教學(xué)探討,[J].北京:計(jì)算機(jī)教育,2009(14):135-136
[3] 劉乃琦,蒲曉蓉,劉丹.計(jì)算機(jī)操作系統(tǒng)精品課程建設(shè),[J].北京:計(jì)算機(jī)教育,2006(7):17-20
[4] http://www.freertos.org/