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