李文娟 王李冬 壽周翔 趙海麗
摘要:操作系統(tǒng)原理是本科計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的主干課程,也是構(gòu)建計(jì)算機(jī)專(zhuān)業(yè)知識(shí)體系的核心環(huán)節(jié),然而傳統(tǒng)“重理論講授、輕實(shí)踐能力培養(yǎng)”的教學(xué)模式嚴(yán)重影響了該課程的教學(xué)效果。為此,本文在分析課程教學(xué)現(xiàn)狀、闡明傳統(tǒng)教學(xué)中存在的一系列問(wèn)題的基礎(chǔ)上,提出了“源碼嵌入式”理論教學(xué)改革新模式。并以此為契機(jī),構(gòu)建了一套分層立體式驅(qū)動(dòng)的實(shí)踐教學(xué)支撐體系。教學(xué)實(shí)踐表明,新的教學(xué)模式和方法能夠有效提高本課程的實(shí)際教學(xué)效果。
關(guān)鍵詞:教學(xué)改革;操作系統(tǒng)原理;多層次實(shí)踐教學(xué)體系;源碼嵌入式教學(xué)模式
1引言
操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的靈魂與核心,是底層硬件系統(tǒng)向軟件系統(tǒng)的第一層擴(kuò)展、實(shí)現(xiàn)軟件和硬件協(xié)同工作的指揮棒,具有極其重要的地位和作用?!恫僮飨到y(tǒng)原理》課程的教學(xué)內(nèi)容是架構(gòu)完整的計(jì)算機(jī)專(zhuān)業(yè)知識(shí)體系不可或缺的重要組成部分,因而被ACM、IEEE和教指委列為計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的核心專(zhuān)業(yè)課。本科階段《操作系統(tǒng)原理》的教學(xué)目標(biāo)是使得學(xué)生系統(tǒng)掌握操作系統(tǒng)的設(shè)計(jì)原理、各組成模塊的主要功能和實(shí)現(xiàn)技術(shù),具有初步操作系統(tǒng)開(kāi)發(fā)和維護(hù)的能力。然而事實(shí)是:操作系統(tǒng)已然成為計(jì)算機(jī)專(zhuān)業(yè)課中最難上難學(xué)的課程之一。其原因主要有兩點(diǎn):一是課程涉及的知識(shí)面廣、概念和原理眾多,理論性強(qiáng),如果教師缺乏足夠的駕馭能力,很容易將課程上成“偽政治課”,導(dǎo)致理論與實(shí)踐嚴(yán)重脫節(jié),無(wú)法真正實(shí)現(xiàn)課程的培養(yǎng)目標(biāo);二是這門(mén)課程的實(shí)踐環(huán)節(jié)較難與實(shí)際應(yīng)用項(xiàng)目掛鉤,理論與實(shí)踐存在較大距離,不易激發(fā)學(xué)生的學(xué)習(xí)興趣。
為了改變現(xiàn)狀,更好地完成《操作系統(tǒng)原理》的教學(xué)任務(wù),提高學(xué)生動(dòng)手實(shí)踐能力,幫助學(xué)生系統(tǒng)架設(shè)起學(xué)科知識(shí)體系,我們?cè)诮虒W(xué)實(shí)踐中,努力探索、總結(jié)經(jīng)驗(yàn),提出了一套教學(xué)改革的新方法。首先,在理論教學(xué)中,我們提出了“源碼嵌入式教學(xué)法”,即在講授操作系統(tǒng)原理的過(guò)程中結(jié)合開(kāi)源操作系統(tǒng)(Linux或minix)的源代碼幫助學(xué)生獲得實(shí)際操作系統(tǒng)設(shè)計(jì)的直觀感受。其次,我們?cè)O(shè)計(jì)了一套分層立體式實(shí)驗(yàn)教學(xué)體系作為理論教學(xué)的有益支撐:通過(guò)實(shí)驗(yàn)驗(yàn)證基本原理、觀察操作系統(tǒng)現(xiàn)象、學(xué)習(xí)基于操作系統(tǒng)的應(yīng)用和開(kāi)發(fā)。從幾年的教學(xué)反饋來(lái)看,獲得了良好的教學(xué)評(píng)價(jià)和效果。
2存在問(wèn)題分析
作為最底層的系統(tǒng)軟件,操作系統(tǒng)在計(jì)算機(jī)系統(tǒng)中的特殊位置決定了操作系統(tǒng)原理這門(mén)課在計(jì)算機(jī)科學(xué)與技術(shù)知識(shí)體系中的特殊地位??v觀目前該課程的教學(xué)現(xiàn)狀,普遍存在如下主要問(wèn)題:
2.1理論教學(xué)手段仍比較單一
盡管不斷有新的教學(xué)理念和教學(xué)模式出現(xiàn),比如翻轉(zhuǎn)課堂、微課、慕課等,但大多數(shù)院校仍采用傳統(tǒng)的理論教學(xué)方法講授本課程。由于缺少先進(jìn)的理論教學(xué)配套演示環(huán)境,使得任課教師大多數(shù)時(shí)候只能站在講臺(tái)上講著干巴巴的理論,這顯然很難激發(fā)學(xué)生的學(xué)習(xí)興趣。
另一方面,目前大部分操作系統(tǒng)教材內(nèi)容比較陳舊、脫離新技術(shù)和新應(yīng)用,讓學(xué)生有種學(xué)無(wú)所得的感覺(jué)。并且傳統(tǒng)操作系統(tǒng)教學(xué)往往僅從理論上講授操作系統(tǒng)的幾大主要功能模塊,忽略了對(duì)具體實(shí)現(xiàn)技術(shù)的分析。在這種教學(xué)模式下,教師對(duì)概念和原理的講解通常是晦澀抽象的,學(xué)生沒(méi)有真正理解概念或原理,更不要說(shuō)消化吸收這些知識(shí)并加以應(yīng)用于實(shí)際的操作中。而此時(shí)如果教師還一味地讓學(xué)生吸收課本上的內(nèi)容,這很容易讓學(xué)生誤以為操作系統(tǒng)的知識(shí)是枯燥、乏味和無(wú)用的。
2.2缺少科學(xué)的實(shí)踐體系支撐
盡管《操作系統(tǒng)原理》是一門(mén)理論和實(shí)踐性都很強(qiáng)的課程,但長(zhǎng)期以來(lái)在教學(xué)設(shè)計(jì)中往往對(duì)實(shí)驗(yàn)環(huán)節(jié)缺乏足夠重視,實(shí)驗(yàn)學(xué)時(shí)很少,少數(shù)院校甚至未設(shè)置實(shí)驗(yàn)學(xué)時(shí)。即便開(kāi)設(shè)實(shí)驗(yàn)課的院校開(kāi)出的實(shí)驗(yàn)也大多是一些簡(jiǎn)單的驗(yàn)證性實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容陳舊,綜合設(shè)計(jì)類(lèi)或探索創(chuàng)新類(lèi)的實(shí)驗(yàn)很少或是沒(méi)有,沒(méi)有形成能夠?qū)碚摻虒W(xué)起到良好支撐作用的實(shí)驗(yàn)教學(xué)體系,無(wú)法很好地完成理論與實(shí)踐的銜接。這使得學(xué)生學(xué)習(xí)本課程很難獲得自主程序設(shè)計(jì)的快樂(lè)和成就感,最終僅接觸到操作系統(tǒng)的皮毛,嚴(yán)重影響了教學(xué)效果。
2.3學(xué)生的學(xué)習(xí)熱情普遍不高
在教學(xué)實(shí)施過(guò)程中我們發(fā)現(xiàn),大多數(shù)學(xué)生對(duì)本課程的學(xué)習(xí)興趣不濃、積極性不高。經(jīng)過(guò)仔細(xì)調(diào)研,我們發(fā)現(xiàn)主要有兩方面的原因:一是學(xué)生中存在“操作系統(tǒng)無(wú)用論”。由于操作系統(tǒng)原理的學(xué)習(xí)不像其他項(xiàng)目類(lèi)課程,可以立馬看到學(xué)習(xí)成果。比如學(xué)生在學(xué)習(xí)網(wǎng)頁(yè)設(shè)計(jì)之后可以進(jìn)行網(wǎng)頁(yè)制作,學(xué)習(xí)移動(dòng)安卓開(kāi)發(fā)之后可以進(jìn)行簡(jiǎn)單的APP設(shè)計(jì)。而學(xué)習(xí)完操作系統(tǒng)的本科生卻很難開(kāi)發(fā)一個(gè)操作系統(tǒng),因此有一部分學(xué)生認(rèn)為操作系統(tǒng)學(xué)不學(xué)沒(méi)有太大關(guān)系。二是全面深入地學(xué)習(xí)操作系統(tǒng)難度較大。由于“操作系統(tǒng)原理”是一門(mén)理論性和綜合性都很強(qiáng)的課程,學(xué)好這門(mén)課需要具備較強(qiáng)的軟硬件知識(shí)基礎(chǔ),以及較強(qiáng)的邏輯和抽象思維能力以及扎實(shí)的編程功底等,課程學(xué)習(xí)的難度無(wú)形中增加了學(xué)生的畏難情緒。
3“源碼嵌入式”理論教學(xué)模式
Linux操作系統(tǒng)的創(chuàng)始人Linus認(rèn)為,要準(zhǔn)確理解操作系統(tǒng)的運(yùn)行機(jī)制必須閱讀其源代碼。盡管操作系統(tǒng)原理課講述了操作系統(tǒng)的基本工作原理,然而原理畢竟是原理,它省略了很多細(xì)節(jié),而這些細(xì)節(jié)正如麻雀身上的羽毛,是構(gòu)成一只完整的麻雀不可或缺的組成部分。因此,學(xué)好操作系統(tǒng)不僅應(yīng)該學(xué)習(xí)操作系統(tǒng)的基本工作原理而且應(yīng)該至少了解一款具體操作系統(tǒng)的實(shí)現(xiàn)方法。而閱讀源代碼正是學(xué)習(xí)系統(tǒng)實(shí)現(xiàn)的最佳途徑。目前開(kāi)源操作系統(tǒng)Linux為我們學(xué)習(xí)操作系統(tǒng)具體實(shí)現(xiàn)提供了極大便利。在理論課講授操作系統(tǒng)各組成部分的工作原理時(shí),我們向?qū)W生展示Linux對(duì)應(yīng)功能模塊的內(nèi)核源代碼,講解對(duì)應(yīng)模塊的主要數(shù)據(jù)結(jié)構(gòu)定義和功能函數(shù)的設(shè)計(jì)實(shí)現(xiàn)等,引導(dǎo)學(xué)生通過(guò)閱讀源代碼來(lái)深入領(lǐng)會(huì)操作系統(tǒng)原理的具體實(shí)現(xiàn)方法。此外,在課堂教學(xué)中,我們還輔以“問(wèn)題情境法”,提出諸如“基本原理與具體實(shí)現(xiàn)有何對(duì)應(yīng)關(guān)系”、“這個(gè)模塊或數(shù)據(jù)結(jié)構(gòu)是否是必不可少的”、“有沒(méi)有優(yōu)化的可能”等一系列具有啟發(fā)性的問(wèn)題,鼓勵(lì)學(xué)生進(jìn)行分組討論、深入分析和探索。在教學(xué)設(shè)計(jì)上我們依據(jù)從抽象到具體,又從具體提升到抽象的螺旋式上升的過(guò)程,引發(fā)學(xué)生進(jìn)行全面思考,最終達(dá)到對(duì)操作系統(tǒng)原理和工作機(jī)制的深入理解。例如在講進(jìn)程的概念時(shí),我們向?qū)W生展示Linux任務(wù)數(shù)據(jù)結(jié)構(gòu)task_struct,幫助學(xué)生理解PCB中包含的主要內(nèi)容;在講系統(tǒng)調(diào)用時(shí),給學(xué)生看Linux中包含系統(tǒng)調(diào)用編號(hào)的頭文件mlistd.h;在講解進(jìn)程創(chuàng)建時(shí),我們向?qū)W生展示fork0、vfork0與clone0函數(shù)的內(nèi)核源碼。通過(guò)閱讀源碼,學(xué)生很容易領(lǐng)悟進(jìn)程創(chuàng)建的實(shí)質(zhì)、創(chuàng)建的主要流程,不同創(chuàng)建方法的差異等。
“源碼嵌入式”理論教學(xué)法在實(shí)踐中取得了良好的效果,因?yàn)橥ㄟ^(guò)閱讀源代碼,學(xué)生切實(shí)感覺(jué)到自己學(xué)習(xí)的并非是空洞的理論,而是實(shí)實(shí)在在的具體實(shí)現(xiàn)方法,從而大大提高學(xué)生對(duì)抽象知識(shí)及理論的認(rèn)知程度。此外,為了配合理論課教學(xué),我們還制作了內(nèi)容豐富的電子教案、微課視頻和FLASH演示課件等。我們將諸如死鎖、進(jìn)程狀態(tài)轉(zhuǎn)換、銀行家算法、經(jīng)典進(jìn)程同步問(wèn)題等通過(guò)動(dòng)畫(huà)呈現(xiàn)給學(xué)生,極大提高了學(xué)生的學(xué)習(xí)興趣。
4分層立體式實(shí)踐教學(xué)支撐體系
我們認(rèn)為能夠?qū)Σ僮飨到y(tǒng)原理課程的理論教學(xué)起到有效支撐的實(shí)驗(yàn)教學(xué)體系應(yīng)包括三個(gè)遞進(jìn)的層次:操作系統(tǒng)基礎(chǔ)實(shí)驗(yàn)、設(shè)計(jì)提高實(shí)驗(yàn)和基于操作系統(tǒng)的綜合開(kāi)發(fā)實(shí)驗(yàn)。為此,我們針對(duì)本科計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)《操作系統(tǒng)原理》課程,編寫(xiě)了配套實(shí)驗(yàn)教材《計(jì)算機(jī)操作系統(tǒng)實(shí)訓(xùn)》,配合理論課程的知識(shí)由淺入深地逐步展開(kāi)。
4.1基礎(chǔ)實(shí)驗(yàn)
1)用戶接口相關(guān)實(shí)驗(yàn)
對(duì)于計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生而言,學(xué)習(xí)操作系統(tǒng)的最低要求是能夠使用各類(lèi)主流操作系統(tǒng),能夠熟練使用操作系統(tǒng)提供的各類(lèi)用戶接口。因此,基礎(chǔ)實(shí)驗(yàn)部分,我們首先安排了Windows和Linux兩款操作系統(tǒng)用戶接口的相關(guān)實(shí)驗(yàn)。Window部分包括常用的DOS命令、批處理程序,WIN-API編程基礎(chǔ)等;Linux則包括GNOME桌面環(huán)境、vi、SHELL命令和SHELL程序設(shè)計(jì)等。
2)操作系統(tǒng)的開(kāi)發(fā)工具
操作系統(tǒng)提供了豐富的應(yīng)用程序開(kāi)發(fā)工具和開(kāi)發(fā)平臺(tái),包括文本處理工具、圖形圖像處理工具、軟件開(kāi)發(fā)和維護(hù)工具等。而操作系統(tǒng)的先修課程大部分是以Windows系統(tǒng)的開(kāi)發(fā)平臺(tái)為背景,故學(xué)生基本具備了Windows操作系統(tǒng)常用開(kāi)發(fā)語(yǔ)言和開(kāi)發(fā)平臺(tái)的基礎(chǔ)知識(shí)和編程能力。為此,本部分實(shí)驗(yàn)將重點(diǎn)放在引導(dǎo)學(xué)生學(xué)習(xí)Linux操作系統(tǒng)的開(kāi)發(fā)工具,包括語(yǔ)言編譯器GCC、調(diào)試工具GDB和大型程序的維護(hù)工具M(jìn)AKE。
3)進(jìn)程管理部分實(shí)驗(yàn)
進(jìn)程管理體現(xiàn)著操作系統(tǒng)對(duì)系統(tǒng)動(dòng)態(tài)工作過(guò)程的把控,具有十分重要的作用。進(jìn)程是本科操作系統(tǒng)原理課程的重要概念,也是影響學(xué)生對(duì)并發(fā)程序設(shè)計(jì)思想深入理解的重要環(huán)節(jié)。故在基礎(chǔ)部分安排了大量進(jìn)程相關(guān)的實(shí)驗(yàn),主要包括進(jìn)程的狀態(tài)及控制、并發(fā)現(xiàn)象的觀察、進(jìn)程互斥,進(jìn)程通信等。
4.2設(shè)計(jì)提高實(shí)驗(yàn)
本課程更進(jìn)一步的目標(biāo)是使學(xué)生在掌握操作系統(tǒng)基本原理的基礎(chǔ)上,初步掌握操作系統(tǒng)模塊設(shè)計(jì)的方法,培養(yǎng)設(shè)計(jì)操作系統(tǒng)的能力。因而,本實(shí)驗(yàn)?zāi)K的教學(xué)內(nèi)容涉及操作系統(tǒng)的體系結(jié)構(gòu)、任務(wù)管理模型、資源管理模式、任務(wù)調(diào)度算法、虛擬存儲(chǔ)技術(shù)等,使學(xué)生通過(guò)實(shí)驗(yàn)真正認(rèn)識(shí)多進(jìn)程/線程同步、調(diào)度策略設(shè)計(jì)、死鎖避免、文件系統(tǒng)、I/O方式等實(shí)現(xiàn)原理。
1)經(jīng)典同步問(wèn)題
經(jīng)典同步問(wèn)題是對(duì)操作系統(tǒng)在處理進(jìn)程同步關(guān)系中常見(jiàn)復(fù)雜問(wèn)題的模擬,具有較強(qiáng)的理論和實(shí)踐學(xué)習(xí)的價(jià)值。因此安排了一系列經(jīng)典同步問(wèn)題的仿真實(shí)驗(yàn),包括生產(chǎn)者一消費(fèi)者問(wèn)題、讀者一寫(xiě)者問(wèn)題、哲學(xué)家就餐問(wèn)題和理發(fā)師睡眠問(wèn)題等。
2)處理機(jī)調(diào)度算法
處理機(jī)調(diào)度策略是關(guān)系系統(tǒng)能否實(shí)現(xiàn)用戶和系統(tǒng)目標(biāo)的關(guān)鍵因素。為了讓學(xué)生更加深入理解各種常見(jiàn)調(diào)度策略的本質(zhì),我們?cè)O(shè)計(jì)了一系列仿真實(shí)驗(yàn),包括先來(lái)先服務(wù)FIFO、短作業(yè)優(yōu)先、最高響應(yīng)比、優(yōu)先級(jí)和輪轉(zhuǎn)法等幾種調(diào)度算法等。
3)死鎖問(wèn)題
死鎖是計(jì)算機(jī)系統(tǒng)在由單道系統(tǒng)進(jìn)化到多道系統(tǒng)之后,因?yàn)椴l(fā)進(jìn)程的相互牽制、資源不足,所導(dǎo)致的最嚴(yán)重的問(wèn)題。為了更好的幫助學(xué)生理解死鎖的概念,理解死鎖處理的各種策略,此部分包含死鎖避免的銀行家算法實(shí)驗(yàn)。
4)其他設(shè)計(jì)類(lèi)實(shí)驗(yàn)
除了上述主要類(lèi)別外,還有模擬現(xiàn)代I/O方式的SPOOL-ING系統(tǒng)的仿真實(shí)驗(yàn)、引導(dǎo)裝載程序、簡(jiǎn)化的文件系統(tǒng)等設(shè)計(jì)類(lèi)實(shí)驗(yàn)。
4.3基于操作系統(tǒng)的綜合開(kāi)發(fā)實(shí)驗(yàn)
操作系統(tǒng)課程的終極目標(biāo)是在熟練掌握操作系統(tǒng)原理和架構(gòu)的基礎(chǔ)上,培養(yǎng)基于操作系統(tǒng)平臺(tái)的大型程序設(shè)計(jì)能力和較大規(guī)模項(xiàng)目開(kāi)發(fā)的能力。因而本模塊是綜合性、創(chuàng)新性的實(shí)驗(yàn)。我們針對(duì)Windows操作系統(tǒng)和Linux操作系統(tǒng)分別設(shè)計(jì)了對(duì)應(yīng)的復(fù)雜程序開(kāi)發(fā)實(shí)驗(yàn)。Windows上主要包括數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā),多線程應(yīng)用等實(shí)驗(yàn)。而Linux上主要包括SHELL與C的交叉應(yīng)用、編寫(xiě)自己的SHELL、Linux數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)、QT編程等。