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