肖延麗 彭 磊
(1泰山醫(yī)學院研究生部,山東 泰安 271016,2泰山醫(yī)學院信息工程學院,山東 泰安 271016)
1 引言:《操作系統(tǒng)》是計算機科學與技術專業(yè)重要的專業(yè)基礎課程,是國家指定的計算機專業(yè)考研課程之一。課程講述的內(nèi)容并不是針對單一特定產(chǎn)品的操作系統(tǒng),而是從各種具體的操作系統(tǒng)中提取出經(jīng)典的設計原理和成熟的實現(xiàn)技術進行介紹。學好《操作系統(tǒng)》對理解計算機系統(tǒng)的工作原理、提高應用程序的設計開發(fā)能力,都有非常重要的意義。傳統(tǒng)的《操作系統(tǒng)》教學方法主要是以抽象的原理敘述為主,存在著理論與實際應用相脫節(jié)的現(xiàn)象。使得學生學完該課程后,難于把所學的知識與常用的操作系統(tǒng)聯(lián)系起來,從而普遍感覺課程所講述的理論太抽象、難以理解,甚至有的學生會產(chǎn)生學習操作系統(tǒng)沒有實際用處的錯誤認識。代碼剖析法就是結(jié)合一個具體操作系統(tǒng),在講授抽象理論的同時剖析其源代,對所講授的內(nèi)容進行說明和驗證。從而避免單純的理論講述,引起學生的學習興趣,提高課程的教學質(zhì)量。
2 傳統(tǒng)的操作系統(tǒng)教學方法
《操作系統(tǒng)》是一門比較抽象、理論性較強而很少有機會得到實踐的課程。傳統(tǒng)的授課方式主要有以下幾種:
(1)純理論授課方式。即以課本為授課工具,教師完全以課堂講述抽象理論為主,不結(jié)合具體操作系統(tǒng)產(chǎn)品進行講解或指導學生進行驗證性、設計性實驗。這種授課方式使得理論嚴重脫離實際,學生沒有可以看的到、摸的著的東西作為參考,對抽象理論很難理解,提不起學習的興趣。(2)理論授課與驗證性操作結(jié)合方式。即進行理論授課的同時,選擇某個實際的操作系統(tǒng)產(chǎn)品作為實驗環(huán)境,例如Windows、Linux等。學生通過具體的驗證性操作、系統(tǒng)調(diào)用來觀察和驗證操作系統(tǒng)中一些技術??梢粤私饽承├碚?、技術的具體實現(xiàn)情況,但實驗中既不能修改代碼也不能擴充功能,因此只能"知其然,而不知其所以然"。(3)理論授課與模擬編程結(jié)合方式。即進行理論授課的同時,選取操作系統(tǒng)中的一些典型技術、算法編程并上機實現(xiàn),例如:銀行家算法、頁面置換算法等。但這些算法和程序是虛擬的,并不對系統(tǒng)中的實際資源進行真正的訪問和控制。這種方法可以加深學生對某些理論和技術的理解,但是其脫離操作系統(tǒng)的實際,學生不能獲得對系統(tǒng)內(nèi)部實現(xiàn)的直觀和具體感性的認識。(4)理論授課與獨立設計結(jié)合方式。即完成理論授課后,指導學生獨立設計一個結(jié)構(gòu)相對簡單但功能基本完備的小型操作系統(tǒng)。這是一種理想的教學方法,可以使學生充分理解操作系統(tǒng)的原理與實現(xiàn)技術。但即使是小型的操作系統(tǒng),其結(jié)構(gòu)也非常復雜,代碼量相當大,對剛學習過操作系統(tǒng),而對其原理理解不夠深刻,又沒有系統(tǒng)軟件開發(fā)經(jīng)驗的學生來說,完成這項任務有很大的難度。
3 代碼剖析法的特點
傳統(tǒng)的《操作系統(tǒng)》教學方式都存在著一系列的弊端。同時,由于操作系統(tǒng)產(chǎn)品設計中的新思想和新方法的不斷出現(xiàn),使操作系統(tǒng)的基本原理和實現(xiàn)技術都發(fā)生了不同程度的變化,而教學內(nèi)容往往相對滯后,跟不上新思想新技術的發(fā)展,更談不上與該領域的最新成果與技術應用同步。這些問題給教學帶來了一定的難度。代碼剖析法,即在《操作系統(tǒng)》課程的授課過程中結(jié)合一個具體操作系統(tǒng)講授原理并通過剖析其源代碼對所講授的內(nèi)容進行說明和驗證,然后要求學生用自己設計、編寫的代碼替換其中相應模塊或為其擴展功能。
代碼剖析法的目標是將操作系統(tǒng)的基本原理與操作系統(tǒng)的具體實例結(jié)合起來,以擺脫單純的闡述工作原理,將十分抽象、枯燥并難以理解的內(nèi)容變得具體生動。同時學生通過動手編寫部分模塊或擴展功能,可以進一步深刻了解抽象的原理是如何具體由代碼實現(xiàn)的。由于Windows系統(tǒng)源碼不公開,Linux系統(tǒng)功能、代碼過于復雜,我們選用μC/OS-Ⅱ作為實例進行代碼剖析。μC/OS-Ⅱ是一種源碼公開、簡單、易懂的嵌入式操作系統(tǒng)內(nèi)核,學生在有限的課程學時內(nèi)完全可以理解和接受。
4 代碼剖析在教學中的應用
μC/OS-Ⅱ是Jean J.Labrosse編寫的基于優(yōu)先級搶占式的實時多任務操作系統(tǒng),包含了實時內(nèi)核、任務管理、時間管理、任務間通信與同步(信號量,郵箱,消息隊列)和內(nèi)存管理等功能。μC/OS-Ⅱ具有可固化、可剪裁、高穩(wěn)定性和可靠性的特點。它的源代碼大部分是用C語言編寫的,源碼完全公開,便于移植和維護,而且對于學校研究完全免費,只有在應用于盈利項目時才需要支付少量的版權(quán)費。
μC/OS-Ⅱ的核心代碼主要包括十幾個C源程序文件和一個匯編文件,代碼量不是很大,注釋詳細,特別適合一般使用者的學習、研究。雖然?C/OS-Ⅱ是專門為嵌入式系統(tǒng)應用而設計的操作系統(tǒng),但它可以在基于PC機的DOS或Windows環(huán)境下運行,通過移植也可以不依賴其他操作系統(tǒng)直接運行在PC機上。同時μC/OS-Ⅱ允許使用者自己修改源代碼,增加新功能后編譯運行,因此初學者可以在自己熟悉的PC環(huán)境下進行學習、分析、研究和開發(fā)。
在《操作系統(tǒng)》的教學過程中,講解抽象理論的同時以μC/OS-Ⅱ中對應技術作為案件進行代碼剖析,能夠使學生直觀的接受所學知識,下面舉例說明。當講到進程管理時,進程通訊機制包括互斥信號量、同步信號量、消息隊列、信箱等,μC/OS-Ⅱ中分別在 OS_MUTEX.C、OS_SEM.C、OS_Q.C、OS_MBOX.C 等文件中實現(xiàn),可以通過分析其代碼,使學生對所學內(nèi)容有具體的認識。其中消息傳遞機制在進程控制塊中相關的代碼如下:typedef struct os_tcb{
OS_EVENT*OSTCBEventPtr;//指向事件控制塊的指針
void*OSTCBMsg;//傳遞給任務的消息指針
INT8U OSTCBStat;//義任務的狀態(tài)字
INT8U OSTCBPrio;//任務的優(yōu)先級 ……}OS_TCB;
事件控制塊OS_EVENT中包括:存放指向消息或者消息隊列的指針void*OSEventPtr,存放等待消息的任務列表INT8U OSEventTbl[OS_EVENT_TBL_SIZE]等信息。存放一個消息的數(shù)據(jù)結(jié)構(gòu)代碼如下:typedef struct{
void*OSMsg;//指向消息隊列中消息的指針
INT16U OSNMsgs;//消息隊列中的消息數(shù)
INT16U OSQSize;//是消息隊列的總的容量
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
INT8U OSEventGrp;//和 OSEventTbl[]一起結(jié)合,是消息隊列的等待任務列表}OS_Q_DATA;
發(fā)送消息原語Send()由INT8U OSQPost()所實現(xiàn),代碼如下:INT8U OSQPost(OS_EVENT*pevent,void*msg){OS_Q*pq;//定義一個隊列事件 ……
*pq->OSQIn++=msg;//插入當前的消息
pq->OSQEntries++;//消息隊列數(shù)加1
if(pq->OSQIn==pq->OSQEnd){
pq->OSQIn=pq->OSQStart;}
return(OS_NO_ERR);}
接收消息原語Receive()由void*OSQPend()所實現(xiàn),代碼如下:
void*OSQPend(OS_EVENT*pevent,INT16U timeout,INT8U*err){
void*msg;//定義消息隊列的指針
OS_Q*pq;//定義一個隊列事件
pq=(OS_Q*)pevent->OSEventPtr;//隊列指針=當前事件指針if(pq->OSQEntries!=0){
msg=*pq->OSQOut++;//OSQOut將對應的地址的消息復制到msg
pq->OSQEntries--;//隊列消息數(shù)減1}
……}
學生可以自己編寫代碼驗證消息傳遞機制的運行情況,或者修改消息機制的功能,例如:
OS_EVENT*MsgQueue;
void*MsgQueueTbl[MSG_QUEUE_SIZE];
void TaskQ(void*pdata){
while(1)OSQPend(MsgQueue,0,&err);}
5 結(jié)束語:代碼剖析法應用在《操作系統(tǒng)》課程的教學中,突破了傳統(tǒng)講授型教學方法枯燥無味、理論脫離實際的弊端,提高了課堂授課質(zhì)量。同時突破了傳統(tǒng)講授型教學方法重理論輕實踐的缺點,對于學生理解抽象理論,提高綜合設計能力有著很好的幫助。
[1]滕艷平,王海珍,潘海珠.高校操作系統(tǒng)課程教學創(chuàng)新模式的研究與實踐[J].計算機教育,2009,7 101-103.
[2]申華.師范院?!恫僮飨到y(tǒng)原理》課程建設的思考[J].白城師范學院學報,2009,23(3):93-95.
[3]劉金平.淺論互動性在操作系統(tǒng)課程教學中的應用[J].江蘇大學學報,2005,27(3):86-88.