摘要:針對操作系統(tǒng)課程存在涉及面廣、實踐性強,很多概念和算法相當抽象,初學者不易理解的教學實際,在分析情景教學法、比喻教學法和理論聯(lián)系實際等教學方法的基礎上,本文提出在操作系統(tǒng)教學中使用多種教學法的觀點,結合授課實際,在操作系統(tǒng)課程教學中取得了生動形象的效果。
關鍵詞:操作系統(tǒng);情景教學;比喻教學;理論聯(lián)系實際
操作系統(tǒng)是計算機系統(tǒng)的基本組成部分。同樣,操作系統(tǒng)課程也是計算機教學的基本組成部分,是計算機專業(yè)的重要專業(yè)基礎課。操作系統(tǒng)作為計算機硬件和計算機用戶之間的中介,對下直接與硬件打交道,對上提供方便的用戶接口。操作系統(tǒng)課程涉及了計算機體系結構/硬件、軟件設計以及程序設計語言、數(shù)據(jù)結構和網(wǎng)絡等領域,具有實踐性強、涉及面廣和錯綜復雜等特點。其理論中的許多概念、算法相當抽象,導致初學者不易理解,從而難以掌握。
1多種教學方法在教學中的應用
1.1情景教學法
情景教學就是設計出一些真實性或準真實性的情形和景象[1],為教學提供充足的實例,并活化所教授的知識。情景的生動與形象有助于學生把知識融于生動的情景之中,提高學習興趣。
教師可以在操作系統(tǒng)教學中精心安排的情景為線索,結合操作系統(tǒng)的功能,并在講解中對所涉及的算法和數(shù)據(jù)結構進行有針對性地介紹,把操作系統(tǒng)的工作流程串聯(lián)起來,使學生對操作系統(tǒng)有一個形象、系統(tǒng)的了解,從而進一步加深學生對操作系統(tǒng)知識的學習和掌握。
操作系統(tǒng)的工作之一就是控制程序的執(zhí)行,即負責啟動每個程序以及結束程序。
初學程序者,接觸到的第一個程序往往是簡單的hello程序。其源代碼如下:
#include
intmain()
{
printf("helloworld\");
return0;
}
對此,我們可以設計一個情景教學單元[2],通過跟蹤hello程序的生命周期來學習操作系統(tǒng)的工作流程,hello的生命周期從它被程序員創(chuàng)建開始,包括運行、輸出簡單的消息,然后終止。
我們知道,源程序編輯好后,經(jīng)過預處理、編譯、匯編、鏈接等處理得到可執(zhí)行文件hello,并被存放到外存上。為了在Linux運行該可執(zhí)行文件,我們輸入它的文件名。
當用戶登錄進入Linux系統(tǒng)時,同時啟動一個shell進程。shell管理用戶與操作系統(tǒng)之間的交互,即:等待用戶輸入,向操作系統(tǒng)解釋用戶的輸入,并輸出操作系統(tǒng)的處理結果。
在命令提示符后輸入命令后,shell讀入這個命令行并對其進行解析,將它分解為詞。接著,shell檢查第一個詞是內(nèi)置命令還是磁盤上的可執(zhí)行程序。若是內(nèi)置命令,shell就在自己內(nèi)部執(zhí)行它。否則,shell將在路徑變量所指的目錄中查找這個程序。當用戶在鍵盤上鍵入hello并按回車后,shell在指定的目錄找到了hello的可執(zhí)行代碼,shell用fork創(chuàng)建一子進程來執(zhí)行它。之后,shell會執(zhí)行waitpid系統(tǒng)調(diào)用進入睡眠(或等待)狀態(tài)直至該子進程結束。
用fork創(chuàng)建的子進程是由父進程即shell進程的地址空間的復制組成。兩個進程都繼續(xù)執(zhí)行位于系統(tǒng)調(diào)用fork之后的指令,不同的是:對于新(子)進程,系統(tǒng)調(diào)用fork的返回值為0;而對于父進程,返回值為非零。調(diào)用fork后,子進程使用系統(tǒng)調(diào)用execlp。execlp將hello二進制代碼裝進內(nèi)存,消除了原來包含系統(tǒng)調(diào)用的程序的內(nèi)存映射,并從hello二進制代碼的起始處開始運行。
當hello子進程結束后,喚醒shell父進程,shell會根據(jù)需要報告程序的退出狀態(tài)。此時,屏幕上又會出現(xiàn)命令提示符,整個過程重頭開始。
通過情景教學,可以引出以下結論:進程是操作系統(tǒng)對運行程序的一種抽象,在一個系統(tǒng)上可以同時運行多個進程,而每個進程都好像在獨占地使用硬件,我們稱之為并發(fā)運行,從微觀看一個進程的指令和另一個進程的指令是交錯執(zhí)行的。操作系統(tǒng)實現(xiàn)這種交錯執(zhí)行的機制稱為上下文切換。操作系統(tǒng)保存進程運行所需的所有狀態(tài)信息,這種狀態(tài)就是上下文,比如PC和寄存器文件的當前值以及主存的內(nèi)容。在任何一個時刻,單處理機系統(tǒng)都只有一個進程正在運行。當操作系統(tǒng)把處理機控制權從當前進程轉移到某個新進程時,就會進行上下文切換,即保存當前進程的上下文、設置新進程的上下文,然后將控制權轉移到新進程,新進程開始執(zhí)行。
該情景形象地描述了操作系統(tǒng)的主要流程,讓學生對操作系統(tǒng)的功能有一個全面而系統(tǒng)的了解,增強了他們的學習積極性,因而有效地提高了教學效果。
1.2比喻教學法
比喻教學法[3]是一種打比方的方法,它將兩個本質上有異曲同工之處的事物相聯(lián)系。通常選擇一個學生熟悉的事物,將其引申至未知或抽象的事物,達到讓學生更好地認識新事物的目的。恰當?shù)谋扔饔袝r勝過千言萬語,它可以化難為易,讓人豁然開朗。
比喻教學法是一種有效的授課方法,可以使學生加深對概念的理解,激發(fā)學生的學習興趣,學習效果也會明顯改善,教學質量將會有很大提高。
在進程管理一章中,整型信號量機制中的wait操作,當信號量S≤0時,就會不斷地測試,該機制并未遵循“讓權等待”的準則,而使該進程處于“忙等”的狀態(tài)。因此引進了記錄型信號量機制:
type semaphore=record
value:integer;
L:list of process;
End
其中,s.value表示資源信號量,代表資源數(shù)目;S.L表示等待信號量鏈表,鏈接等待進程。其相應的wait(s)和signal(s)可描述為:
Procedure wait(s)
var S:Semaphore;
begin
s.value:=s.value-1;
if s.value<0 then block(S.L);
end;
Procedure signal(s)
var s:semaphore;
begin
s.value:=s.value+1;
if s.value≤0 then wakeu