摘要:隨著智能手機、網絡通信以及多媒體娛樂設備的高速發展,各種版本的Linux系統在這些嵌入式系統中得到了廣泛的應用。文章提出一種基于Linux內核的嵌入式操作系統課程教學方案。針對在教學實施過程中遇到的一些關鍵問題,從培養目標、知識體系、實驗設計以及教學手段等多方面進行了分析和探討。實施效果表明,這些方法和手段的采用能夠有效提高學生對理論知識的掌握,強化對問題分析能力和動手編程能力的培養。
關鍵詞:Linux內核 嵌入式操作系統 教學方法
文章編號:1672-5913(2011)18-0029-04 中圖分類號:G642 文獻標識碼:B
基金項目:北航研究生院精品課程項目(201010);軟件開發環境國家重點實驗室開放課題(SKLSDE-2009KF-2-0X)。
隨著嵌入式系統中處理器性能和內存容量的快速提高,Linux在智能手機、網絡通信以及多媒體娛樂設備等領域得到了廣泛應用。國內外高校也對嵌入式相關課程進行了探索[1-2]。
針對軟件學院高層次工程化創新型人才的培養目標,結合國家Linux技術培訓與推廣中心的建設,我們在嵌入式操作系統的教學內容中融入Linux的新概念、新技術,以就業需求為導向,系統而全面地進行了課程的教改研究和建設。
當然,作為實用操作系統,將Linux系統應用到實際教學中,也有很多問題需要討論和探索,如龐大的代碼量,繁雜的基礎概念和應用工具等。針對這些困難,文獻[3-4]進行分析并給出了一些嘗試方案。
基于我們在相關課程中的知識和經驗積累,結合國內外針對Linux教學已經取得的成果,我們設計了一套具有自己特色的課程體系和實施方案。學生通過該課程的學習,不僅可采用實例方式對嵌入式操作系統和計算機組成原理等核心專業基礎課程進行深入系統地拔高,而且可強化C語言編程能力和UNIX平臺的系統開發能力,學會以“系統”的觀點來看待嵌入式系統的組成,理清軟件和硬件之間的相互依賴關系,為將來從事嵌入式軟件的研發奠定堅實的理論和實踐基礎。
1 課程群的發展歷程
北航軟件學院自2004年起為一年級研究生和高年級本科生開設“Linux內核分析與實踐”課程(該課程2009年得到教育部-英特爾精品課程項目支持),最初強調對操作系統本身原理(即內核機制、進程管理、內存管理、文件系統和設備管理等部分)的理解。在經過一輪授課實踐后,相當部分學生反映對課程內容學習有相當困難。認真分析后,我們結合軟件學院承擔的北航“國家Linux技術培訓與推廣中心”的建設任務,引入了Novell公司的SUSE Linux的使用和系統管理課程,并另外增加了Linux環境下應用程序設計內容,用于解決學生Linux基礎知識不足的問題。我們發現根本原因是由于這些學生不具備Linux的相關基本概念和使用經驗,在直接學習操作系統相關知識時,出現了知識斷檔。課改的實施旨在改善課程的教學效果。
嵌入式操作系統是該專業一年級研究生第二學期的專業限選課程,該課程和上述兩門Linux相關的課程相互結合,強調嵌入式系統中的操作系統的實時性、可定制等特點,緊密結合實際就業需求,在課程中設置內核移植、硬件驅動和中斷并發內核機制等跟硬件平臺相關且實踐性較強的內容,并通過μCOSII原理的對比,來加強學生對嵌入式操作系統中相關概念的掌握和理解。
綜合以上課程群的內容,驅動程序與內核的學習是相互促進的,即先學習一些簡單的驅動程序的知識,有利于對內核相關原理的學習。反過來,對內核知識的深入學習,也是進行高級驅動程序開發的前提。這樣做的好處是,不僅強調驅動程序學習的重要性,而且重視相關的內核原理對驅動程序設計的相關性,將課程定位于培養高端的嵌入式系統實用人才,
結合以上教改內容,可以總結出自頂向下和自底向上相結合的課程學習路線圖,在自頂向下部分,通過對Linux基本使用和應用編程的學習,學生可由Linux外部使用特性對內核相關機制形成一些感性認識。在自底向上部分,通過首先學習一種硬件平臺,包括一些基本接口及其驅動,學生可對硬件提供的對內核的支撐機制有個初步了解。
在具備上下兩方面的基礎后,再逐步從應用需求和資源管理兩種角度引入操作系統內核的功能需求,通過內核相關實現將上層的應用接口和下層的硬件原理銜接起來。這種知識的組織結構既符合內核設計的原則,也有利于學生將平臺開發和計算機組成知識融合起來。
2 課程內容與實施
鑒于嵌入式操作系統相關知識點繁雜、涉及面廣、相互之間關聯性強從而造成學習時難于入門的特點,基于對實際開源操作系統具體實現方式的分析和對比,我們確定了“理論和實踐相結合,強調課程‘邊界’知識點,關注并及時融入新技術”的課程內容設置原則。
2.1 課堂講授內容
課程首先介紹嵌入式操作系統的基本功能和發展歷程,總結嵌入式操作系統特點。然后,講述實時系統的相關概念,包括臨界區、可重入、同步和任務切換等內容。
課程內容基于i386處理器,但在涉及硬件細節時一般會適當對比ARM平臺,并考慮64位結構對內核的影響。課堂講授的關鍵知識點還包括Linux的模塊編程、進程管理、內核機制(如中斷和下半部、時鐘和定時器、多處理器和內核同步等基礎機制)、內存管理、文件系統、設備管理和驅動開發等部分。各知識點相應的部分,通常都會與μCOSII的實現方式進行適當對比。由于內容和細節繁多,且相互之間關聯性強,所以在課堂上只選擇講授各大部分中關鍵和基礎性的知識點,而對于具體細節等需要深入學習的部分則通過實驗進行涵蓋。在具體內容組織時采用“理論與實踐”的組織方式,即首先針對各相關內容設計實驗(分為源代碼分析和動手編碼兩類),然后再根據實驗內容確定課堂上的講授內容。
嵌入式操作系統處于硬件與應用程序之間,這決定了學習操作系統時存在一些“邊界”知識。比如,編譯鏈接時的地址重定位、硬件的支撐機制、內核的啟動過程等。盡管這些知識不屬于核心知識點,但它們是完整理解核心知識點的基礎,因此需要在課程講授時明確指出。
對于軟硬件領域出現的新技術,如虛擬化、多核等與操作系統內核密切相關的一些新技術,在課程中也會適當解釋。
2.2 實驗內容
為適應不同基礎和能力的學生,我們設計了分層次的實驗內容,形式上分為源代碼閱讀分析和上機實驗兩大類。
2.2.1 源代碼閱讀分析
源代碼閱讀分析實驗的主要目標是使學生深入理解Linux或μCOSII操作系統的核心工作機制,并熟悉內核代碼的組織方式和編程風格。這類實驗的主要內容涉及內核的啟動、內存映射、進程的創建、打開文件、信號量的實現等。
要求學生選擇2項以上的題目進行分析,并完成分析報告。報告的內容包括所選內容的技術背景和應用價值、所使用的算法和數據結構、具體實現時函數的調用關系,并對各函數的基本功能進行說明。報告最后還要求從操作系統原理的角度對所選擇技術的優缺點及可能存在的改進方法進行分析。
2.2.2 上機實驗
上機實驗的主要目的是培養學生C語言和系統平臺的編程能力,并對課堂和源代碼閱讀所學習的原理進行驗證式或創造式的動手技能訓練。這類實驗的主要內容包括內核的編譯與安裝、模塊編程與管理、為內核增加一種新的同步對象[5]、共享內存和內存映射文件、字符設備驅動程序以及復雜設備驅動程序等,內容的設置在涵蓋主要原理的同時,兼顧實際就業時的技能需求。
2.3 教學實施
作為以動手能力培養為目標的課程,強調以學生為主體,但同時也重視教師的引導作用。本課程綜合運用以下多種教學方法和手段,以達到高層次工程化創新型人才的培養目標。
1) 課堂專題討論。針對操作系統各部分知識相關性強,不易理清的特點,在課堂上給出一些引導性的問題,讓學生分組進行討論。老師根據各組的討論情況進行相應的引導,從而使學生在討論的過程中將各相關的知識點進行整理、組合,達到靈活應用的目的
2) 實驗指導教師引導小組討論。實驗指導老師定期組織其指導的學生小組進行討論,依據實驗報告和項目文檔對其中存在的難題進行解答并展開討論,對一些有爭議的話題進行引導,鼓勵學生進行發散型思考,以提高其創新能力。
3) 綜合考評方式。采用源代碼分析論文(25%)、實驗報告(25%)和期末筆試(50%)相結合的考核方式。源代碼分析論文強調學生從分析獲得的個人體會,實驗強調學生的動手能力和代碼規范性,而筆試則全部采用簡答題形式,注重對概念與具體實現方式的理解與對接。
4) 現代教學手段的運用。針對課程中的一些重要內容,制作相關的圖形、動畫或視頻,以增強教學效果。利用網絡環境展開教師與學生、學生與學生之間的及時溝通和交流,促進學生的學習主動性和自主性。
3 課程特色
1) 針對課程特點,合理組織教學內容。針對該課程相關知識點繁雜,涉及面廣,相互之間關聯性強從而造成學習時難于入門的特點,本課程采用兩種實際的軟件硬件平臺的具體實現技術相對比的方式進行教學,以場景的形式對進程創建和切換、虛存映射等操作系統核心知識進行組織,有利于學生對相關知識的理解。另外,為了使學生理解操作系統和應用程序運行的來龍去脈,增加了(動態)連接、系統的引導和啟動、可執行文件的格式和組成等“邊界”內容。
2) 明確課程目標,注意理清同時涉及軟硬件的概念之間的關系。作為軟硬件密切結合的嵌入式系統,嵌入式操作系統的深入學習離不開對硬件平臺的深入理解。但很多技術,比如中斷處理、地址綁定等概念,操作系統中的設計都需要依賴于處理器提供的支持才能實現。因此,在講述這類知識點時,強調哪些是硬件的技術,哪些是軟件的技術。這種做法非常有利于學生理解硬件中有哪些技術是為了操作系統的存在而設計的,操作系統中有哪些技術的實現是為了在多種硬件平臺上“通用”而設計的,從而達到培養創新型高級“系統”設計人才的目的。
3) 強調實用技能,采用源代碼分析和編程實驗相結合的實踐形式。為了達到高效運行的設計目的,操作系統的源代碼通常設計得非常“精美”,因此可作為編程能力培養的經典范例來使用。而上機編程實驗,則需學生綜合運用所學的相關原理和編程技術,設計并實現一種系統功能,因此強調實際動手技能的培養。這種代碼分析與上機實驗相結合,真正做到了理論與實踐相結合的培養模式。
4 結語
以上教改的實施顯著提高了學生的學習興趣和學習主動性,通過學生反饋的課程評估結果及其就業表現驗證了課程建設的有效性。
我們深知,課程的建設和改進沒有止境,教學內容和教學方法需要根據教學效果的反饋不斷地進行循環優化。希望能通過進一步借鑒國內外同行的寶貴經驗,把我們的教學水平提高到一個新的層面。
參考文獻:
[1] Ian McLough