摘要:操作系統(tǒng)實(shí)踐教學(xué)應(yīng)該為學(xué)生提供一個(gè)實(shí)驗(yàn)環(huán)境,使學(xué)生能夠觸摸到真實(shí)的操作系統(tǒng)內(nèi)部,幫助學(xué)生理解抽象的操作系統(tǒng)原理和機(jī)制;使學(xué)生能夠親身體驗(yàn)操作系統(tǒng)功能的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程,培養(yǎng)學(xué)生應(yīng)用操作系統(tǒng)知識(shí)的能力。本文分析了操作系統(tǒng)實(shí)踐教學(xué)的目標(biāo),闡述了具體實(shí)驗(yàn)項(xiàng)目及其設(shè)計(jì)理念。
關(guān)鍵詞:操作系統(tǒng);實(shí)踐教學(xué);實(shí)驗(yàn)設(shè)計(jì)
中圖分類號(hào):G642文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1672-5913 (2007) 20-0008-03
1引言
操作系統(tǒng)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門重要基礎(chǔ)課程,其教學(xué)目的使學(xué)生通過(guò)學(xué)習(xí)各種資源管理的原理和機(jī)制,建立起關(guān)于操作系統(tǒng)如何工作的理論知識(shí)基礎(chǔ)。但操作系統(tǒng)同時(shí)也是學(xué)生們認(rèn)為比較難學(xué)的專業(yè)課程之一。其原因有二:一是操作系統(tǒng)課程講述的是計(jì)算機(jī)資源管理的原理和機(jī)制,其中包含了許多抽象的概念和算法;二是操作系統(tǒng)作為最底層的核心軟件,深藏于“用戶界面”之下,學(xué)生們難以找到學(xué)習(xí)內(nèi)容的參照對(duì)象。因此,操作系統(tǒng)實(shí)踐教學(xué)作為教學(xué)輔助環(huán)節(jié)十分重要,它的作用在于通過(guò)動(dòng)手做實(shí)驗(yàn),幫助學(xué)生解決從抽象理論到具體對(duì)象的認(rèn)識(shí)問(wèn)題,培養(yǎng)學(xué)生應(yīng)用知識(shí)解決問(wèn)題的能力。
與程序設(shè)計(jì)、編譯原理和數(shù)據(jù)庫(kù)等軟件課程的實(shí)踐教學(xué)相比,操作系統(tǒng)課程的實(shí)踐教學(xué)有其特殊的地方。前者可以通過(guò)實(shí)現(xiàn)一個(gè)小型的應(yīng)用程序或簡(jiǎn)化的編譯器、數(shù)據(jù)庫(kù)來(lái)完成實(shí)踐教學(xué),而后者不能這樣做。因?yàn)椴僮飨到y(tǒng)不僅與硬件平臺(tái)密切相關(guān),而且內(nèi)部結(jié)構(gòu)非常復(fù)雜,即使讓學(xué)生實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的操作系統(tǒng)也是不現(xiàn)實(shí)的。近年來(lái),我們以開(kāi)源的Linux操作系統(tǒng)和WMware虛擬機(jī)作為實(shí)踐平臺(tái),針對(duì)不同的教學(xué)對(duì)象和教學(xué)要求,精心設(shè)計(jì)了多種方式的實(shí)驗(yàn)項(xiàng)目,在操作系統(tǒng)實(shí)踐教學(xué)上做了一些有益的探索。本文首先分析操作系統(tǒng)實(shí)踐教學(xué)的目標(biāo),然后說(shuō)明如何具體設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目。
2實(shí)踐教學(xué)目標(biāo)
我們認(rèn)為,操作系統(tǒng)實(shí)踐教學(xué)作為輔助教學(xué)環(huán)節(jié),有兩個(gè)主要目標(biāo)。
(1) 幫助學(xué)生理解操作系統(tǒng)的基本概念、原理和機(jī)制
操作系統(tǒng)包含了許多抽象的基本概念如進(jìn)程、線程和虛存,也包含了復(fù)雜的資源管理算法和機(jī)制,如進(jìn)程調(diào)度和頁(yè)式存儲(chǔ)管理。這些知識(shí)對(duì)于本科學(xué)生而言是比較難以理解的,因?yàn)樗麄兤綍r(shí)使用的是操作系統(tǒng)的用戶界面,很少也很難窺視到操作系統(tǒng)的內(nèi)部。操作系統(tǒng)的實(shí)踐教學(xué)應(yīng)該讓學(xué)生了解一個(gè)真實(shí)操作系統(tǒng)的內(nèi)部實(shí)現(xiàn),從而幫助學(xué)生更好地理解操作系統(tǒng)的基本概念、原理和機(jī)制。
我們采用開(kāi)源的Linux操作系統(tǒng)作為實(shí)踐教學(xué)的教材,指導(dǎo)學(xué)生閱讀和分析Linux的部分源碼,將學(xué)生帶入一個(gè)真實(shí)而復(fù)雜的操作系統(tǒng)內(nèi)部世界。在閱讀和分析源碼的過(guò)程中,學(xué)生能夠了解抽象的進(jìn)程和線程所對(duì)應(yīng)的具體數(shù)據(jù)結(jié)構(gòu),了解進(jìn)程調(diào)度算法的實(shí)現(xiàn)過(guò)程,并應(yīng)用所學(xué)的操作系統(tǒng)原理知識(shí)分析和討論Linux的調(diào)度策略。另外,我們要求學(xué)生在做每項(xiàng)實(shí)驗(yàn)前自學(xué)Linux操作系統(tǒng)的相關(guān)知識(shí),使學(xué)生清楚地看到操作系統(tǒng)的原理知識(shí)是如何體現(xiàn)在一個(gè)實(shí)際系統(tǒng)中的。
(2) 培養(yǎng)學(xué)生應(yīng)用操作系統(tǒng)知識(shí)的能力
操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的核心軟件,從事計(jì)算機(jī)行業(yè)的專業(yè)人員都需要操作系統(tǒng)的原理知識(shí),但他們擔(dān)任的角色不同,面臨的問(wèn)題就不同,因而所具備的操作系統(tǒng)知識(shí)的應(yīng)用能力也不同。系統(tǒng)管理員需要根據(jù)操作系統(tǒng)知識(shí)和用戶的需求,合理地配置系統(tǒng)資源,需要及時(shí)了解系統(tǒng)運(yùn)行狀態(tài),調(diào)整資源管理策略,使系統(tǒng)性能達(dá)到最佳;系統(tǒng)程序員需要詳細(xì)了解操作系統(tǒng)的內(nèi)核結(jié)構(gòu)、資源管理機(jī)制和功能模塊接口,為操作系統(tǒng)添加新功能或編寫(xiě)設(shè)備驅(qū)動(dòng)程序;應(yīng)用程序員則需要正確理解操作系統(tǒng)的功能和資源管理策略,編寫(xiě)出高效率且安全的應(yīng)用軟件。操作系統(tǒng)的實(shí)踐教學(xué)必須考慮到上述不同能力培養(yǎng)的特點(diǎn),以滿足學(xué)生未來(lái)任職需要。
我們以開(kāi)源的Linux操作系統(tǒng)和WMware虛擬機(jī)作為實(shí)踐平臺(tái),精心設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目,從多個(gè)方面培養(yǎng)學(xué)生應(yīng)用操作系統(tǒng)知識(shí)的能力。例如,學(xué)習(xí)使用Linux的proc文件系統(tǒng),對(duì)內(nèi)核運(yùn)行狀態(tài)、資源管理狀態(tài)和進(jìn)程運(yùn)行狀態(tài)進(jìn)行動(dòng)態(tài)查詢;學(xué)習(xí)Linux的系統(tǒng)調(diào)用機(jī)制和內(nèi)核模塊動(dòng)態(tài)加載機(jī)制,掌握為操作系統(tǒng)添加新功能的方法和過(guò)程;編寫(xiě)進(jìn)程通信應(yīng)用程序,掌握各種進(jìn)程通信、同步互斥機(jī)制的特點(diǎn)和使用方法。
3實(shí)驗(yàn)項(xiàng)目設(shè)計(jì)
我們?cè)谏鲜龅膶?shí)踐教學(xué)目標(biāo)的指導(dǎo)下,設(shè)計(jì)了多個(gè)實(shí)驗(yàn)項(xiàng)目,內(nèi)容涵蓋了操作系統(tǒng)的主要知識(shí)點(diǎn),包括用戶界面、進(jìn)程通信、proc文件系統(tǒng)、系統(tǒng)調(diào)用機(jī)制、進(jìn)程調(diào)度、內(nèi)核同步互斥機(jī)制、驅(qū)動(dòng)程序接口等。考慮到學(xué)生的知識(shí)和經(jīng)驗(yàn)背景,實(shí)驗(yàn)項(xiàng)目的安排從簡(jiǎn)到難,從依靠指導(dǎo)到自主設(shè)計(jì)。除必做的實(shí)驗(yàn)項(xiàng)目外,還設(shè)計(jì)了選做的實(shí)驗(yàn)項(xiàng)目,為有能力的同學(xué)提供更多的學(xué)習(xí)空間。下面分別介紹我們?cè)O(shè)計(jì)的九個(gè)實(shí)驗(yàn)項(xiàng)目。其中,前三個(gè)實(shí)驗(yàn)項(xiàng)目是為應(yīng)用程序員和系統(tǒng)管理員設(shè)計(jì)的,使學(xué)生掌握如何使用操作系統(tǒng)的命令界面、進(jìn)程機(jī)制和系統(tǒng)性能管理工具;第4個(gè)實(shí)驗(yàn)安排學(xué)生閱讀和分析源碼,理解操作系統(tǒng)原理在實(shí)際系統(tǒng)中的實(shí)現(xiàn)過(guò)程;后五個(gè)實(shí)驗(yàn)項(xiàng)目是為系統(tǒng)程序員設(shè)計(jì)的,讓學(xué)生體驗(yàn)操作系統(tǒng)內(nèi)核編程的全過(guò)程。
(1)Linux命令界面及shell編程
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)使用操作系統(tǒng)的命令用戶界面。實(shí)驗(yàn)內(nèi)容是:了解和使用Linux的常用命令,包括如何使用聯(lián)機(jī)幫助手冊(cè)和管道線命令;學(xué)習(xí)使用命令程序語(yǔ)言shell進(jìn)行簡(jiǎn)單的編程,從而理解命令解釋程序的工作過(guò)程。由于學(xué)生平時(shí)使用的是windows的圖形用戶界面,面對(duì)Linux的命令界面感到很陌生。所以,我們先給學(xué)生一個(gè)shell例子程序,讓學(xué)生按照說(shuō)明步驟上機(jī)運(yùn)行該程序,然后要求學(xué)生參照此程序?qū)崿F(xiàn)一個(gè)應(yīng)用管道線的shell程序。
(2) 進(jìn)程間通信
該項(xiàng)實(shí)驗(yàn)的目的是加強(qiáng)學(xué)生對(duì)進(jìn)程概念的理解,使學(xué)生掌握不同的進(jìn)程通信和同步互斥機(jī)制的特點(diǎn)和使用方法。實(shí)驗(yàn)內(nèi)容是:設(shè)計(jì)應(yīng)用程序?qū)崿F(xiàn)父、子進(jìn)程之間的數(shù)據(jù)交換,可采用各種方法實(shí)現(xiàn)父子進(jìn)程之間的通信(共享區(qū)、文件、消息傳遞、管道文件)和同步互斥控制(信號(hào)量、信號(hào))。
(3) 使用proc文件系統(tǒng)
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)如何使用Linux的proc文件系統(tǒng),對(duì)內(nèi)核運(yùn)行狀態(tài)、資源管理狀態(tài)和進(jìn)程運(yùn)行狀態(tài)進(jìn)行動(dòng)態(tài)查詢。實(shí)驗(yàn)內(nèi)容有:先通過(guò)課堂講授讓學(xué)生了解proc文件系統(tǒng)的設(shè)計(jì)思想、工作原理和組織結(jié)構(gòu),然后要求學(xué)生利用proc文件系統(tǒng)中的數(shù)據(jù)來(lái)說(shuō)明操作系統(tǒng)或進(jìn)程的某些特性。例如,利用/proc/stat中的數(shù)據(jù)顯示CPU的使用情況——系統(tǒng)利用率和用戶利用率;利用/proc/intr中的數(shù)據(jù)顯示內(nèi)存容量對(duì)缺頁(yè)異常次數(shù)的影響。
(4) 分析進(jìn)程調(diào)度算法和策略
該項(xiàng)實(shí)驗(yàn)的目的是幫助學(xué)生深入理解進(jìn)程調(diào)度過(guò)程,培養(yǎng)學(xué)生分析和研究問(wèn)題的能力。實(shí)驗(yàn)內(nèi)容是:閱讀和理解Linux的進(jìn)程調(diào)度函數(shù)schedule()、進(jìn)程數(shù)據(jù)結(jié)構(gòu)task_struct等內(nèi)核源碼,分析和研究Linux的進(jìn)程調(diào)度算法和策略,寫(xiě)出研究論文。要求學(xué)生在論文中討論以下問(wèn)題:進(jìn)程調(diào)度隊(duì)列是如何組織的;如何實(shí)現(xiàn)三種調(diào)度類型(SCHED_FIFO, SCHED_RR, SCHED_OHTER);進(jìn)程的優(yōu)先級(jí)是如何定義和動(dòng)態(tài)變化的;如何決定時(shí)間片的大小以及它與優(yōu)先級(jí)的關(guān)系;對(duì)實(shí)時(shí)進(jìn)程和多CPU的支持;評(píng)價(jià)Linux的調(diào)度策略并提出改進(jìn)意見(jiàn)。
(5)Linux內(nèi)核編譯
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)如何生成新內(nèi)核,為后面進(jìn)行操作系統(tǒng)內(nèi)核編程的實(shí)驗(yàn)做準(zhǔn)備。實(shí)驗(yàn)內(nèi)容有:學(xué)習(xí)如何下載和解壓源碼,了解Linux內(nèi)核源碼的組織結(jié)構(gòu),學(xué)習(xí)配置、編譯、安裝和啟動(dòng)Linux新內(nèi)核的全部過(guò)程。
(6) 添加系統(tǒng)調(diào)用
該項(xiàng)實(shí)驗(yàn)的目的是讓學(xué)生理解操作系統(tǒng)的重要機(jī)制——系統(tǒng)調(diào)用機(jī)制的工作過(guò)程,學(xué)習(xí)如何添加系統(tǒng)調(diào)用。實(shí)驗(yàn)內(nèi)容是:閱讀源碼文件,分析系統(tǒng)調(diào)用表等內(nèi)核數(shù)據(jù)結(jié)構(gòu);實(shí)現(xiàn)新的系統(tǒng)調(diào)用函數(shù),添加新的系統(tǒng)調(diào)用,編譯和生成新內(nèi)核;編寫(xiě)應(yīng)用程序,驗(yàn)證新系統(tǒng)調(diào)用的功能。
(7) 加載內(nèi)核模塊
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)動(dòng)態(tài)增加內(nèi)核功能的方法。內(nèi)核模塊動(dòng)態(tài)加載/卸載是操作系統(tǒng)的另一重要機(jī)制,它使得用戶不僅能動(dòng)態(tài)裁剪內(nèi)核功能,還能通過(guò)自己編寫(xiě)內(nèi)核模塊或使用第三方軟件來(lái)動(dòng)態(tài)增加內(nèi)核功能。實(shí)驗(yàn)內(nèi)容有:首先通過(guò)課堂講授讓學(xué)生了解Linux模塊機(jī)制的工作原理、模塊的編程和編譯方法,然后要求學(xué)生采用內(nèi)核模塊編程方法,為proc文件系統(tǒng)添加一個(gè)新文件。在該項(xiàng)實(shí)驗(yàn)中,學(xué)生不僅要學(xué)習(xí)內(nèi)核模塊的編程、編譯、加載和卸載全過(guò)程,還需要查找資料和閱讀源碼,搞清楚proc文件系統(tǒng)中關(guān)于創(chuàng)建文件、讀/寫(xiě)文件和刪除文件的函數(shù)接口,以此鍛煉學(xué)生的自主動(dòng)手的能力。
(8) 實(shí)現(xiàn)同步事件原語(yǔ)
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)如何實(shí)現(xiàn)同步互斥機(jī)制。實(shí)驗(yàn)內(nèi)容是,實(shí)現(xiàn)一組同步事件原語(yǔ):能夠使多個(gè)進(jìn)程阻塞在某個(gè)特定的事件上,直到另一個(gè)進(jìn)程產(chǎn)生該事件,從而喚醒所有在此事件上阻塞的進(jìn)程。這是一項(xiàng)綜合的復(fù)雜實(shí)驗(yàn)。實(shí)驗(yàn)者需要分析清楚同步事件原語(yǔ)的語(yǔ)義以及進(jìn)程同步過(guò)程中的所有細(xì)節(jié)問(wèn)題,正確設(shè)計(jì)同步事件的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)調(diào)用原型,分析Linux源碼中關(guān)于進(jìn)程等待隊(duì)列和內(nèi)核信號(hào)量的相關(guān)函數(shù),并利用這些函數(shù)實(shí)現(xiàn)同步事件原語(yǔ)的系統(tǒng)調(diào)用。然后,采用內(nèi)核模塊方法將新的系統(tǒng)調(diào)用添加到Linux內(nèi)核中,并通過(guò)應(yīng)用程序驗(yàn)證其正確性。
(9) 實(shí)現(xiàn)虛擬管道設(shè)備
該項(xiàng)實(shí)驗(yàn)的目的是學(xué)習(xí)如何編寫(xiě)驅(qū)動(dòng)程序。實(shí)驗(yàn)內(nèi)容是:使用內(nèi)存區(qū)(例如2048字節(jié))實(shí)現(xiàn)一個(gè)虛擬的字符管道設(shè)備:允許多個(gè)進(jìn)程向管道寫(xiě)入數(shù)據(jù),也允許多個(gè)進(jìn)程從管道讀出數(shù)據(jù),保證數(shù)據(jù)的寫(xiě)入順序與讀出順序是一致的。這也是一項(xiàng)綜合的復(fù)雜實(shí)驗(yàn),實(shí)驗(yàn)者需要分析研究讀/寫(xiě)管道設(shè)備過(guò)程中的同步互斥問(wèn)題,利用內(nèi)核信號(hào)量函數(shù)和進(jìn)程阻塞/喚醒函數(shù)解決同步互斥問(wèn)題;分析研究Linux的字符設(shè)備驅(qū)動(dòng)程序接口,學(xué)習(xí)如何編寫(xiě)和注冊(cè)驅(qū)動(dòng)程序的接口函數(shù)以及如何建立Linux設(shè)備文件。然后,采用內(nèi)核模塊方法將新功能添加到Linux內(nèi)核中,并通過(guò)應(yīng)用程序驗(yàn)證其正確性。
4結(jié)束語(yǔ)
操作系統(tǒng)實(shí)踐教學(xué)應(yīng)該為學(xué)生提供一個(gè)實(shí)驗(yàn)環(huán)境,使學(xué)生能夠觸摸真實(shí)的操作系統(tǒng)內(nèi)核,從而更好地理解操作系統(tǒng)的基本概念、原理和機(jī)制;使學(xué)生能夠親身體驗(yàn)操作系統(tǒng)功能的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程,培養(yǎng)學(xué)生應(yīng)用操作系統(tǒng)知識(shí)的能力。我們?cè)诓僮飨到y(tǒng)實(shí)踐教學(xué)中做了一些有益的工作,教學(xué)效果也不錯(cuò),但還存在一些問(wèn)題有待于進(jìn)一步研究和探索。例如,如何與課堂教學(xué)互補(bǔ),進(jìn)一步激發(fā)學(xué)生學(xué)習(xí)操作系統(tǒng)的興趣;如何通過(guò)構(gòu)建實(shí)驗(yàn)平臺(tái)將操作系統(tǒng)中更多的內(nèi)核機(jī)制(中斷機(jī)制、內(nèi)存管理機(jī)制等)呈現(xiàn)給學(xué)生;如何設(shè)計(jì)更為實(shí)用的、學(xué)生自主性更強(qiáng)的實(shí)驗(yàn)項(xiàng)目,等等。
參考文獻(xiàn)
[1] 羅宇. 操作系統(tǒng)課程設(shè)計(jì)[M]. 北京:機(jī)械工業(yè)出版社,2004.
[2] 陳莉君. 深入理解Linux內(nèi)核[M]. 北京:中國(guó)電力出版社,2004.
[3] 李善平. 邊學(xué)邊干—Linux內(nèi)核指導(dǎo)[M]. 浙江大學(xué)出版社,2002.
作者簡(jiǎn)介
鄧勝蘭(1961-),國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院研究員,曾經(jīng)多年從事巨型機(jī)操作系統(tǒng)的研制工作,目前主要從事操作系統(tǒng)的教學(xué)工作。
寧洪(1961-),國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院教授,長(zhǎng)期從事軟件工程和數(shù)據(jù)庫(kù)的教學(xué)科研工作,曾榮獲全軍優(yōu)秀教師稱號(hào)。