馮紅偉,趙一鳴
(復旦大學 a.軟件學院;b.軟件學院,上海 200433)
多課程協作的操作系統教學改革實踐
馮紅偉a,趙一鳴b
(復旦大學 a.軟件學院;b.軟件學院,上海 200433)
針對軟件工程專業不同方向學生對操作系統知識的需求,分析了操作系統教學和實踐環節中存在的問題,闡述了多課程協作的操作系統教學改革和課程實踐設計,教學實踐表明取得了良好的教學效果。
操作系統;課程體系;實驗設計
在傳統的教學體系下,操作系統教學存在以下幾個問題:一是缺乏高質量的實踐環節支持,學生不能透徹理解操作系統的具體的實現機制;二是缺乏針對不同培養方向教學方案,系統方向需要的是和操作系統有關的所有底層硬件及內核實現的深入理解,而非系統方向需要知道如何利用操作系統機制來支持上層應用的開發;三是操作系統課程知識點過于集中在一門課當中,沒有強調不同課程中有關知識點之間的聯系和呼應。復旦大學軟件學院一直嘗試進行改革和探索,引進國外先進的教學理念和課程設計,在課程設置上不僅涵蓋了計算機專業重要的知識點,更重要的是這些課程在內容上互相呼應、前后關聯,幫助學生從低年級開始先樹立整體的計算機系統概念,然后在后續的課程中不斷深化某一方面知識的學習[1]。論文以操作系統的教學設計為例,來說明操作系統的知識點如何分布在多門課程中,并針對不同方向的學生有針對性地完成課程內容和課程實驗設計,讓系統方向和非系統方向的學生都獲得相應操作系統知識,滿足今后工作或深造的知識需求。
軟件學院引進了CMU和MIT知名高校的計算機課程,并且對這些課程進行了合理的改造。在操作系統課程方面,考慮到操作系統的教學和實驗環節的難度,將操作系統的知識點合理分布到了不同課程中,組成有機的知識系列,前期的知識儲備為學生完成操作系統實驗打下了很好的基礎。在課程體系設計中,和操作系統有關的課程包括從CMU引進的《計算機系統基礎》,從MIT引進的《計算機系統工程》,從MIT引進的《操作系統》,以及參考CMU的《系統程序設計》。《計算機系統基礎》的主要內容包括信息的表示和處理、程序的機器級表示、處理器體系結構、優化程序性能、存儲器層次結構、異常控制流、網絡編程、并發編程等。課程從程序運行的角度介紹了程序的內存布局、虛擬內存的管理,以及系統級IO編程方法等和操作系統有關的重要概念,通過該課程學生已經完全能夠從概念上理解基于頁面機制的虛擬內存的轉換方法,以及程序的內存布局等知識。《計算機系統工程》深入而廣泛地介紹了構造計算機系統的主要原理和概念,包括系統和復雜性,命名機制以及系統模塊之間的引用和訪問;從虛擬化的角度來講解線程、內存以及進程間的通信;在性能設計方面討論了CPU的調度、內存的替換策略、磁盤調度;討論了系統容錯的原理和方法,對實現原子性進行了討論,說明了如何實現線程之間的一致性數據保護。通過該課程,學生建立了計算機系統的整體概念,同時也掌握了操作系統必要的調度、內存、文件系統等概念。系統方向的《操作系統》是完成操作系統教學的核心課程,該課程從理論上涵蓋了所有操作系統的概念和實現機制。由于在前期的課程中虛擬內存、IO和進程的概念已經涉及過,在溫習這些知識的基礎上,主要講解如何實現操作系統的細節,比如在x86架構下的段頁內存管理機制,Linux的內存管理方式,虛擬內存管理,為學生的實踐項目(project)中的進程控制開發提供支持。正是因為有了之前《計算機系統基礎》和《計算機系統工程》的知識準備,學生才能在操作系統課程中完成高質量的實踐項目[2]。非系統方向的操作系統課程是《系統程序設計》,將系統方向和非系統方向的學習內容有所區分,一方面保證系統方向的內容和MIT的實踐項目保持一致,另一方面滿足非系統方向學生的對操作系統的知識需求。《系統程序設計》課程是針對非系統方向學生開設的課程,該課程通過對UNIX系統的底層編程細節討論來認識操作系統概念在UNIX系統中的具體實現。主要內容包括文件系統和IO的性能,緩沖區對IO性能的提升,進程的控制方法,過fork以及內存頁面的優化策略,信號機制,多線程編程方法,高級IO的一些方法和終端設備IO進行了討論。通過這些知識及補充材料,非系統專業學生可以掌握在開發上層應用時,如何利用操作系統提供的機制,通過實驗設計了解UNIX操作系統的設計機理,提高應用程序性能。
在《計算機系統基礎》和《計算機系統工程》中關于虛擬內存、IO和CPU調度雖然沒有編程的實驗,但是通過手工計算、畫結構圖等幫助學生建立了知識的框架,為后續的課程打下了理論基礎。引進國外大學的操作系統課程后,特別是實踐部分和MIT同步之后,學生有機會通過完成操作系統中的主要模塊來深入理解如何通過硬件的支持完成操作系統的功能。《操作系統》的實踐項目將要完成一個基本的操作系統內核,整個項目被分成幾個相對獨立的部分,首先完成進程的創建,主要完成內核和用戶進程空間的內存分配,進而在此基礎上實現fork和exec系統調用,實現進程切換以及CPU調度,完成基本的文件系統。通過完成這個實踐項目能夠幫助學生徹底理解實現操作系統核心功能的軟硬件機制[2]。《系統程序設計》課程的實驗設計包括:(1)IO性能對比,了解不同的IO的方式在讀寫性能,了解操作系統中IO和文件系統上的實現策略對性能的影響。(2)信號機制:通過信號機制來控制進程。(3)并行程序設計,通過多線程和openMP實現并行程序設計;(4)實現一個能夠支持流媒體服務器。(5)實現簡單的Linux驅動。通過這些實驗項目,非系統方向的學生能夠掌握系統內核的實現方法,掌握操作系統對上層應用性能的影響和系統優化方法。
除了課程體系的改進之外,軟件學院在教學方法上也進行了改革,將不同課程中有關操作系統的知識點的有機的串聯,在不同課程中進行合理的分工,既要避免重復又相互支持和呼應。在具體的知識講解方面,各個課程都能根據課程分工抓住重點和難點進行透徹分析,而對于一般性
的問題只是將問題提出,讓學生通過課后學習,通過作業等方式來檢查學生的掌握情況。為了擴展學生的知識面,加深對書本上概念的理解,針對不同的知識點安排相應的課后閱讀材料,并提交相應的作業或設計。在《計算機系統工程中》設計了一系列的課后閱讀的論文,包括:《Worse Is Better》討論了兩種設計哲學的優劣,引導如何找到適合的設計方法;《Fast File System》對現有文件系統的各種缺點進行了改進和優化;《Map Reduce Google》幫助學生了解目前最重要的關于大數據處理的方案;《RAID》講解關于RAID磁盤陣列的原理與簡單的性能比較;《End To End control in network》講解網絡中端對端層的設計原理,并針對應用進行優化。在《操作系統》課程中則要求學生閱讀x86 CPU的白皮書中細節,閱讀《深入理解Linux內核》的對應章節了解Linux在x86架構上的實現方式。通過大量補充相關閱讀材料,學生加深了對課程內容的理解。為了保證實踐項目的順利完成,各個課程都增加了教師助教和學生助教,幫助學生理解實踐項目的目的、要求、知識需求等,并設計對應的開發和測試環境,保證了課程體系改革的成功。
通過引進國外的課程,并合理組織操作系統知識點在不同課程中的分布,改革教學方法加強學生的自我學習,針對不同方向的學生設計不同的實踐項目,加強對學生的輔導,幾年的實踐證明,這樣的教學設計有助于學生加深對操作系統概念的深入理解,學生能夠完成世界一流大學的實踐項目,使軟件學院的操作系統教學接近國際水平,為培養國際化的合格人才做出了貢獻。
[1]臧斌宇,朱東來.借鑒國際先進經驗,加強計算機系統方向基礎教學[J].計算機教育,2009,(16):147-150.
[2]馮紅偉,王鵬.操作系統教學與實驗設計研究[J].實驗室研究與探索,2007,(2):251-253.
G642.0
A
1674-9324(2014)13-0037-02
馮紅偉,男,講師,研究方向為數據挖掘與分布式系統;趙一鳴,男,副教授,研究方向為信息安全與密碼學。