王 雷
摘 要:“操作系統(tǒng)”課程的理論性和實踐性都很強,本文從北京航空航天大學操作系統(tǒng)課程設計出發(fā),針對操作系統(tǒng)實驗中存在的問題,通過分析、借鑒國內外著名大學的經驗,以MIT操作系統(tǒng)實驗為基礎設計了一套以MIPS為硬件平臺的操作系統(tǒng)實驗,并在北航選取了一些學生進行應用。
關鍵詞:操作系統(tǒng);實驗設計;教學實踐
中圖分類號:G642 文獻標識碼:B
“操作系統(tǒng)”課程內容豐富,既要講授關于操作系統(tǒng)的基礎理論,又要讓學生了解實際操作系統(tǒng)的設計與實現。操作系統(tǒng)實驗設計正是該課程實踐環(huán)節(jié)的集中表現,不僅使學生鞏固理論學習的概念和原理,同時培養(yǎng)學生 的工程實踐能力。國內很多大學都非常重視操作系統(tǒng)實驗設計,北京大學根據MIT課程,建立了自己的操作系統(tǒng)實驗體系;清華大學專門設置了操作系統(tǒng)專題訓練課程,以提高學生的工程實踐能力;南開大學提倡使用系統(tǒng)仿真的實驗環(huán)境加強學生理論聯(lián)系實際的能力;浙江大學提出了“邊學邊干”的操作系統(tǒng)教學理念。
北京航空航天大學計算機學院在2006年將“操作系統(tǒng)”課程分成了兩門課程:一門講授“操作系統(tǒng)”原理,一門“操作系統(tǒng)課程設計”專門進行操作系統(tǒng)實驗。本文將以MIT的操作系統(tǒng)課程設計為基礎,介紹在操作系統(tǒng)課程設計中,讓學生自主開發(fā)一個小型教學操作系統(tǒng)。由于開發(fā)一個實際的操作系統(tǒng)難度和工作量很多,為了保證教學效果,我們首先為學生提供一個基礎系統(tǒng),該系統(tǒng)實現操作系統(tǒng)中最基本的部分。在此基礎上,學生可以再進一步擴充,實現一個完整的操作系統(tǒng)。將來可以與硬件課程進一步集成,將教學操作系統(tǒng)移植到學生自己開發(fā)的硬件平臺中。我們試圖通過操作系統(tǒng)作為紐帶,將計算機硬件與軟件結合起來,培養(yǎng)學生對計算機系統(tǒng)的整體認識。
1 目前存在的問題
在前幾年的教學實踐中,我們嘗試過Nachos、Minix、Linux和Windows四種不同類型的實驗,目前保留了Linux和Windows兩組實驗。每類實驗包含4組實驗,每個(組)同學選做一類實驗,并完成該類中全部4組實驗。Linux實驗包括“Yalnix Shell”、“虛擬存儲”、“作業(yè)控制系統(tǒng)”、“文件系統(tǒng)操作”或“模擬文件系統(tǒng)”(后面兩個實驗選做一個)。Windows2000/XP實驗包括“生產者消費者問題”、“Windows虛擬存儲器管理”、“NDIS協(xié)議驅動程序的分析與改進”、“虛擬磁盤的文件系統(tǒng)驅動程序設計”。
這兩組實驗與主流操作系統(tǒng)結合緊密,極大地提高了學生的專業(yè)技能。雖然這些實驗已經在國內一流院校中廣泛使用,但是仔細分析我們可以發(fā)現,這些實驗大部分還是停留在系統(tǒng)編程的水平。因此為提高操作系統(tǒng)教學水平,我們必須向國外研究型大學看齊,改進操作系統(tǒng)的課程設計。
2 國外主要研究性大學操作系統(tǒng)實驗
我們選擇了四所大學的操作系統(tǒng)實驗情況進行重點介紹。
Brown University
? 課程名稱cs167/cs169 operating system Fall 2006
? cs167課程介紹操作系統(tǒng)的基本原理
? cs169課程:學生每人用 C編寫一個簡單的、單內核操作系統(tǒng)。所寫的操作系統(tǒng)在技術上等價現代的操作系統(tǒng)
? 實習項目:Kernel 1,Kernel 2,虛擬文件系統(tǒng),文件系統(tǒng),虛擬存儲
? 基礎系統(tǒng):Weenix
Princeton University
? 課程名稱:Operating Systems Fall 2006
? 實習項目:項目1:引導機制;項目2:非搶占式調度;項目3:搶占式調度;項目4:進程間通信與進程調度;項目5:虛存;項目6:文件系統(tǒng)
University of California at Berkeley
? 課程名稱:Operating Systems and System Programming Spring 2006
? 實習項目:工程為仿真MIPS平臺構造操作系統(tǒng)有4個工程。工程1:線程管理;工程2:多道程序設計;工程3:高速緩存和虛擬存儲;工程4:網絡和分布式系統(tǒng)
Harvard University
? 課程名稱:CS161: Operating Systems Spring 2006
? 實習項目:工程0:熟悉OS/161以及其運行環(huán)境System/161;工程1: 同步;工程2:系統(tǒng)調用和進程;工程3:虛擬內存;工程4:文件系統(tǒng)
MIT
? 課程名稱:6.828: Operating System Engineering - Fall 2003 (for graduate student)
? 實習項目:工程1:啟動裝載過程;工程2:內存管理;工程3:進程和上下文切換;工程4:Fork和進程間通信;工程5:簡單的文件系統(tǒng);工程6:編寫一個Shell
從上面的分析可以看出,這幾所大學操作系統(tǒng)實驗內容豐富、難度大。這些大學都有同一個理念:要想學好操作系統(tǒng),最好的辦法就是自己編寫一個操作系統(tǒng)。因此,我們希望借鑒這些大學的實驗內容,提高北航操作系統(tǒng)實驗難度。

3 操作系統(tǒng)實驗改進思路
隨著學校對課程建設的重視,很多課程,例如“程序設計”、“編譯原理”等課程的實驗有了很大改善,學生的動手能力也得到了進一步提高。在此基礎上,我們已經具備了嘗試難度更高的操作系統(tǒng)課程設計的條件。因此,在操作系統(tǒng)課程設計上,可以讓學生自主開發(fā)一個實際的小操作系統(tǒng)。
由于開發(fā)一個實際的操作系統(tǒng)難度和工作量很多,為了保證教學效果,我們準備采取循序漸進的、分層設計的方式,首先為學生提供一個基礎系統(tǒng),該系統(tǒng)實現操作系統(tǒng)中最重要、最基本的部分。在此基礎上,學生可以再進一步擴充,實現一個完整的操作系統(tǒng)。這種新的實驗模式在保證教學效果的基礎上,有利于充分發(fā)揮學生創(chuàng)新潛能。

4 實驗設計
4.1 實驗內容
我們調研了MIT、CMU等幾所著名高校的課程設計,決定以MIT的課程設計為基礎,在操作系統(tǒng)課程設計上,讓學生自主開發(fā)一個實際的小操作系統(tǒng)。實驗包含6個部分,各個部分的相互關系如圖1所示,具體實驗內容如下。
(1) 啟動和系統(tǒng)初始化:通過PC啟動的實驗,掌握硬件的啟動過程,理解鏈接地址、加載地址和重定位的概念,學習如何編寫位置無關代碼;通過實現setjmp和longjmp兩個函數,掌握GCC的調用規(guī)范和硬件堆棧結構。
(2) 內存管理實驗:理解虛擬內存和物理內存的管理,實現操作系統(tǒng)對虛擬內存空間的管理。
(3) 進程管理:通過設置進程控制塊和編寫進程創(chuàng)建、進程中止和進程調度程序,實現進程管理;編寫通用中斷分派程序和時鐘中斷例程,實現中斷管理。
(4) 系統(tǒng)調用:掌握系統(tǒng)調用的實現方法,理解系統(tǒng)調用的處理流程,實現本實驗所需的系統(tǒng)調用。
(5) 文件系統(tǒng):通過實現一個簡單的基于磁盤的微內核方式的文件系統(tǒng),掌握文件系統(tǒng)的實現方法和層次結構。

(6) 命令解釋程序:實現具有管道,重定向功能的shell,能夠執(zhí)行一些簡單的命令。最后通過調試將六部分鏈接起來,使之成為一個能夠運轉的操作系統(tǒng)。
4.2 實驗環(huán)境
選擇一個完整硬件仿真環(huán)境。我們準備根據當前流行的主流硬件,選擇開放源代碼項目bochs和GXemul作為仿真環(huán)境。另外建立一個完善的實驗環(huán)境,將操作系統(tǒng)實驗用到的各種軟件安裝在一個服務器上,為每個學生建立一個獨立的帳戶,學生可以在任意機器上遠程登錄到我們的服務器,完成實驗任務。
另外,操作系統(tǒng)的實驗需要與硬件課程實驗和編譯實驗進一步集成,學生可以將教學操作系統(tǒng)移植到學生自己開發(fā)的硬件平臺,并且運行學生自己開發(fā)的編譯器所編譯的程序。圖2描述了操作系統(tǒng)實驗各個部分與硬件的關系(該硬件環(huán)境詳見參考文獻)。圖3描述了操作系統(tǒng)實驗與編譯實驗和硬件實驗的關系。
4.3 目前已完成工作
目前已完成的工作:
(1) 建立了一個以GXemul為基礎的仿真環(huán)境,可以運行操作系統(tǒng),并實現操作系統(tǒng)的調試。
(2) 建立了一個以GCC為基礎的MIPS交叉編譯環(huán)境,可以用于編譯操作系統(tǒng)以及其他應用程序。
(3) 六個實驗已經可以在仿真器上運行(見圖4)。
5 經驗總結與下一步工作
2006年,我選了一個學生以這個操作系統(tǒng)實驗作為畢業(yè)設計題目,硬件平臺為x86,他當時完成了4個實驗。2007年在計算機學院組織下我們選了6名學生將該實驗在一學期內移植到了MIPS仿真平臺。通過這些實踐,我們發(fā)現對于本科生這些實驗難度還是太大,很難完成6個實驗。因此,我們下一步需要采取循序漸進、分層設計的方式,進一步簡化實驗,多給學生提供一些示例代碼,編寫詳細的實驗文檔和實驗指導手冊。

參考文獻:
[1] 陳向群. 操作系統(tǒng)實習教學經驗[R]. 全國第八屆操作系統(tǒng)課程教學研討會,2005.
[2] 史廣順,韓維桓,袁曉潔. 南開大學“操作系統(tǒng)”課程建設的思考[J]. 計算機教育,2006(7).
[3] 宋廣華,李善平,鄭扣根. 邊學邊干:操作系統(tǒng)課程教學改革的探索與實踐[J]. 計算機教育,2006(7).