
文章編號:1672-5913(2011)21-0074-04 中圖分類號:G642 文獻標識碼:A
基金項目:廣東省大學生創(chuàng)新實驗項目(1184510037);廣東工業(yè)大學高教研究基金項目(2009C01)。
作者簡介:張鋼,男,講師,研究方向為機器學習、數(shù)據(jù)挖掘、知識發(fā)現(xiàn)、高級計算機網(wǎng)絡、操作系統(tǒng)。
摘 要:當前,高等院校的操作系統(tǒng)教學過程主要是基于傳統(tǒng)的操作系統(tǒng)基本原理而進行的,與現(xiàn)代操作系統(tǒng)的發(fā)展不相適應,在教學過程中很難讓學生理解當前操作系統(tǒng)發(fā)展的挑戰(zhàn)和今后的發(fā)展方向。本文對現(xiàn)代操作系統(tǒng)的特性進行分析,闡述其在教學過程中的必要性和重要性,并介紹使用微軟公司的Singularity項目進行操作系統(tǒng)教學的經(jīng)驗。實踐表明,Singularity系統(tǒng)架構清晰簡潔,很好地體現(xiàn)了現(xiàn)代操作系統(tǒng)的理念,適用于高等院校的操作系統(tǒng)教學。
關鍵詞:現(xiàn)代操作系統(tǒng);Singularity;教學實踐
隨著軟件開發(fā)技術和計算機網(wǎng)絡技術的發(fā)展,操作系統(tǒng)作為軟件和應用的承載平臺,承擔著越來越重要的任務,也面臨著越來越大的挑戰(zhàn)。操作系統(tǒng)有將近40年的歷史,雖然目前主流使用的操作系統(tǒng)功能強大,能夠支持各種軟件的運行,但遠遠達不到完美的程度,相反,隨著計算機軟件的日益復雜和網(wǎng)絡化應用程度的提高,操作系統(tǒng)表現(xiàn)出越來越多的問題,主要表現(xiàn)在以下幾個方面[1-2]。
1) 可靠性?,F(xiàn)代操作系統(tǒng)十分脆弱,系統(tǒng)經(jīng)過一段時間的使用之后速度變得越來越慢,使用一段時間之后就需要重裝。對一些非專業(yè)用戶而言,為了裝一個軟件而導致整個系統(tǒng)不能使用的情況很常見。
2) 安全性。病毒、木馬等程序在操作系統(tǒng)的控制范圍內(nèi)得到運行,但它們卻破壞了整個系統(tǒng)。
3) 系統(tǒng)配置問題。以Windows為例,DLL錯誤、注冊表表項錯誤、Windows啟動配置錯誤等問題很常見,操作系統(tǒng)本身不能把自身的配置保持在一個穩(wěn)定且一致的狀態(tài)。
4) 程序隔離問題。操作系統(tǒng)的內(nèi)存管理中每個進程都有獨立的運行空間,它們之間的通信只能通過特定的機制(管道、消息、共享數(shù)據(jù)區(qū)等)進行,但經(jīng)常會出現(xiàn)一個程序的運行失敗導致整個操作系統(tǒng)崩潰,或是某些特殊的程序(如木馬程序)能跨越進程的數(shù)據(jù)空間非法訪問其他進程的數(shù)據(jù)。
但與此同時,高等院校的操作系統(tǒng)教學仍然停留在以操作系統(tǒng)的五大管理功能(處理器管理、存儲器管理、文件管理、設備管理、作業(yè)管理)為核心內(nèi)容的教學上,主要進行操作系統(tǒng)理論和基本原理的教學。我們發(fā)現(xiàn),現(xiàn)代操作系統(tǒng)的這些問題幾乎不能從現(xiàn)有的教學內(nèi)容中找到答案,在學習的過程中,學生一方面會認為這種理論學習與日常操作系統(tǒng)的使用脫節(jié);另一方面學生可能會更加疑惑,這些常見問題是否是操作系統(tǒng)的基本原理本身有問題所導致的。
必須指出的是,傳統(tǒng)的五大核心管理功能仍然是操作系統(tǒng)的核心,而所出現(xiàn)的問題實際上是源自過于復雜的軟件環(huán)境和程序開發(fā)語言,操作系統(tǒng)為了滿足應用的多樣性,犧牲了很大部分的安全控制和系統(tǒng)整體性控制。
我們認為,在高等院校的操作系統(tǒng)教學中,在進行操作系統(tǒng)基本理論教學的同時,應該增加講授復雜軟件和網(wǎng)絡環(huán)境下操作系統(tǒng)所面臨困難的內(nèi)容,以及現(xiàn)有的解決方案,這樣做有以下兩個方面的好處。
1) 加深學生對操作系統(tǒng)基本原理的理解,同時讓理論與操作系統(tǒng)的日常使用問題銜接。必須指出,操作系統(tǒng)的基本理論是沒有問題的,增加的講授內(nèi)容能夠加深學生對基本理論的理解并能引起有深度的思考。
2) 高等院校同時也培養(yǎng)學生的科研能力,通過增加現(xiàn)代操作系統(tǒng)內(nèi)容的講授,讓學生明白在當前復雜的軟件和網(wǎng)絡環(huán)境中操作系統(tǒng)所面臨的困難以及可能的解決辦法,可以培養(yǎng)學生研究操作系統(tǒng)的興趣,并打下一定的理論基礎。
因此,我們在操作系統(tǒng)的教學中引入了一個現(xiàn)代操作系統(tǒng)研究項目,通過分析該項目,向?qū)W生講授現(xiàn)代操作系統(tǒng)對于所面臨的困難有怎樣的解決思路、當前已經(jīng)做了哪些工作,以及將來的發(fā)展方向。同時,在該操作系統(tǒng)研究項目上利用其源代碼,把整個操作系統(tǒng)的實驗遷移到其框架中進行。
1 Singularity項目
Singularity項目[3]是微軟公司的一個操作系統(tǒng)研究項目,旨在使用高級程序設計語言創(chuàng)建一個有良好健壯性與可靠性的操作系統(tǒng)。Singularity是一個研究性質(zhì)的項目,只有非常簡潔的核心代碼適合進行教學和研究。Singularity最主要的優(yōu)點在于程序并不直接編譯成機器代碼運行,而是先映射到操作系統(tǒng)的一個抽象指令集上,再在操作系統(tǒng)的控制下運行。圖1展示了Singularity系統(tǒng)的結(jié)構。
圖1中的MSIL轉(zhuǎn)換引擎是一個翻譯器,把上層的用戶程序、文件系統(tǒng)、驅(qū)動程序等應用相關的代碼段轉(zhuǎn)換為操作系統(tǒng)的抽象指令集,這種指令抽象層從底層限制了非法操作的執(zhí)行。系統(tǒng)的運行核心以MSIL抽象指令集為基礎編寫,這從根本上解決了由于操作系統(tǒng)自身程序的運行而導致系統(tǒng)錯誤的這一矛盾[3]。
在進程通信方面,Singularity進行了限制,不直接允許基于共享內(nèi)存的進程間信息交換,只能進行基于消息的信息交換,消息的傳送通過通道(channel)進行,防止了跨進程的非法數(shù)據(jù)訪問,這是很多系統(tǒng)安全問題的源頭。
在進程管理方面,Singularity不允許在一個正在執(zhí)行的進程中加載或生成額外的可運行代碼,惡意程序無法以傳統(tǒng)的方式執(zhí)行。更為重要的是,系統(tǒng)嘗試使用全局的抽象指令集映射,為系統(tǒng)提供一個整體且一致的配置方案,而不會產(chǎn)生配置的前后矛盾[4]。
內(nèi)存管理方面,當前普遍采用的是段頁式管理,即程序在內(nèi)存中以邏輯上有意義的段進行組織,段內(nèi)分頁使內(nèi)存的空間可以充分利用不會產(chǎn)生碎片[5]。Singularity采用了類似于Java語言的內(nèi)存管理機制,即在堆上為進程和線程分配空間,并提供一個核心級的垃圾回收器進程,用于回收不再使用的空間?;贘ava內(nèi)存管理的可靠性與易用性,我們認為這種機制是有希望在操作系統(tǒng)的內(nèi)存管理方面取得成功的。
Singularity系統(tǒng)結(jié)構清晰,而且基本不含有為了適應不同的軟件配置而編寫的代碼,在教學中學生能夠著眼于其核心部分,并能自行編寫相應的管理程序,通過擴展接口能為操作系統(tǒng)增加功能特性。
Singularity是使用微軟的Sing#語言編寫的,它是C#語言的一種擴展,支持對程序行為的定義[6]。它具有對面向?qū)ο蟪绦蛟O計的完整支持,并能使用XML進行配置,與主流的程序開發(fā)技術相一致,有良好的文檔支持,能在課堂上進行代碼級的講解,容易設計出課程相關的實驗。
2 教學實踐
我們在本校自動化學院網(wǎng)絡工程系的操作系統(tǒng)課程內(nèi)容中進行現(xiàn)代操作系統(tǒng)相關內(nèi)容的教學實踐,我們在2008和2009級網(wǎng)絡信息專業(yè)的操作系統(tǒng)教學中進行嘗試,主要包括教學內(nèi)容和實驗兩方面的內(nèi)容。
2.1 教學內(nèi)容上的改進
課程原先設置了操作系統(tǒng)結(jié)構、進程管理、處理機調(diào)度、存儲管理、設備管理、文件系統(tǒng)、操作系統(tǒng)產(chǎn)品介紹和安全管理這七個部分的內(nèi)容,我們在各部分增加了Singularity相關的理論內(nèi)容講授。
在操作系統(tǒng)結(jié)構部分,我們在分層操作系統(tǒng)的結(jié)構設計基礎上,增加了應用程序抽象層的介紹,這是Singularity中的一個重要特性,通過MSIL把應用程序的代碼映射為一個統(tǒng)一的抽象指令集[7],操作系統(tǒng)本身的執(zhí)行機制保證了該指令集的執(zhí)行是絕對安全的,并通過例子講解當前操作系統(tǒng)的不安全性和不可靠性的原因。增加了MSIL的映射機制的介紹,通過Singularity的實現(xiàn),從代碼級向?qū)W生展示如何構造一個可擴展的抽象指令集,并與Java語言的虛擬機機制進行比較。
在進程管理部分,加強了進程數(shù)據(jù)空間獨立性的介紹,從數(shù)據(jù)通信的角度分析進程間通信的手段,分析哪些通信方式存在安全的隱患。介紹Singularity的進程管理機制,詳細說明其禁止共享內(nèi)存的方式進行消息通信的原因。
在處理機調(diào)度方面,引入了多處理機調(diào)度的介紹。隨著CPU的多核化,多處理機調(diào)度將成為操作系統(tǒng)的一個重要內(nèi)容。在介紹傳統(tǒng)的處理機調(diào)度算法的同時,用流程圖結(jié)合程序講授這些算法的多處理機版本實現(xiàn),并以Sing#語言[6]在Singularity中的程序?qū)崿F(xiàn)作為課堂例子。
存儲管理部分,在段式、頁式和段頁式管理的基礎上,增加堆中分配空間和內(nèi)存垃圾回收器的介紹,通過代碼例子講解在Singularity中如何實現(xiàn)內(nèi)存空間的動態(tài)回收,并與Java的垃圾回收器進行對比。
在文件系統(tǒng)部分,分析Singularity的文件系統(tǒng)的代碼實現(xiàn),其實質(zhì)是一個優(yōu)化的B+樹實現(xiàn),并讓學生懂得如何根據(jù)快速更新和查找的原理,創(chuàng)建適合自己使用的文件系統(tǒng)。
在操作系統(tǒng)產(chǎn)品介紹部分,著重介紹Windows系統(tǒng)以及它的配置管理,分析注冊表和DLL中的配置錯誤出現(xiàn)的根本原因,進而介紹在Singularity中的系統(tǒng)配置的實現(xiàn)方案,主要讓學生理解何為操作系統(tǒng)配置的一致性,要達到這種一致性需要怎樣做。通過分析Singularity的代碼抽象層和全局配置模塊幫助學生解決這些問題。
在安全管理部分,著眼于操作系統(tǒng)自身的安全,講授操作系統(tǒng)執(zhí)行自身正常的操作應該能夠保持穩(wěn)定性這種理念,讓學生理解安全性問題的根源在于軟件環(huán)境的復雜性和當前操作系統(tǒng)實現(xiàn)對于執(zhí)行效率的妥協(xié),進一步分析MSIL抽象映射層對系統(tǒng)安全性的重要作用。
增加程序運行的內(nèi)在機理部分類容的講授,分析Windows系統(tǒng)的程序運行方式,解釋動態(tài)鏈接庫的工作原理,并分析由于程序的動態(tài)加載組件或程序段所帶來的風險,講解Singularity系統(tǒng)在程序運行控制方面的機制。
2.2 實驗內(nèi)容的改進
本系的操作系統(tǒng)課程有相應的實驗內(nèi)容,由于理論教學中增加了Singularity的內(nèi)容,同時考慮到Singularity有良好的編程界面和技術文檔支持,我們嘗試把整個操作系統(tǒng)的實驗遷移動Singularity系統(tǒng)上進行。我們設置如下的實驗。
1) Singularity基礎實驗。
讓學生熟悉Singularity項目的基本結(jié)構,安裝系統(tǒng)開發(fā)包和查閱技術文檔的方法。
2) 進程間基于消息的通信實驗。
實現(xiàn)channel方式的進程間通信實驗,讓學生掌握Singularity的進程間數(shù)據(jù)交換機制。
3) 進程數(shù)據(jù)空間的獨立性驗證實驗。
設計特定的具有交叉數(shù)據(jù)空間訪問行為的實驗程序,以驗證操作系統(tǒng)對于進程數(shù)據(jù)空間的獨立性有完整的保護能力。
4) 處理機調(diào)度算法實驗。
在Singularity SDK框架中實現(xiàn)經(jīng)典的處理機調(diào)度算法,并編寫基于泊松分布的概率程序進行驗證。
5) 簡單文件系統(tǒng)實驗。
參照DOS系統(tǒng)的FAT文件系統(tǒng),利用SDK所提供的功能實現(xiàn)一個簡單的基于哈希表的文件系統(tǒng)。
6) MSIL抽象層實驗。
通過SDK的接口方法展示把一個第三方編寫的程序映射到操作系統(tǒng)抽象指令集的完整過程。
7) 操作系統(tǒng)命名空間實驗.
在Singularity系統(tǒng)的開發(fā)框架中,我們在實驗學時不變的情況下,大大擴充了操作系統(tǒng)的實驗內(nèi)容,原因在于Singularity提供了一個功能完善的SDK[8],學生在該框架中可以專注于只與操作系統(tǒng)核心相關的代碼的編寫,且這些代碼都是以C#和XML為基礎的,適合于實驗教學。在以往的實驗中,均使用C++語言進行實驗,學生需要花費較多的精力編寫一些與核心不相關的框架性代碼,限制了實驗的規(guī)模和深度。
3 結(jié)語
操作系統(tǒng)課程是高等院校計算機相關專業(yè)的重要教學內(nèi)容,但傳統(tǒng)的基于五大管理的操作系統(tǒng)理論教學已不能很好地適應當前操作系統(tǒng)的發(fā)展趨勢,更難以回答復雜軟件與網(wǎng)絡環(huán)境下所出現(xiàn)的一系列操作系統(tǒng)應用上的問題。教學實踐表明,引入Singularity到操作系統(tǒng)教學和實驗中,提高了學生的學習興趣,有一定的教學效果。
參考文獻:
[1] Martin Abadi. Access control in a world of software diversity[C]//Proceedings of the 10th conference on Hot Topics in Operating Syst