左 航,楊秋輝,陳 潤,何 丹,胡 瓊
(四川大學計算機軟件學院,四川 成都 610065)
我國的新工科研究與實踐項目指南明確指出在專業改造升級路徑中應當注重探索專業知識、能力、素質的深度融合,聚焦國家戰略和未來產業需求。在十四五規劃中再次明確強化國家戰略科技力量,打好關鍵核心技術攻堅戰,特別是在事關國家安全和發展全局的基礎核心領域。操作系統作為國家所需的核心技術,是支撐眾多相關產業發展的基石,所以人才隊伍的建設十分重要。
從學科培養角度看,工程教育認證中以學生為中心的理念強調圍繞培養目標和畢業要求進行教學安排,操作系統的培養目標應當把學生和用人單位滿意度作為專業評價的重要參考依據[1-2]。從學生層面看,課程集程序設計,數據結構與算法,體系結構等多門類知識,實踐難度較高,同時其作為研究生入學考試的必考科目,在一定程度上影響學生的深造學習。
因此我們認為操作系統課程應當圍繞滿足軟件相關產業需求和學生學業深造需求,滿足國家對國產操作系統人才的需求進行教學設計,從而保證學生具備扎實的理論基礎,良好的系統的開發能力,以及持續學習能力和創新能力。
目前國內外大學操作系統課程的常用授課模式與計算機學科中的大多數課程類似,主要是以理論授課為先,穿插講解部分關鍵算法代碼,最后進行實驗的方式開展[3-5],即“理論+代碼片段→完整代碼實現”方式。其中實驗和作業大多以編程項目為主,瞄準專業實踐能力的培養,并不重視常規的書面練習題。該模式的優點在于教師的講授可以條理清晰的勾勒出理論框架,并突出關鍵算法的代碼實現,高效的傳達課程重點難點。同時實驗設計緊扣幾大核心模塊,如并發、任務調度、內存管理、文件系統等,力圖通過實驗具化理論,從而夯實理論基礎。
雖然該方案的設計思路清晰,培養目標明確,但由于課程實驗需要采用模擬教學系統,會使得實驗難度較其他課程更高,因此傳統的實驗模式將會無形中削弱實驗夯實理論的效果。目前實驗常用的模擬系統有XV6,PintOS,NachOS 等,其源代碼一般有6000至10000+行,模塊封裝設計有一定技巧,且模塊間存在關聯,故實驗中常常出現牽一發而動全身的情況。因此,學生需要具備兩個基本能力,才能更好的完成實驗:第一對框架的整體設計、主要功能模塊和理論算法有一個比較全面和深入的理解;第二具備較好的程序設計和調試能力。然而學生剛剛學完理論知識,難以快速形成非常清晰的知識脈絡和系統認知;且在類似規模系統下的實踐經驗較少。這些因素都將放大實驗難度,使得通過實驗夯實理論的預期目標難以達到滿意的效果。
與此同時原模式下偏重培養實踐能力,輕書面練習將不利于從實踐回歸理論形成知識體系的閉環;缺乏操作系統領域論文與實驗的結合,將導致對學生持續學習能力和創新能力培養的不足;缺乏產業相關軟件實驗也將使得學生缺乏對產業發展的關注與認知。
課程教改前的問卷調查也驗證了上述分析,85%的同學認為課程有助于提高專業基礎能力和初步的操作系統編程能力,57%的同學認為實驗有助于理解課本理論知識;但仍然有高達78%的同學認為實驗編碼任務比較困難,而僅有35%的同學認為課程目前的組織方式可以很好的應對深造學習的需求。
秉承工程認證倡導的持續改進理念,我們希望根據調查反映出的難點,在原有的“理論+代碼片段-完整代碼實現”方法中增加新的迭代環節來進一步優化課程方案,完善和提升培養效果,真正做到加強產學研深度合作,共育數字時代卓越人才。課程的改進將按照知識引入、拓展和綜合提升[6]的順序,迭代遞進,最終聚焦在三個問題上,即:實驗難度較高不容易入手;書面練習少不利于理論的推導和繼續深造;產學研結合不緊密和創新能力培養不足。
首先針對大部分學生反映的實驗難度較高的問題,在課堂講解代碼片段的基礎上,將實驗算法實現分為不同階段,初級階段由教師帶領閱讀框架代碼,分解算法的代碼實現步驟,帶領學生完成示例性代碼。本階段,學生不需要對理論有非常深入的理解,通過依葫蘆畫瓢的方式完成設計,這一步的主要目標通過教師展示代碼實現步驟來幫助學生梳理系統框架及算法流程,初步理解如何將理論轉換為模擬系統下的代碼。
其次在原有方法中新增“理論綜合練習”,對理論知識進行一次迭代,形成“理論+代碼片段-完整代碼實現-理論綜合練習”模式。在本階段,學生將回歸針對理論的書面練習,練習題以優質的考研重難點綜合題為主。在學生已經實現和跑通基礎算法代碼的基礎上,綜合練習將從具象回歸抽象,幫助學生進一步理解理論核心,以及和其他章節的關系。從而達到理論指導實踐,實踐歸理論這樣一個學習閉環。
最后增加“論文算法代碼實踐及拓展”迭代環節,最終形成“理論+代碼片段→完整代碼實現→理論綜合練習→論文算法代碼實踐及拓展”模式。在本環節,學生需要通過閱讀相應的學術論文,并在模擬系統上獨立以論文中的方式去具體實現教材經典算法,觀察算法性能是否和教材或論文一致。與此同時,配以相應的擴展實驗和閱讀,引導學生關注本章節知識的產業動態。這一步將擴展學習的深度和寬度,培養學生的創新能力,并強調產學研融合。
新方案在理論和實踐中反復迭代,將有利于螺旋式的提升并強化學生的理論和實踐能力,從而很好的解決原有模式下的三個問題。
由于內存管理是操作系統概念中核心模塊之一,主要包括分頁,地址轉換及虛擬內存等內容,與文件管理、進程調度等模塊密不可分,下面以該部分為例討論如何進行迭代遞進式學習。
在階段一,課程首先完成了分頁,地址轉換的理論學習。討論了TLB,多級頁表和反向頁表技術,并輔以簡單的練習題目,比如地址轉換,多級頁表計算等,幫助學生建立頁表相關基礎理論的直觀認識。
在階段二,做初級實驗,教師帶領學生完成模擬系統NachOS下相關框架模塊的導讀并實現基礎代碼。本次實驗共需四步,如圖1 所示,即開啟TLB 模塊,加入統計TLB 命中率的代碼,實現異常處理函數和線程切換時的TLB處理,由教師帶領學生一起完成。

圖1 TLB實驗流程
其中TLB 異常處理函數采用教學示范替換策略,如圖2 所示,以VPN 對TLB 數組長度取余的方式選中被替換項。通過這個簡單實驗,學生能夠理解系統間模塊的相互關系,快速跑通TLB 工作流程,明白TLB頁表替換模塊在系統中的位置和作用,何時被調用,如何影響內存地址轉換,從而初步達成將理論轉換為代碼的實驗目標。

圖2 TLB異常處理函數偽代碼
在階段三,引入考研綜合題型[7],如圖3 所示。學生在計算地址和訪問時間的過程中,需要將本章節中的地址轉換,缺頁處理,TLB 替換,駐留集等知識和概念融會貫通。重新回溯理論的綜合考察題目,有利于學生整合零碎的概念并形成完整的知識脈絡。

圖3 TLB綜合考察題目示例
在階段四,拓展章節內容的深度和寬度。首先,讓學生獨立實現兩種經典TLB 替換算法,即最近最少用LRU 算法和隨機替換算法。在算法的設計過程中,學生需要解決以下二個問題:如何來記錄最近使用次數,以及以什么樣的方式實現隨機?在分小組討論后,教師下發論文[8],學生在閱讀分析論文后,按照論文給出的方法實現兩種替換算法。并在同一測試場景下分別測試實驗中三種不同TLB 替換算法的命中率,并對數據進行分析和討論,驗證算法理論分析結果與實驗結果是否一致,最終形成實驗報告。接著擴展閱讀相關的論文,引導學生進一步了解TLB 在現代多核計算機中的具體實現方式。最后引入華為歐拉操作系統實驗,了解內核編程及歐拉操作系統底層內存分配相關知識。
至此,算法實現再次回歸理論,達到理論與實踐的知行合一,實驗算法分兩次實現大大的降低了實驗入手難度;綜合練習題的引入即便于學生整合不同章節的知識點;論文的閱讀與實踐有利于培養學生的創新能力;而歐拉操作系統實驗的引入在一定程度上可以激發學生學習國產操作系統并借此融入華為社區和了解產業生態。
新方案中,理論與實驗,理論與深造考試,實驗與科研論文和業界產品,四者在迭代中實現了產學研的深度融合。迭代通過知識啟蒙、知識拓展促進了立體的知識體系的構建與專業實踐能力的提升,而論文閱讀與歐拉操作系統實驗則進一步實現了學生研究與創新,理論與產品專業素養的綜合提升。課堂調查顯示認為對實驗的理解程度更深的同學上升到82%,而認為有助于應對深造考試的同學上升到了53%,認為華為歐拉操作系統相關實驗非常有意義的同學達到89%。由此可見,新的教學方案很好符合了工程教育認證和軟件工程人才培養的核心理念。