秦俊平 壽永熙 馬志強 趙俊生
摘要:本文介紹了作者多年來對操作系統實例與實踐教學的研究與探索的經驗,提出了在教學過程中采用工具軟件詮釋實例的方法。
關鍵詞:操作系統;工具軟件;鏈接;模塊;虛實地址空間;地址轉換
中圖分類號:G642文獻標識碼:B文章編號:1672-5913(2009)04-0030-02
操作系統是用來管理計算機系統中所有軟、硬件資源的系統軟件,所有的計算機用戶都在使用操作系統,只不過不同層次的用戶在不同層次使用操作系統提供的功能。計算機相關專業一直以來將操作系統作為最重要的專業核心課程,一方面,使學生通過操作系統的學習,深入理解計算機的軟硬件協同工作原理;另一方面,有助于加強和培養同學們的解決實際問題的綜合能力,加深專業素養,而這也正是計算機專業與非計算機專業對學生計算機知識培養的區別所在。
1課題背景
面對這樣的定位,教師如何教、學生如何學成為各高校相關教師不斷研究的方向。教師所講授的內容從基本理論知識和典型算法到理論與實際操作系統相結合,與此相對應,各高校也編寫出版了一些新的將操作系統理論與實際操作系統結合在一起的教材。新的教學內容對教師提出了更高的要求,也促使我們探索更有效的教學方式。以“傳授知識、培養能力”為目標,我們將操作系統教學內容分為三部分處理:
(1)對于傳統操作系統理論和典型算法,既要讓同學們學習系統的操作系統理論,又要為同學們參加研究入學考試奠定基礎。在覆蓋大綱的前提下,講授時務求透徹。保證同學們能夠理解原理。
(2)對于操作系統實例,講授操作系統功能在具體操作系統中是如何實現的,從實際教學情況來看,不太易于解釋明白。究其原因,主要有:
①操作系統作為大型系統軟件,規模龐大,比如較流行的作為實例的Unix、Linux或Windows系統,規模都很大;
②操作系統功能都是軟件和硬件配合工作實現的,其中任一部分功能的實現,都涉及太多的細節問題,比如存儲器管理中進程邏輯地址到物理地址的映射,就涉及到了CPU中專用寄存器、內存中的數據結構和硬件的地址轉換結構等知識。
這一部分所涉及知識全部講述,課時必然不夠用:囫圇吞棗地講,同學們課堂上聽不懂,下去自學必定遇到障礙(復雜的結構,瑣碎的細節),最終極有可能使此一部分內容以記住幾個概念、了解幾個數據結構收場,從而失去學習實例的本意。
(3)對于操作系統的實踐環節,要使學生主動運用所學理論解決問題,以提高能力為目標。
操作系統實例和操作系統的實踐部分是加強和培養學生的解決實際問題的綜合能力的關鍵環節,對加深學生的專業素養很有意義,其如何實施是教學研究的重點。
2操作系統實例教學的研究
我院在教學過程中,注重實踐能力和創新能力的培養,強調學以致用,激發同學們的學習興趣。
具體在操作系統實例教學中,我們的目標是:
(1)力求從整體上展現操作系統功能的實現方法,避免陷入細節。
(2)操作系統作為大型軟件,結構復雜,功能完善,操作系統實例教學不求面面俱到,而是以其中的幾個方面作為突破口,詮釋具體操作系統的實現方法,從而舉一反三,理解全部。
講授實例的目的是介紹在具體操作系統中,理論是如何實現的。新教材有的是以分析開源操作系統的源代碼及操作系統的結構來進行解釋的,這是非常好的資料,但往往篇幅較大,作為課堂教學內容有散亂、不易于組織的缺點。鑒于此,如果能將理論知識的實現方法通過直觀的方法進行剖析,從另外一個角度展現實現的細節,對學生的學習、理解是大有幫助的。我們采用一系列工具軟件由外向內一步步地展現操作系統的功能實現。
3操作系統實例教學的實踐
下面主要以Windows系統下存儲器管理為例,介紹采用工具軟件進行教學的過程。講授操作系統其他管理功能的思想與此相同,只是所使用工具軟件有所不同。
在介紹存儲器管理部分時,要介紹程序的鏈接方式。我們用一段源程序作為實例,分別采用不同的IDE環境,得到功能完全相同的兩種不同格式(靜態鏈接和動態鏈接)的可執行文件。首先比較兩種格式文件的大小,一般而言,靜態鏈接可執行文件遠大于動態鏈接可執行文件,相比而言多了些什么內容呢?靜態鏈接可執行文件中包含了該程序運行需要的所有內容,其中有程序中所調用的庫函數實現代碼,那么動態鏈接可執行文件是如何組織的呢?分析動態鏈接所得到可執行文件,在Windows下,使用dependences工具,分析PE文件頭部得出了所要動態鏈接的庫以及庫中的具體函數;在Linux下,使用idd工具分析ELF文件頭部得出了所要動態鏈接的庫。
接下來,分析動態鏈接庫是如何加載的。對于Windows的虛擬存儲器,在進程邏輯地址空間,分段概念如何體現呢?首先運行鏈接得到的可執行文件,創建進程之后使用工具軟件分析進程快照(snapshot),可得該進程當前加載的模塊的情況,包括每個模塊的名稱、大小、基地址和共享計數等,這就可以看到動態鏈接庫確實被加載到進程邏輯地址空間,而且這些模塊是被整體加載的,它們占用不連續的邏輯地址,由此可見,動態鏈接庫就是操作系統理論中分段管理的實際對應物,從而段是一個面向用戶的邏輯單位,段內連續、段間離散,分段引入的是二維地址空間等理論得到了生動的詮釋。
再進一步,在程序中增加動態加載模塊的語句,并安排到某分支中,重新編譯、鏈接得到可執行文件。運行并分析其所加載的模塊,執行相應的包含動態加載模塊的語句分支后,再分析其所加載的模塊,對比分析兩次結果的不同,闡述動態加載的相應內容。在程序中加載兩個占用同一推薦地址的動態鏈接庫模塊,運行其并分析其所加載的模塊,可見當發生地址沖突時系統是如何處理的,借以解釋地址重定位。在兩個程序中使用同一個動態鏈接庫,分別編譯、鏈接得到動態鏈接格式的可執行文件,先后分別運行兩個程序,并觀察隨著進程創建、結束該模塊引用計數的變化情況,闡述以段作為管理單位實現共享的實現方法。
進程邏輯地址空間涉及內容講授完畢之后,虛擬存儲器的另一個重要問題——虛實地址空間的地址轉換問題,是這樣來解釋的:首先選中程序中某個變量,運行程序并得到具體某時刻變量值、變量邏輯地址。其次通過工具軟件得到該進程對應的物理地址空間。再次用工具軟件計算得該變量對應的物理地址,利用工具從該物理地址讀出當前值,從變量的數據類型、所占用字節數和當前值等方面分析物理內存內容與之是否吻合。再次,剖析剛才地址轉換所涉及的頁目錄索引、頁表索引和責表內容等具體內容,由此闡述具體操作系統實現從邏輯地址到物理地址映射的映射過程及各種數據結構的組織及所起的作用。
總體上講,將軟件工具引入到教學中,是一種“擺事實,講道理”的教學方法,對于每個知識點,首先結合實例通過軟件工具盡可能地將操作系統所做的工作展現出來,在這一過程中結合操作系統理論和適當的數據結構、硬件知識,剖析這部分功能是如何實現的,從而達到使同學們在較短時間內理解的目的。
4操作系統實踐教學的研究
操作系統實踐教學環節,讓同學們親自動手,檢驗和應用前面學習的知識,完成相應題目來提高能力。從面向應用的角度,制定恰當的題目與合理的組織形式是實施的關鍵。為此,我們進行了如下改革:
(1)實踐教學內容
在課堂授課的基礎上,遵循“傳授知識、培養能力”這一思路,我們將以往模擬實現操作系統功能的實踐環節,改為面向應用指定題目,大體分為兩個方向:
①課時較少的情況下利用系統功能調用編程,在應用層開發出有特色的功能;
②課時較多的情況下首先編寫工作于核心層下的驅動程序,獲得訪問核心數據結構的權限后再將相關數據傳給工作于應用層的普通程序,兩者結合完成有特色的功能。前述實現分析虛實地址轉換過程的工具軟件就是這樣設計的。
(2)實踐教學組織形式
如何激發同學們的學習熱情,是我們一直在探索的內容。具體到實踐教學組織上,積極鼓勵優秀的同學提出自己的創意及想法。這些創意及想法經教師審閱后可作為實踐題目。在此基礎上,較大題目組織為項目組,目標是在有限的時間內完成較完整的項目,之后項目組成員共同總結,完成實踐報告;較小題目個人完成并提交實踐報告。
(3)實踐教學平臺
我們在虛擬機上配置操作系統,再配置開發環境來搭建實踐教學平臺,這樣從高級語言編程到系統功能調用,以及直接的硬件編程全部可以實施,而且可以根據同學們的熟悉情況選擇相應的系統及編程環境,自由度較大。
經過幾年的摸索與積累,我們已收集和自己開發了一部分用于操作系統教學的工具軟件,其中有的是教師開發的,也有的是師生共同努力開發的,之中的許多工作得到了學校、學院的立項支持;同時教師申請的科研項目積極吸收感興趣的同學參加,搭建起一個開放的平臺推動教學水平和科研能力的發展。我們也積極借鑒國內外同行的有益經驗,為提升操作系統的教學水平不斷努力。