景維鵬 雷海軍 楊昆 楊烜 董本志



摘 要:操作系統是計算機科學與技術專業重要的主干課程,隨著微處理器技術的不斷發展,如何在操作系統層次發揮多核處理器的性能成為近年來的研究熱點。文章從操作系統原理實驗課程出發,以龍芯多路處理器平臺為載體,提出分層次的操作系統實驗改革方案,闡述如何通過不同層次、不同考核目標的實踐教學方案,強化學生的動手能力和系統層軟件開發能力,對提高學生對操作系統運行機理理解有重要意義。
關鍵詞:操作系統原理; 多核; 龍芯多路處理器; 實驗
0 引 言
操作系統是計算機科學與技術專業必修的一門基礎課程,其培養目標是使學生掌握操作系統的基本原理和系統級開發能力,并通過對操作系統運行機理的認知全面提高學生的計算機素養,使學生建立起對操作系統的直觀認識,為今后從事相關工作打下堅實基礎[1]。
操作系統實驗教學不但需要學生理解操作系統的概念、原理與方法,還需要提高學生的系統編程能力,只有這樣才能讓學生真正理解操作系統的精髓[2]。傳統的操作系統課程實驗主要基于不同內核的開源系統完成[3],例如哥倫比亞大學使用Linux系統進行實驗,MIT使用ATHENA開源系統作為實驗平臺[4],清華大學使用XV6(UNIXV6的X86版)的擴展設計型方案開展操作系統實驗[5]。這些實驗內容在一定程度上滿足了學生對操作系統運行機理的理解,提高了學生對操作系統運行機理的認識。
然而,隨著多核技術的不斷發展,基于多處理器的分布式計算環境已經成為云計算和大數據平臺的主流[6]。傳統的單核或單CPU上的操作系統實驗不能滿足學生在多處理器環境下系統內核運行機制的認知需要。為了更直觀地加深學生對這兩部分知識的理解,需建立計算機組成原理、匯編語言、C語言、操作系統等連貫的知識體系。文獻[7]對操作系統內核的伙伴算法提出改進,采用了反轉的思想,但其方法過于繁瑣,不適于課堂實驗,實驗結果無法通過直觀的方式展現。文獻[8]使用Heartbeat作為基礎的心跳檢測模型,但該方法不能直觀反映進程遷移狀況,實驗效果不明顯。龍芯多路處理器的實驗系統是由龍芯3A處理器構成的4單元對稱多處理平臺,通過HT總線互聯為CC-NUMA架構,可以模擬多路處理器平臺。利用該實驗平臺,可以設計符合現有主流多處理環境的操作系統實驗教學方案。
1 基于龍芯處理器的實驗教學改革
1.1 由淺入深,多層次掌握Linux操作系統
在實驗方案中我們選擇Linux 2.6.30版的穩定內核作為實驗環境的操作系統內核。由于大部分學生對Linux系統接觸不多,更缺乏在Linux系統上獨立開發程序的能力,因此要采用從淺入深、層層深入的實驗教學模式。
(1)第一層次,熟練掌握Linux操作系統命令和Shell編程,設計Linux基礎實驗,在掌握Linux基本工作方式和使用方式的前提下,使學生熟練完成Tomcat、NFS、LVS、DNS、FTP等常用服務搭建,配置Hadoop、Spark、Storm集群,熟練撰寫Shell腳本,提高學生在Linux應用層的開發能力。
(2)第二層次,熟練掌握Linux進程、線程的創建方式以及通信方式,熟練使用如fork、exec、wait等API函數,分析其運行機理。另外,利用多路處理器平臺構建分布式并行計算環境,設計KMP算法的OpenMP實現和計算π值的OpenMP這兩個設計性實驗。兩個實驗既考查了學生的數學邏輯能力,又提高了學生的并行編程能力,同時加深了學生對進程、線程、內存管理的理解,使學生掌握并行計算、高性能計算等系統層開發技術,更好地理解和掌握進程通信的基本方法。
(3)第三個層次,針對多路處理器環境,優化Linux系統的內核模塊,對Linux進程遷移和共享內存進行優化。實驗引導學生自主閱讀Linux源代碼,并根據相關需求進行源代碼的優化,提高學生閱讀代碼的能力,激發學生的自主創新能力。
通過上述的實驗過程,可以大大激發學生的學習興趣,使學生對開源軟件、系統層開發有深入的理解,另外采用分組合作模式,也增強了學生團隊協作的能力。第三個實驗通過復雜的內核模塊設計,引導學生走入內核開發的神秘殿堂,全面提高學生在多路處理器環境下進行系統層軟件開發的能力。
1.2 化難為易,從主觀和客觀兩方面進行引導
(1)在學習的主動性方面,要潛移默化地消除學生的畏難情緒,在第一層次上下功夫。該部分以講解為主,通過大量的網絡服務配置、Shell腳本編寫,結合操作系統的原理性知識,布置大量的實踐練習,并有意識地從應用及工程實踐角度,用案例的方式對實驗內容加以多角度描述,從而使學生明確實驗目的并激發其學習興趣。
(2)在客觀上化難為易,分層次引導。從第一層次的操作系統應用層提高開發能力,第二層加強系統層進程、內存管理及并行程序設計,第三層內核模塊實驗通過設計性的進程遷移和內存優化內容培養學生的創新能力、獨立分析問題、解決問題能力。表1為3個層次培養過程及目標。
(3)針對不同層次,設計完全不同的講授方式,具體見表2,有針對性地分析并提出解決方案,以幫助學生全面提高自身能力。
另外,在整個實驗的過程中,培養學生獨立分析問題、解決問題的能力,尤其是在第二、第三層次,引導學生通過分析,自行尋找解決方案并驗證。
3 改進的實驗教學實例
本文使用的實驗環境為龍芯多路處理器系統,包括4個處理器,每個處理單元包括一顆龍芯3A 四核處理器、 DDR2內存以及RTL8110千兆以太網卡芯片,實驗平臺見圖1。
1)基于Linux并行程序設計。
實驗目的是使學生掌握Linux系統上的進程管理、進程通信以及并行編程的基本理論和方法,使用OpenMP技術實現KMP字符串匹配算法,從而達到理解多核編程和KMP算法并行實現的目的。KMP算法是一種改進的字符串匹配算法。實驗中假設文本是一個長度為n的數組T [1…n],模式串是一個長度為m≤n的數組P[1…m],字符串匹配是指找出文本串T中與模式串P所有精確匹配的子串的起始位置,KMP算法的時間復雜度為O(strlen(T)+strlen(P))。
實驗要求學生能夠在Linux下使用GCC編譯器或make工具完成KMP算法,查找模式串P[1…m]在文本串T [1…n]中的所有匹配位置,并在龍芯實驗平臺上編譯、運行、調試此OpenMP并行程序,觀察不同處理器核數對性能的影響。對長度為100 000 000的文本串、長度為100的模式串進行匹配,期望運行結果至少達到表3的數值。
可以直觀看到,程序開啟1~4線程時,運行時間隨線程數的增加同比例減小。增大運算規模,降低SMP模式下各內核訪問主存I/O資源的時間比例,采用4~16線程運行本程序,運行時間同樣隨線程數的增加同比例減小。
另外,可使用OpenMP編程技術實現π值的計算,從而達到理解多核編程和并行分解法計算π值的目的。
本實驗計算π值利用割圓法計算,如公式(1),公式每計算一項可以得到1.4位的十進制精度。在循環疊加的運算過程中,開設THREAD_NUMS數量的線程,以線程數為間隔,每個線程計算對應分量,最后累加所有分量,得到π值,并使π值滿足設定的精確度。實驗的運行結果見表4。
通過龍芯多路處理器平臺,可以看到隨著處理器路數的增多,其處理能力逐漸變強,大致隨著線程數量以2的冪次方增長,整體運行時間呈等比例減小,預期實驗結果見表4。以上兩個實驗可提高學生在Linux環境利用并行編程方式解決實際問題的能力。
2)共享內存優化。
為了更好地提高學生在分布式環境下數據處理分析的能力,在系統層對操作系統內存管理進行優化是目前提高性能的主要因素。因此,在實驗中應采用延遲策略或其他策略進行算法優化Buddy的實例,能培養學生使用相關的閱讀代碼工具(如Sourceinsight等)進行輔助閱讀代碼。同時應重點分析內存管理模塊的代碼,提升學生對系統的理解。運用學過的數據結構和算法基礎對伙伴算法進行優化,提升了學生整體的數據結構和算法設計能力,從而真正使學生對操作系統的內存管理機制有深入的理解。
3)進程遷移優化。
本實驗要求針對現有的故障檢測技術進行分析,對已有應用層檢測方法進行改進,使故障檢測技術能夠在單獨的網絡協議層運行,將原有的進程遷移算法做進一步的優化,利用Linux內核的dev_add_pack函數將心跳檢測器接收函數注冊到數據鏈路層,得到新的算法。改進算法可以讓源節點直接將地址空間傳送到目的節點,不經過文件服務器。在發送缺頁時,直接向源節點請求調頁,一旦整個地址空間傳送到目的節點,將徹底消除對源節點的剩余依賴性;同時,引入一個virtual進程,負責進程遷移通信的處理。
本實驗同樣需要閱讀Linux源代碼,并在故障檢測模塊和進程遷移模塊中進行相關算法的優化,主要提升學生用科學的思想進行問題分析,并根據相關文獻進行算法的優化,最終提高學生綜合解決問題的能力。
4)Linux內核的定制。
在源代碼中針對以上兩個模塊進行優化后,需要重新編譯優化后的內核,以此構建一個能夠滿足應用的新Linux內核。該部分首先需要學生能夠掌握Linux內核啟動的順序,學生可根據自身能力選擇是否進入源代碼閱讀Linux的啟動流程;然后,通過相關指令生成配置文件,同時根據自己的需要對內核進行定制;最后通過編譯,生成自己定制成功的操作系統。
在實驗中,學生需要自主尋找內核編譯過程的方式,理解操作系統運行原理,并通過前面學到的Linux命令執行編譯,這樣可以提高學生活學活用的能力,將理論知識與實際操作相結合,增強自主學習的能力。
5 結 語
該實驗改革方案在東北林業大學計算機科學技術專業2013級、2014級進行了推廣教學,實驗內容得到不斷地豐富和完善。學生通過3個層次的訓練,在操作系統考試中成績普遍有所提高。在今后的教學實踐中我們還會進行一些優化和調整,如加強模擬實驗專題與實際環境的相似度,利用龍芯多路處理器平臺在設備管理和系統調用的實驗方面進行一些新的嘗試,以便更加全面地覆蓋操作系統理論知識。
參考文獻:
[1] 孫述和, 謝青松, 董付國. 操作系統實驗教學研究與探索[J]. 計算機教育, 2010(1): 93-96.
[2] 鄒恒明. 操作系統課程實驗中的五重奏哲學[J]. 計算機教育, 2009(20): 109-112.
[3] 盧國瀟. 無線自組織網絡路由協議測試平臺研究[D]. 成都: 電子科技大學, 2014.
[4] 閻巍, 嚴俊文. 美國知名大學本科“操作系統”課程設置情況的對比和分析[J]. 教學研究與教材建設, 2009(14): 20.
[5] 謝謙, 蔡坤, 沈夏炯. 一種面向應用的操作系統實驗設置[J].計算機教育, 2012(20): 107-110.
[6] 張玉宏, 張玉, 程紅霞. 操作系統課程設計的實踐教學嘗試[J].計算機教育, 2015(14): 19-20.
[7] 徐超群. 高可用集群系統關鍵技術的研究與實現[D]. 南京: 南京航空航天大學, 2014.
[8] Heekwon P, Jongmoo C, Donghee L. Inverse buddy for enhancing memory allocation/deallocation performance on multi-coreSystems[EB/OL]. [2017-01-19]. http://ieeexplore.ieee.org/document/6714431/?arnumber=6714431.
.
(編輯:孫怡銘)