楊雪
摘 要: 計(jì)算機(jī)專業(yè)的學(xué)生需要更多地關(guān)心計(jì)算系統(tǒng)的整體特性。計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)分委員會(huì)系統(tǒng)研究組對(duì)課程在系統(tǒng)能力培養(yǎng)方面的作用進(jìn)行了層次劃分,操作系統(tǒng)屬于重組內(nèi)容的核心課程。為探討操作系統(tǒng)課程對(duì)學(xué)生系統(tǒng)能力培養(yǎng)的作用,以在Windows平臺(tái)開展“生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)為例,探討了在操作系統(tǒng)實(shí)驗(yàn)課中運(yùn)用“啟發(fā)式”教學(xué)法。
關(guān)鍵詞: 系統(tǒng)能力培養(yǎng); 啟發(fā)式教學(xué)法; 操作系統(tǒng); “生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2015)04-68-03
Abstract: Computer science students need to be more concerned about the overall characteristics of the computing system and their ability of developing application systems. The system research group of computer science and technology teaching steering committee have divided the curriculums into several partitions relying on their role of culturing students' system ability. According to their division, operating system course belongs to curriculums reorganizing the core content. In order to explore the role of this course in culturing students' system ability, taking the "producer-consumer" experiment as an example, the application of heuristic teaching in OS experiment lessons is proposed.
Key words: culturing students' system ability; heuristic teaching; Operating System; the "producer-consumer" experiment
0 引言
2013年,教育部計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)委員會(huì)系統(tǒng)研究組提出要加強(qiáng)學(xué)生系統(tǒng)能力培養(yǎng),明確指出學(xué)生的系統(tǒng)能力核心是:“在掌握計(jì)算系統(tǒng)基本原理的基礎(chǔ)上,熟悉如何進(jìn)一步開發(fā)構(gòu)建以計(jì)算技術(shù)為核心的應(yīng)用系統(tǒng)?!蓖瑫r(shí)建議把計(jì)算機(jī)專業(yè)課程分成三個(gè)層次,即:計(jì)算機(jī)系統(tǒng)基礎(chǔ)課程、重組內(nèi)容的核心課程和側(cè)重不同計(jì)算系統(tǒng)的若干相關(guān)平臺(tái)應(yīng)用課程。操作系統(tǒng)課程被劃分到第二層次,是計(jì)算機(jī)系統(tǒng)能力培養(yǎng)最基本的核心課程[1]。
操作系統(tǒng)課程具有概念抽象、系統(tǒng)性差、原理性強(qiáng)等特點(diǎn),教師授課難度較大,學(xué)生在學(xué)習(xí)過(guò)程中也往往感到非常抽象和難以理解。要將課程中抽象的原理與具體繁瑣的操作系統(tǒng)實(shí)現(xiàn)技術(shù)有機(jī)結(jié)合起來(lái),并以比較直觀的、易于理解和易于掌握的形式展現(xiàn),就必須輔以相應(yīng)的實(shí)驗(yàn)。然而,以知識(shí)傳授為核心的靜態(tài)實(shí)驗(yàn)教學(xué)方式(即教師在課堂上把實(shí)驗(yàn)原理、目的、步驟及注意事項(xiàng)均詳細(xì)講解一遍,學(xué)生只需按部就班地操作,用不著查資料,也不需思考實(shí)驗(yàn)中還有沒有需要改進(jìn)的地方。)會(huì)使學(xué)生完全處于被動(dòng)狀態(tài),壓抑他們的學(xué)習(xí)興趣和主動(dòng)參與實(shí)驗(yàn)的積極性[2]?!皢l(fā)式”教學(xué)法與傳統(tǒng)的灌輸式教學(xué)不同,它更強(qiáng)調(diào)學(xué)生在教師的引領(lǐng)和啟示下,主動(dòng)參與到發(fā)現(xiàn)問題、尋求答案的過(guò)程中,從而提高他們獨(dú)立思考、解決問題的能力[3]。下面以操作系統(tǒng)原理中經(jīng)典的“生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)為例,對(duì)在實(shí)驗(yàn)課中應(yīng)用“啟發(fā)式”教學(xué)法培養(yǎng)學(xué)生的系統(tǒng)能力進(jìn)行初步探索。
1 問題描述
“生產(chǎn)者-消費(fèi)者”是一個(gè)著名的進(jìn)程同步問題。它描述的是:有一群生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品,并將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi)。為使生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程能并發(fā)執(zhí)行,在兩者之間設(shè)置了一個(gè)具有n個(gè)緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程可以將其所生產(chǎn)的產(chǎn)品放入一個(gè)緩沖區(qū)中;消費(fèi)者進(jìn)程可從一個(gè)緩沖區(qū)中取走產(chǎn)品去消費(fèi)。盡管所有的生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程都是以異步方式運(yùn)行的,但它們之間必須保持同步,既不允許消費(fèi)者進(jìn)程到一個(gè)空緩沖區(qū)去取產(chǎn)品,也不允許生產(chǎn)者進(jìn)程向一個(gè)已裝滿產(chǎn)品且尚未被取走的緩沖區(qū)中投放產(chǎn)品[4]。
“生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)安排在“經(jīng)典的進(jìn)程同步問題”理論課之后。通過(guò)學(xué)習(xí),學(xué)生已經(jīng)熟悉“生產(chǎn)者-消費(fèi)者”模型,知道各進(jìn)程應(yīng)該互斥地使用緩沖池,且生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程之間需要用信號(hào)量同步。生產(chǎn)者和消費(fèi)者進(jìn)程通過(guò)信號(hào)量實(shí)現(xiàn)同步和互斥的偽代碼如表1所示。
表1中,P操作實(shí)現(xiàn)信號(hào)量的申請(qǐng),V操作實(shí)現(xiàn)信號(hào)量的釋放。緩沖池是臨界資源,用長(zhǎng)度為n的數(shù)組buffer[]表示,每個(gè)元素buffer[i]都是一個(gè)緩沖區(qū),用來(lái)存儲(chǔ)生產(chǎn)者生產(chǎn)的產(chǎn)品。互斥量mutex保證各進(jìn)程互斥地訪問緩沖池,初始值為1。生產(chǎn)者和消費(fèi)者分別用in和out來(lái)操作緩沖池中的各緩沖區(qū),并通過(guò)信號(hào)量full和empty同步。full代表緩沖池中存有產(chǎn)品的緩沖區(qū)的個(gè)數(shù),初始值為0;empty代表緩沖池中沒有存放產(chǎn)品的緩沖區(qū)的個(gè)數(shù),初始值為n。
2 組織實(shí)施
為減少學(xué)生對(duì)教師的依賴,加大他們?cè)趯?shí)驗(yàn)中的參與度,培養(yǎng)他們的系統(tǒng)能力,我們把“生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)的組織劃分為三個(gè)階段:課前布置任務(wù)、課內(nèi)檢查引導(dǎo)、課后收集反饋。
2.1 課前布置任務(wù)
為加大學(xué)生對(duì)實(shí)驗(yàn)的參與度,我們?cè)趯?shí)驗(yàn)課前向?qū)W生明確實(shí)驗(yàn)任務(wù)并提供相關(guān)API函數(shù)的簡(jiǎn)單說(shuō)明,要求學(xué)生學(xué)習(xí)資料并思考“生產(chǎn)者-消費(fèi)者”模型實(shí)現(xiàn)的方法。
2.1.1 明確實(shí)驗(yàn)任務(wù)
在理解“生產(chǎn)者-消費(fèi)者”模型的基礎(chǔ)上,利用多線程技術(shù)模擬實(shí)現(xiàn)一組生產(chǎn)者和消費(fèi)者;并假設(shè)這些生產(chǎn)者和消費(fèi)者等效,即:只要緩沖池未滿,生產(chǎn)者就可將產(chǎn)品送入緩沖池;只要緩沖池非空,消費(fèi)者就可以從中取產(chǎn)品進(jìn)行消費(fèi)。
2.1.2 提供學(xué)習(xí)資料
由于大多數(shù)學(xué)生在本次實(shí)驗(yàn)前未接觸過(guò)多線程編程,因此我們向?qū)W生提供一些與偽代碼中各操作相對(duì)應(yīng)的Windows API?!吧a(chǎn)者-消費(fèi)者”實(shí)驗(yàn)涉及到創(chuàng)建生產(chǎn)者與消費(fèi)者、操作信號(hào)量及使用臨界資源。我們整理了與之對(duì)應(yīng)的三類函數(shù)供學(xué)生預(yù)習(xí),分別是多線程操作函數(shù)、信號(hào)量操作函數(shù)和互斥量操作函數(shù)(通過(guò)互斥量保證生產(chǎn)者和消費(fèi)者對(duì)臨界資源互斥訪問)。多線程操作函數(shù)包括創(chuàng)建線程的函數(shù)_beginthreadex()和等待多個(gè)線程結(jié)束的函數(shù)WaitForMultipleObject()。信號(hào)量操作函數(shù)包括創(chuàng)建信號(hào)量的函數(shù)CreateSemaphore()、申請(qǐng)信號(hào)量的函數(shù)WaitForSingleObject()和釋放信號(hào)量的函數(shù)ReleaseSemaphore()?;コ饬坎僮骱瘮?shù)包括創(chuàng)建互斥量的函數(shù)CreateMutex()、申請(qǐng)互斥量的函數(shù)WaitForSingleObject()和釋放互斥量的函數(shù)ReleaseMutex()。當(dāng)生產(chǎn)者和消費(fèi)者完成所有工作后,需要銷毀線程、信號(hào)量和互斥量等資源。線程、信號(hào)量和互斥量都是內(nèi)核級(jí)資源,用CloseHandle()函數(shù)銷毀。
需要注意的是,我們只對(duì)上述函數(shù)進(jìn)行簡(jiǎn)單說(shuō)明,學(xué)生需要借助互聯(lián)網(wǎng)等資源學(xué)習(xí)它們的具體使用方法。
2.1.3 提出具體要求
提供預(yù)習(xí)資料的同時(shí)要求學(xué)生思考:實(shí)現(xiàn)“生產(chǎn)者-消費(fèi)者”模型應(yīng)考慮哪些技術(shù)細(xì)節(jié)?
2.2 課內(nèi)檢查引導(dǎo)
與教師詳細(xì)講解實(shí)驗(yàn)原理、目的、步驟及注意事項(xiàng),學(xué)生只需按部就班地操作不同,啟發(fā)式教學(xué)法注重發(fā)揮學(xué)生在實(shí)驗(yàn)課上的主動(dòng)性,積極引導(dǎo)學(xué)生思考并對(duì)學(xué)生的結(jié)論進(jìn)行總結(jié),從而完成實(shí)驗(yàn)。本階段又可分為預(yù)習(xí)成果檢查和總結(jié)引導(dǎo)兩部分。
2.2.1 預(yù)習(xí)成果檢查
實(shí)驗(yàn)課開始時(shí)我們通過(guò)提問檢查學(xué)生的預(yù)習(xí)情況,重點(diǎn)考察他們對(duì)實(shí)驗(yàn)中可能會(huì)遇到的技術(shù)問題的思考。檢查預(yù)習(xí)的好處在于:一方面,教師的監(jiān)督可以強(qiáng)迫學(xué)生獨(dú)立思考,減少學(xué)生對(duì)教師的依賴;另一方面,通過(guò)提問教師能夠了解學(xué)生對(duì)實(shí)驗(yàn)的理解程度,有助于總結(jié)引導(dǎo)。
2.2.2 總結(jié)引導(dǎo)
根據(jù)經(jīng)驗(yàn),大部分學(xué)生會(huì)對(duì)實(shí)驗(yàn)中可能遇到的技術(shù)問題進(jìn)行思考,但可能不夠全面。因此,在聽取學(xué)生對(duì)問題的回答后,應(yīng)進(jìn)行總結(jié),并進(jìn)一步啟發(fā)學(xué)生。我們以共用緩沖池(包含10個(gè)緩沖區(qū))的二個(gè)生產(chǎn)者和二個(gè)消費(fèi)者為例,實(shí)現(xiàn)該“生產(chǎn)者-消費(fèi)者”模型需要考慮以下三個(gè)技術(shù)細(xì)節(jié)。
⑴ 該模型使用的數(shù)據(jù)結(jié)構(gòu);
⑵ 程序的流程;
⑶ 實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者的具體操作。
以上三個(gè)技術(shù)細(xì)節(jié)的實(shí)現(xiàn)是本實(shí)驗(yàn)的關(guān)鍵。學(xué)生在課前已經(jīng)對(duì)相關(guān)函數(shù)進(jìn)行了預(yù)習(xí),因此我們并不立即給出答案,而是啟發(fā)學(xué)生基于預(yù)習(xí)和已有的編程知識(shí),嘗試解決這三個(gè)問題。
問題一:由表1中偽代碼可知,生產(chǎn)者和消費(fèi)者之間通過(guò)信號(hào)量同步,并互斥地訪問緩沖池。因此,信號(hào)量和臨界區(qū)是實(shí)現(xiàn)該模型必不可少的數(shù)據(jù)結(jié)構(gòu)。
問題二:程序的流程在main函數(shù)中設(shè)定。具體可分為數(shù)據(jù)結(jié)構(gòu)的初始化、創(chuàng)建多線程和資源回收。其中,資源的初始化及回收可以直接調(diào)用相關(guān)函數(shù),較為復(fù)雜的是創(chuàng)建多線程。講解創(chuàng)建多線程的方法時(shí)可以這樣啟發(fā)學(xué)生:每調(diào)用一次_beginthreadex()函數(shù)可以創(chuàng)建一個(gè)線程(用來(lái)模擬生產(chǎn)者或消費(fèi)者),因此,創(chuàng)建多個(gè)生產(chǎn)者和消費(fèi)者要多次調(diào)用_beginthreadex(),這種重復(fù)執(zhí)行相同的動(dòng)作顯然要用循環(huán)結(jié)構(gòu),從而引導(dǎo)學(xué)生寫出創(chuàng)建多線程的語(yǔ)句。創(chuàng)建2個(gè)生產(chǎn)者和2個(gè)消費(fèi)者的示例代碼如下。
上述代碼中的ProducerFun和ConsumerFun分別是生產(chǎn)者和消費(fèi)者線程的入口函數(shù),即生產(chǎn)者和消費(fèi)者將執(zhí)行的具體操作,需要重點(diǎn)實(shí)現(xiàn)。
問題三:實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者的具體操作,即編程實(shí)現(xiàn)函數(shù)ProducerFun()和ConsumerFun()。由于生產(chǎn)者和消費(fèi)者類似,我們以實(shí)現(xiàn)ProducerFun()函數(shù)為例,啟發(fā)學(xué)生在此基礎(chǔ)上獨(dú)立完成ConsumerFun()函數(shù)的編寫。
在本例中,信號(hào)量empty的初始值為10,full的初始值為0,它們的最大值與緩沖池中緩沖區(qū)的個(gè)數(shù)相同(都為10);互斥量mutex保證緩沖池被互斥地訪問??筛鶕?jù)生產(chǎn)者的偽代碼對(duì)應(yīng)寫出源程序。函數(shù)ProducerFun()與生產(chǎn)者Producer的偽代碼之間的對(duì)應(yīng)關(guān)系如表2所示。
2.3 課后收集反饋
學(xué)生的課后反饋是對(duì)實(shí)驗(yàn)課的重要補(bǔ)充??捎烧n代表收集學(xué)生對(duì)本次實(shí)驗(yàn)的感受和仍存在的疑問,統(tǒng)一反饋給教師。這種反饋能夠加強(qiáng)教師和同學(xué)之間的聯(lián)系,幫助教師掌握學(xué)生的整體情況,并對(duì)教學(xué)手段進(jìn)行改進(jìn)。在此階段,可以向編程基礎(chǔ)較差的學(xué)生提供示例代碼,并對(duì)其輔導(dǎo),盡量照顧到各層次的學(xué)生。
3 結(jié)束語(yǔ)
以知識(shí)傳授為核心的靜態(tài)實(shí)驗(yàn)教學(xué)方式要求學(xué)生按教師講解的步驟按部就班進(jìn)行實(shí)驗(yàn),容易使學(xué)生陷于被動(dòng),失去對(duì)實(shí)驗(yàn)課的興趣。本文針對(duì)操作系統(tǒng)課程的特點(diǎn),提出了適用于操作系統(tǒng)實(shí)驗(yàn)課的“啟發(fā)式”教學(xué)方法,并以“生產(chǎn)者-消費(fèi)者”實(shí)驗(yàn)為例,闡述了該方法在教學(xué)過(guò)程中的應(yīng)用。經(jīng)驗(yàn)證,采用啟發(fā)式教學(xué)法能夠加大學(xué)生在實(shí)驗(yàn)課中的參與度,提高學(xué)生的獨(dú)立思考能力,對(duì)學(xué)生系統(tǒng)能力的培養(yǎng)取得了初步成效。同時(shí),該方法對(duì)計(jì)算機(jī)操作系統(tǒng)課程其他問題及實(shí)驗(yàn)的講解具有一定的借鑒作用。
參考文獻(xiàn):
[1] 王志英,周興社,袁春風(fēng)等.計(jì)算機(jī)專業(yè)學(xué)生系統(tǒng)能力培養(yǎng)和系統(tǒng)課程體系設(shè)置研究[J].計(jì)算機(jī)教育.2013,(09):1-6
[2] 楊雯雯,張小崗.高校實(shí)驗(yàn)教學(xué)改革的問題及對(duì)策[C].北京高教學(xué)會(huì)實(shí)驗(yàn)室工作研究會(huì),2007:327-330
[3] 劉曉平,陳欣,李琳等.面向操作系統(tǒng)課程的“啟發(fā)——探究式”教學(xué)方法初探[J].計(jì)算機(jī)教育,2011.2:50-53
[4] 湯小丹,梁紅兵,哲鳳屏等.計(jì)算機(jī)操作系統(tǒng)(第四版)[M].西安電子科技大學(xué)出版社,2014.