譚舜泉,梁正平,朱澤軒
(深圳大學(xué) 計算機與軟件學(xué)院,廣東 深圳 518060)
操作系統(tǒng)是計算機軟件系統(tǒng)體系中的最重要部分,是連接底層硬件和上層應(yīng)用軟件的核心模塊。操作系統(tǒng)課程是計算機科學(xué)與技術(shù)、軟件工程以及相關(guān)聯(lián)的信息技術(shù)專業(yè)的核心課程。國內(nèi)操作系統(tǒng)課程起步較晚,但近年來隨著中國在全球軟件產(chǎn)業(yè)鏈的地位提升,作為計算機軟件系統(tǒng)體系基石的操作系統(tǒng)相關(guān)的理論和實踐,越來越受到國家的重視和關(guān)注,其教學(xué)內(nèi)容和教學(xué)方式的改革是目前計算機高等教育研究的一個熱點領(lǐng)域[1-3]。
實現(xiàn)高等教育內(nèi)涵式發(fā)展,是黨和國家關(guān)于高等教育發(fā)展的基本要求。目的是為了解決當(dāng)前高等教育中教師教學(xué)和學(xué)生培養(yǎng)的一些深層次問題。就核心課程教學(xué)而言,當(dāng)前高等教育中存在的典型深層次問題是教學(xué)過程的淺表化[4-5]:①教師課堂教學(xué)趨于公式化、流程化,呈現(xiàn)填鴨式的單向輸出;②學(xué)生課堂學(xué)習(xí)趨于簡單化、功利化,呈現(xiàn)被動式的單向接手;③師生關(guān)系疏遠(yuǎn)冷漠,教學(xué)內(nèi)容不深、范圍狹窄,考查過淺。
傳統(tǒng)的操作系統(tǒng)課程教學(xué)以馮·諾依曼體系結(jié)構(gòu)為依托,分章節(jié)介紹操作系統(tǒng)如何管理進程、實現(xiàn)處理機調(diào)度、管理實存、管理虛擬存儲、實現(xiàn)輸入/輸出管理、實現(xiàn)外部文件系統(tǒng)、實現(xiàn)系統(tǒng)對外接口、保證系統(tǒng)安全等基礎(chǔ)理論及經(jīng)典算法。但由于操作系統(tǒng)位于整個軟件開發(fā)層級中,最接近硬件的底層,因此開發(fā)、理解難度較大,容易導(dǎo)致教學(xué)過程的淺表化。操作系統(tǒng)課程的內(nèi)涵包括:①培養(yǎng)學(xué)生掌握使用底層開發(fā)語言,如C 語言及x86 匯編語言,直接對微機硬件進行編程驅(qū)動的能力;培養(yǎng)學(xué)生在源代碼級實現(xiàn)操作系統(tǒng)基本理論及算法,如信號量機制、離散內(nèi)存存儲等。②培養(yǎng)學(xué)生掌握系統(tǒng)核心編程中自頂向下、逐層細(xì)分等結(jié)構(gòu)化編程能力;培養(yǎng)學(xué)生不僅能使用系統(tǒng)提供的編程庫,更能在有限的編程接口支持下,實現(xiàn)及擴展系統(tǒng)編程庫。③培養(yǎng)學(xué)生掌握裸機級別的底層調(diào)試排錯能力;培養(yǎng)學(xué)生在現(xiàn)代虛擬機技術(shù)的支持下,進行CPU 指令及寄存器級別的斷點、跟蹤、調(diào)試以及排錯能力。
操作系統(tǒng)課程的外延包括:①培養(yǎng)學(xué)生在底層開發(fā)時,在非面向?qū)ο缶幊汰h(huán)境下的項目合作及分工能力;培養(yǎng)學(xué)生在開發(fā)大型復(fù)雜項目時,面向代碼修改沖突高發(fā)場景下的多分支分布式源代碼管理能力。②培養(yǎng)學(xué)生在面對像操作系統(tǒng)這樣的高度復(fù)雜、多種編程語言混合編程的大工程項目時,進行系統(tǒng)內(nèi)部架構(gòu)設(shè)計、模塊劃分、對上下層接口設(shè)計的綜合能力。③培養(yǎng)學(xué)生在遇到復(fù)雜的技術(shù)細(xì)節(jié)問題時,查閱文檔,尤其是英文技術(shù)文檔的能力。比如在進行x86 匯編語言編程時,能熟練查閱x86 匯編語言參考手冊,確定某一指令在不同型號CPU 中的不同參數(shù)。
在制訂操作系統(tǒng)課程的建設(shè)思路時,強調(diào)改變簡單地以傳授操作系統(tǒng)基礎(chǔ)理論及經(jīng)典算法為目的的教學(xué)范式,力圖建立以操作系統(tǒng)課程教授為契機,促進學(xué)生項目開發(fā)能力,特別是底層編程能力及大型跨語言跨平臺項目開發(fā)的駕馭能力,促進學(xué)生的全面發(fā)展。在課堂及實驗教學(xué)中將教師講授、學(xué)生實驗開發(fā)、討論分析、調(diào)查研究、成果匯報答疑等多種教學(xué)方式有機結(jié)合起來。希望能從傳統(tǒng)操作系統(tǒng)教學(xué)中的教師主導(dǎo)轉(zhuǎn)換成學(xué)生主導(dǎo),教師和學(xué)生均能深度投入其中,親身參與操作系統(tǒng)開發(fā)整個流程,真正體現(xiàn)操作系統(tǒng)課程的內(nèi)涵,實現(xiàn)以學(xué)生為依歸,全程緊張的深層次自主學(xué)習(xí)。
另一方面,要豐富操作系統(tǒng)課程教育教學(xué)的內(nèi)涵,需要多渠道開發(fā)利用現(xiàn)有的操作系統(tǒng)相關(guān)教育教學(xué)資源。國外在操作系統(tǒng)課程建設(shè)上發(fā)展較早較快,并且在課程資源的開發(fā)共享上,較為開放。在網(wǎng)上開源了大量的操作系統(tǒng)開發(fā)源碼及教育教學(xué)文檔。比如美國麻省理工大學(xué)(MIT)的xv6 教學(xué)操作系統(tǒng),專為操作系統(tǒng)教學(xué)而設(shè)計,并采用開源共享發(fā)放模式,目前已經(jīng)發(fā)展到了第11 版。國外和國內(nèi)的多家著名高校,如普渡大學(xué)、清華大學(xué)等,都引入了xv6 作為課程的示例操作系統(tǒng)。因此在本課程建設(shè)中,引入xv6操作系統(tǒng)開發(fā)源碼及相關(guān)的教育教學(xué)系統(tǒng),能豐富課程的教育教學(xué)資源,實現(xiàn)操作系統(tǒng)教學(xué)與國際名校之間的資源共享互通,擴大如xv6 教學(xué)操作系統(tǒng)這樣的優(yōu)秀教育教學(xué)資源的影響面,使學(xué)生能夠共享全球公認(rèn)的優(yōu)質(zhì)操作系統(tǒng)教學(xué)資源,豐富課程教學(xué)內(nèi)涵,提高人才培養(yǎng)的質(zhì)量。
要實現(xiàn)操作系統(tǒng)課程的內(nèi)涵式發(fā)展,在教學(xué)內(nèi)容的設(shè)計上,就要改變傳統(tǒng)操作系統(tǒng)課程中模塊化教條式的教學(xué)內(nèi)容組織方式。在保證學(xué)生對操作系統(tǒng)基礎(chǔ)理論和基本算法的掌握的前提下,強調(diào)對操作系統(tǒng)內(nèi)核自頂向下的整體把握。通過對目標(biāo)操作系統(tǒng)的源代碼分析以及二次開發(fā),使得學(xué)生能獲得設(shè)計及編寫操作系統(tǒng)的第一手經(jīng)驗,提升學(xué)生的動手實踐能力。
為了實現(xiàn)以上要求,將傳統(tǒng)的以馮·諾依曼體系結(jié)構(gòu)為依托的模塊化教學(xué)方式作為一條主線,將以xv6 教學(xué)操作系統(tǒng)的自頂向下逐步細(xì)化的分析理解,并在此基礎(chǔ)上的二次開發(fā)作為另一條主線。兩條主線均包含理論教授和實驗講解分析,共同推進,相互支撐。基于這兩條主線的教學(xué)內(nèi)容設(shè)計見表1。
為實現(xiàn)操作系統(tǒng)課程的內(nèi)涵式發(fā)展,在教學(xué)方式上,也需要進行相應(yīng)的改革。從傳統(tǒng)的順序式以教師講授為主的單向傳輸式的教學(xué)方式,轉(zhuǎn)換為基于操作系統(tǒng)實驗開發(fā)沙盤系統(tǒng)的實驗啟發(fā)型教學(xué)方式。
深圳大學(xué)的操作系統(tǒng)課程的周學(xué)時為4 學(xué)時,其中2 學(xué)時為教師講授,2 學(xué)時為學(xué)生實驗,從教學(xué)時間分配上保證了實驗啟發(fā)型教學(xué)方式的開展。采用實驗先行,理論傳授隨后的新型啟發(fā)式教學(xué)方式,核心是基于Linux+Docker 開發(fā)的一套操作系統(tǒng)實驗開發(fā)沙盤,里面包含每一個階段性實驗對應(yīng)的xv6 操作系統(tǒng)輔助源碼、編譯調(diào)試環(huán)境、支撐虛擬機以及功能驗證腳本。學(xué)生可直接在沙盤中進行操作系統(tǒng)實驗所要求的功能改進編碼及編譯、調(diào)試、測試。操作系統(tǒng)開發(fā)涉及大量底層代碼修改,如果學(xué)生在開發(fā)過程中不慎導(dǎo)致系統(tǒng)崩潰,只需重置虛擬機,復(fù)原實驗開發(fā)沙盤環(huán)境即可。通過這種方式,實驗遵循自頂向下、逐步細(xì)化的原則,在涉及相關(guān)知識點的理論傳授之前,先讓學(xué)生從對應(yīng)的操作系統(tǒng)實驗著手進行開發(fā)。通過一系列的預(yù)備性實驗,學(xué)生閱讀代碼及自學(xué)對理論有初步的理解;然后再通過課堂講授加深對相關(guān)操作系統(tǒng)理論及算法的理解;最后通過一系列的驗證性實驗及設(shè)計性實驗將理論與實踐結(jié)合起來,鞏固學(xué)生對相關(guān)理論的理解。基于操作系統(tǒng)實驗開發(fā)沙盤系統(tǒng)的系列實驗見表2。
表2 基于操作系統(tǒng)實驗開發(fā)沙盤系統(tǒng)的系列實驗
為實現(xiàn)操作系統(tǒng)課程的內(nèi)涵式發(fā)展,在教學(xué)實踐上,以“全程緊張”為指導(dǎo)思想。課程考核不再局限于期末閉卷考試的形式,而是平均分布于整個學(xué)期的多個考查點,讓學(xué)生不再把主要的精力放在臨考前的突擊復(fù)習(xí),而是把精力放在達到每個考查點的考查要求上。以主線2 為依托,和操作系統(tǒng)實驗體系相結(jié)合,對于主線2 中每個章節(jié)均設(shè)置了理解考查點,通過與之相關(guān)聯(lián)的實驗設(shè)置了實踐考查點。最后還通過一個貫穿整個課程的課程設(shè)計考查學(xué)生對于操作系統(tǒng)的綜合理解能力及對于開發(fā)復(fù)雜系統(tǒng)的駕馭能力。學(xué)生每周在操作系統(tǒng)課堂授課的課后都要花8~10 小時在相關(guān)的編程及代碼理解分析任務(wù)上,通過這一方法,實現(xiàn)了“全程緊張”。
以內(nèi)存管理中的“頁表”知識點為例,讓學(xué)生在預(yù)備性實驗中閱讀xv6 源代碼中關(guān)于二級頁表的實現(xiàn)。xv6 對于進程頁表有特殊的處理方式:每個進程的頁表同時包括用戶內(nèi)存和內(nèi)核內(nèi)存的映射,這樣當(dāng)用戶通過中斷或者系統(tǒng)調(diào)用轉(zhuǎn)入內(nèi)核時就不需要進行頁表的轉(zhuǎn)換了,而操作系統(tǒng)內(nèi)核沒有自己的頁表,一直都在借用用戶的頁表。要求學(xué)生通過源碼分析,理解xv6 是如何實現(xiàn)用戶內(nèi)存和內(nèi)核內(nèi)存映射在同一個進程頁表上的,同時要求學(xué)生通過代碼理解,算出每個進程頁表所支持的最大虛擬地址空間,以及為了載入操作系統(tǒng)內(nèi)核,總共分配了多少個物理塊用于保存對應(yīng)的頁表。
在“頁表”知識點的理論傳授中,教師會詳細(xì)介紹在理論上,離散的段頁式存儲機制是如何實現(xiàn)的,如何把一個虛擬地址映射為對應(yīng)的物理地址。學(xué)生經(jīng)過了預(yù)備性實驗的預(yù)習(xí),能比較好地接受課堂上的理論傳授,在課堂結(jié)束后,布置對應(yīng)的驗證性實驗,要求學(xué)生深入xv6 源代碼內(nèi)部,通過在xv6 內(nèi)存物理塊分配源碼中加入所分配的物理塊統(tǒng)計信息,以及在合適的位置加入內(nèi)核信息輸出語句,把創(chuàng)建調(diào)度器進程所需要的內(nèi)存空間對應(yīng)的物理塊數(shù)量輸出到終端。
學(xué)生在“頁表”這一知識點考查得分,將由預(yù)備性實驗中的問題理解得分(占40%)和驗證性實驗中的編程得分(占60%)組成。通過這一方法,有效提升了學(xué)生的參與度和積極性,學(xué)生的反映良好。在教學(xué)測評中,學(xué)生普遍認(rèn)為操作系統(tǒng)課程的收益很大,很好地鍛煉了自己的編程能力,提升了自己的理論水平。
在深圳大學(xué)操作系統(tǒng)課程中,為了解決當(dāng)前高等教育中存在的淺表化問題,對課程的教學(xué)內(nèi)容及教學(xué)方法進行了針對性的優(yōu)化設(shè)計,引入面向內(nèi)涵式發(fā)展的建設(shè)思路。在此基礎(chǔ)上,對操作系統(tǒng)課程的內(nèi)涵與外延給出了自己的理解,并依托美國麻省理工大學(xué)(MIT)的xv6 教學(xué)操作系統(tǒng),以其為實驗開發(fā)沙盤系統(tǒng),通過實驗啟發(fā)型的教學(xué)方式,制定了基于xv6 源代碼分析及二次開發(fā)的教學(xué)內(nèi)容,結(jié)合以“全程緊張”為指導(dǎo)思想的教學(xué)實踐,取得了較好的效果,獲得了選課學(xué)生的普遍好評,在深圳大學(xué)教學(xué)測評中,“操作系統(tǒng)”最高得分排名7.69%(排名前30%以上為優(yōu)秀)。