戴莉萍
關(guān)鍵詞:Python語言;操作系統(tǒng);算法實現(xiàn);教學(xué)改革
操作系統(tǒng)(Operating System) 是計算機軟件體系的基礎(chǔ),操作系統(tǒng)課程是計算機專業(yè)教學(xué)過程中一門基礎(chǔ)且較為重要的課程,同時設(shè)置了理論教學(xué)和實驗教學(xué)。理論課上核心算法原理的講授有助于學(xué)生們構(gòu)建扎實的專業(yè)知識體系;實驗課上重要算法的實現(xiàn)有助于提高學(xué)生們的程序設(shè)計水平及加深對理論知識的進一步理解[1-3]。
操作系統(tǒng)課程理論教學(xué)一直存在比較大的挑戰(zhàn),例如眾多的知識點如何在有限的課堂時間內(nèi)組織完成;復(fù)雜算法需要通過怎樣合適高效的描述方式更好地傳遞給學(xué)生;課堂教學(xué)效果的實時反饋應(yīng)怎樣利用優(yōu)秀的教學(xué)工具來收集與分析等。因此針對操作系統(tǒng)課程理論教學(xué)的改革不斷在被探討、應(yīng)用與總結(jié)中[4-6]。
Python語言作為一種通用的程序設(shè)計語言,語法非常簡單,代碼表述清晰易懂,可以與其他課程的教學(xué)案例結(jié)合使用[7-8]。本文結(jié)合Python技術(shù),對操作系統(tǒng)中算法課程教學(xué)的講解方式進行一定的探索與改革,以便提高學(xué)生的興趣,加快學(xué)生理解進度,達(dá)到比較好的課堂教學(xué)效果。
1 OS 算法課程教學(xué)中的常用描述方式
操作系統(tǒng)是重要的系統(tǒng)軟件,管理著計算機系統(tǒng)的軟件和硬件資源,對應(yīng)的課程內(nèi)容較抽象、知識點較多,概念原理較難理解;例如課程中的各類算法是非常豐富的,有進程調(diào)度算法、磁盤調(diào)度算法、頁面置換算法、連續(xù)內(nèi)存分配算法等[9-10]。
課本中對于各類算法的描述也是形式多樣的:
1) 文字語言描述——例如在動態(tài)分區(qū)分配算法中的描述:“為了加快尋找,最佳適應(yīng)算法要求將所有的空閑分區(qū)按其容量從小到大的順序,排成一個空閑分區(qū)鏈,這樣,第一次找到的、能滿足要求的空閑分區(qū),必然是最佳的?!?/p>
2) 偽碼描述——例如整型信號量的應(yīng)用:
{Wait(mutex); 臨界區(qū); Signal(mutex): 剩余區(qū); }
3) 表格表示——例如表1所示的磁盤調(diào)度算法中的SSTF(最短尋道時間優(yōu)先)調(diào)度算法,清晰表述了各個磁道號被處理的先后次序、每次磁道移動的數(shù)量以及最終平均尋道長度。
課堂授課的PPT也基本按照這些方式組織教學(xué)內(nèi)容,并在此基礎(chǔ)上進行相應(yīng)的改進,例如使用動畫演示描述算法過程、以例題方式加以說明其原理、采用代碼模擬實現(xiàn)算法執(zhí)行過程等。Python編程語言由于其簡潔性,能夠較好地與上述方式結(jié)合使用,可以省去安裝虛擬機和Linux系統(tǒng)及配置工作,進一步改善課堂教學(xué)效果。
2 Python 在OS 算法教學(xué)中的具體應(yīng)用
算法的代碼實現(xiàn)通常需要展示兩部分內(nèi)容:代碼本身的組織和執(zhí)行效果的分析;編程語言Python的應(yīng)用是對各類算法的講解起到一個良好的輔助作用,使得理論知識的脈絡(luò)更為清晰,幫助學(xué)生更好地理解。
1) 算法的文字描述變成了代碼的關(guān)鍵注釋——在PPT上,單純的大段文字表示有時會顯得有些單調(diào),特別是描述理論知識時,容易讓人覺得枯燥。利用Python程序,可以同時用代碼和文字描述算法,將枯燥的文字用簡短的符號語言表示。此時文字就成了代碼的注釋語句,將整段的文字分解成了以行為單位的表示;用人的腦袋去模擬計算機的執(zhí)行,邊閱讀邊理解邊運行,可以較為有效地集中學(xué)生們的注意力。例如教學(xué)課件PPT中,動態(tài)分區(qū)中最佳適應(yīng)算法表示下面代碼所示,執(zhí)行結(jié)果如圖2所示,兩者可放置在同一張PPT上。
2) 無法運行的偽碼表示變成了可實際運行的代碼表示。偽碼和代碼都可以較好地表示算法的基本思想,偽碼是非嚴(yán)格的編程語言與自然文字的組合,在有限的空間上展示更具優(yōu)勢;但它沒有運行結(jié)果可看。如果偽碼和代碼在描述同一問題上的行數(shù)和理解難度相差不大的情況下,可以考慮使用代碼,以增加運行結(jié)果的直觀性。通過對執(zhí)行結(jié)果的仔細(xì)觀察和深入分析,可以較為有效地提高學(xué)生對相關(guān)知識點的理解能力。例如下面的代碼和圖3描述了整型信號量的基本使用。
3) 表格的靜態(tài)表示變成以代碼為基礎(chǔ)的動態(tài)表示。表格能夠體現(xiàn)的過程性有時是比較有限的,例如表1中左列下一個磁道號的順序是通過相關(guān)運算及比較才能確定的,而這些步驟在表中是省略的。利用程序代碼表示可以將這些步驟很好地重現(xiàn),從而有利于該算法的講解,節(jié)省了相應(yīng)的閱讀和思考時間,是對表格結(jié)果的進一步說明,例如以下代碼和圖4。
4) 代碼執(zhí)行時各數(shù)據(jù)的中間結(jié)果的逐一表示成為圖形過程化表示的輔助。例如要理解圖1的FIFO 置換算法,關(guān)鍵要分析物理塊中各個頁進入內(nèi)存的順序。Python程序中非常容易設(shè)置該順序,下面的代碼中使用的數(shù)據(jù)類型都是簡單類型,通過字符串的左右順序來表示各頁的FIFO順序。粗看圖形不理解時,可以轉(zhuǎn)向以下代碼表示及圖5的執(zhí)行效果,兩者可以相互促進,圖形表示是相關(guān)應(yīng)用題的解題模板;代碼表示是相關(guān)實驗的范例。這樣一來,學(xué)生在課堂中能較快掌握解題方式以及代碼實現(xiàn);而且在時間有寬裕的情況下,可以適當(dāng)做擴展,例如計算缺頁中斷次數(shù)和頁面置換次數(shù),源代碼應(yīng)該在哪里增加累加語句。
除應(yīng)用在算法描述外,程序代碼還可以應(yīng)用在基本概念的描述中,例如進程的異步性,可以通過Python的Multiprocessing來進行簡單的子進程創(chuàng)建,相同的代碼可得到不同的執(zhí)行結(jié)果。通過結(jié)果對比,就能理解進程是按異步方式運行的,即按各自獨立的、不可預(yù)知的速度向前推進。
3 Python 在OS 算法教學(xué)中的探析
將Python實例應(yīng)用在OS算法講解中,一定程度上體現(xiàn)了授課方式的多樣性與相互融合性,較好地拓展了學(xué)生的思維能力,感受到了各類知識的綜合應(yīng)用。分析這些Python實例,它們具有一些共同特點。
1) 簡潔短?。赫n堂教學(xué)時間有限,PPT展示篇幅有限,因此要求代碼表達(dá)簡單、縮進規(guī)范、行數(shù)較短、數(shù)據(jù)量較小。
2) 起到一定的輔助作用:操作系統(tǒng)課程中各類算法原理是重點,Python中的語法、數(shù)據(jù)結(jié)構(gòu)、方法等并不是重點;而且單純用代碼方式理解算法往往難度比較大,效果反而不好。因此在此處,Python程序作為文字、圖形、表格、偽碼等的輔助工具,以達(dá)到更好的教學(xué)效果。
3) 以題論題:分析以上Python程序,發(fā)現(xiàn)變量都是在程序中靜態(tài)賦值,程序靈活性較為缺乏,這是為了減少代碼行數(shù),降低程序的復(fù)雜程度。
4) 為實驗的開展做準(zhǔn)備:每個算法的實現(xiàn)代碼都有一定的擴展性,而且可以為同類算法提供一定的解題思路,例如在Best Fit算法代碼的基礎(chǔ)上,將排好序的列表再反序一下,就可以直接適用于最壞適應(yīng)算法。
通過教學(xué)實踐發(fā)現(xiàn),Python語言的應(yīng)用使得操作系統(tǒng)的算法講解更加直觀、更加生動、更加易懂。同時也注意到,在授課過程中不是所有的算法都需要代碼表示,過多的代碼符號表示往往增加了PPT的頁數(shù),消耗了學(xué)生的閱讀耐心,降低了教學(xué)效果。下一步將研究線上/線下混合教學(xué)模式下代碼的應(yīng)用與組織方式。