張 軍,項東升,張其林,王 普
(湖北文理學(xué)院 計算機工程學(xué)院,湖北 襄陽 411053)
新一代信息技術(shù)的發(fā)展驅(qū)動著新產(chǎn)品、新產(chǎn)業(yè)和新模式迅猛發(fā)展。新一代計算機技術(shù)是當前信息技術(shù)創(chuàng)新的主流,包括以下特征[1]:①云計算、大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等新技術(shù)帶來新的知識體系和技術(shù)內(nèi)容,支撐新產(chǎn)品與新產(chǎn)業(yè)的不斷出現(xiàn)和發(fā)展;②計算機技術(shù)與其他學(xué)科深度交叉融合,持續(xù)促進產(chǎn)品創(chuàng)新與模式改革。為了適應(yīng)這些特征,計算機類人才必須了解不同系統(tǒng)平臺的底層結(jié)構(gòu),能夠從系統(tǒng)層面綜合設(shè)計,通過軟硬件協(xié)同設(shè)計實現(xiàn)最優(yōu)的系統(tǒng)方案,這對計算機類專業(yè)人才的系統(tǒng)能力提出很高要求。
通過系統(tǒng)能力培養(yǎng),計算機類學(xué)生深入理解并掌握計算機系統(tǒng)的工作機制和原理,理解計算機系統(tǒng)硬件與軟件層次結(jié)構(gòu)和相互關(guān)聯(lián)(如處理器架構(gòu)、操作系統(tǒng)及高級語言程序之間的邏輯層次和相互聯(lián)系),并能夠進行軟硬件協(xié)同設(shè)計,能夠設(shè)計與開發(fā)滿足新時代需求的計算機系統(tǒng)。這就要求計算機類學(xué)生既有完備的計算機系統(tǒng)知識,又有解決復(fù)雜工程問題的實踐能力,強化和提升學(xué)生的應(yīng)用和創(chuàng)新能力,提高學(xué)生適應(yīng)信息技術(shù)發(fā)展趨勢的能力[2]。
雖然國內(nèi)外在系統(tǒng)能力培養(yǎng)上已經(jīng)取得了許多研究進展,但是國內(nèi)地方院校在系統(tǒng)能力培養(yǎng)方面存在一些問題[3],不能滿足新經(jīng)濟發(fā)展的需求。首先,傳統(tǒng)的基于“示意圖+例題”的知識點講授方法和以驗證為目的實驗平臺無法提供知識點的實現(xiàn)細節(jié),不利于學(xué)生對知識點的理解和應(yīng)用;其次,由于各門課程的教學(xué)與實驗平臺缺乏延續(xù)性,缺少貫穿各門課程的綜合性實驗平臺,不利于學(xué)生工程實踐能力與創(chuàng)新能力培養(yǎng),學(xué)用脫節(jié)[4];最后,清華大學(xué)等高校的系統(tǒng)能力培養(yǎng)實驗平臺在地方高校的應(yīng)用存在困難。這些實驗平臺對教師的工程能力要求較高,且不能作為教師的科研平臺,地方高校教師在教學(xué)與科研的雙重壓力下,沒有提高自身工程能力、充分發(fā)揮實驗平臺作用的積極性。
當前教學(xué)通?;凇笆疽鈭D+例題”講解知識點。一方面因為看不到知識點的具體實現(xiàn),學(xué)生掌握了知識點的工作原理后不能靈活使用所學(xué)內(nèi)容;另一方面,教學(xué)中的知識點相互獨立,學(xué)生不了解各知識點在計算機系統(tǒng)中的位置及相互關(guān)系。為了解決這些問題,需要一個輔助教師授課的教學(xué)平臺,教學(xué)平臺中包含知識點的具體實現(xiàn)。教師將核心知識點的具體實現(xiàn)(開源項目源代碼)作為教學(xué)案例,使學(xué)生將理論知識與具體實現(xiàn)相結(jié)合,并基于教學(xué)平臺將所有知識點串聯(lián)在一起,促進學(xué)生對知識點的深入理解和靈活應(yīng)用。
實驗是加深學(xué)生對知識點理解和應(yīng)用的重要環(huán)節(jié)。當前以驗證為目的實驗平臺無法提供實現(xiàn)細節(jié),各門課程的教學(xué)與實驗平臺缺乏延續(xù)性,并且缺少貫穿各門課程的綜合性實驗平臺。學(xué)生總是要花時間學(xué)習(xí)新的實驗環(huán)境,增加了學(xué)生負擔。各門課的實驗環(huán)境不能有效結(jié)合在一起,不能進行綜合性的實驗,不利于學(xué)生工程能力與創(chuàng)新能力的培養(yǎng)。為了解決這些問題,需要將各門課程的教學(xué)平臺與實驗平臺統(tǒng)一,并且平臺代碼開源。課程間的教學(xué)與實踐平臺要相互關(guān)聯(lián),能夠開展大型綜合性實驗。
基于以上分析,教學(xué)與實驗平臺必須滿足以下要求:①平臺所用代碼是開源免費的,并且代碼簡潔、書寫規(guī)范、容易理解,方便教師從中提取教學(xué)案例,同時方便學(xué)生自己搭建實驗環(huán)境,使其不受時間和空間的影響;②平臺所用代碼在工業(yè)界或科學(xué)研究上廣泛接受,使其能夠用于教師的科研項目,提高教師的積極性;③平臺所用代碼能夠?qū)崿F(xiàn)完整的計算機系統(tǒng),基于該系統(tǒng)可以解決較復(fù)雜的工程問題,培養(yǎng)學(xué)生的工程能力和創(chuàng)新能力。
國家計算機系統(tǒng)能力培養(yǎng)工作小組提出的“一個 CPU、一個編譯器、一個操作系統(tǒng)”方案能夠很好地體現(xiàn)計算機能力培養(yǎng)的具體方法[5-6]。經(jīng)過調(diào)研,基于RISC-V 的CPU、編譯器和操作系統(tǒng)開源項目可滿足上述要求。
RISC-V 是由美國加州大學(xué)伯克利分校于2010 年提出的全新簡單且開放免費的精簡指令集體系架構(gòu)。與主流的處理器架構(gòu)(如ARM 或x86)相比,RISC-V 不需要考慮向后兼容,并借助計算機體系結(jié)構(gòu)多年的發(fā)展經(jīng)驗,使其架構(gòu)更簡單高效。經(jīng)過多年的發(fā)展,已經(jīng)有豐富的開源RISC-V 處理器實現(xiàn),如加州大學(xué)伯克利分校開發(fā)的Rocket 與Boom 處理器核,我國芯來科技開發(fā)的蜂鳥E200 處理器核。以開源RISC-V 處理器為實驗平臺的研究論文更是逐年增加。眾多芯片公司(如三星、英偉達、西部數(shù)據(jù)等)開始使用或者計劃將自研的RISC-V 處理器用于產(chǎn)品。另一方面,RISC-V 社區(qū)已經(jīng)提供完整的工具鏈,RISC-V 基金也會持續(xù)維護工具鏈,包括支持RISC-V 的GCC 編譯器和LLVM 編譯器、操作系統(tǒng)、仿真器、QEMU 模擬器和測試套件。
經(jīng)過調(diào)研,我們選擇芯來科技開發(fā)的蜂鳥E200 RISC-V 處理器作為數(shù)字電路設(shè)計、計算機組成原理、計算機接口技術(shù)等課程的教學(xué)與實驗平臺;選擇已經(jīng)移植到蜂鳥E200 處理器的FreeRTOS 作為操作系統(tǒng)課程的教學(xué)與實驗平臺,采用開源的編譯器LLVM 作為編譯原理課程的教學(xué)與實驗平臺,并將三者相結(jié)合,開展大型綜合性實驗。
蜂鳥E200 處理器是由芯來科技開發(fā)的一款開源RISC-V 處理器,具有以下優(yōu)點:①該處理器不僅提供處理器核的實現(xiàn),還包括SoC 實現(xiàn)、FPGA 平臺和軟件示例;②處理器代碼由Verilog HDL 編寫并添加豐富的注釋,可讀性強,容易理解,最重要的是代碼全部開源免費,相關(guān)內(nèi)容在配套書籍中有詳細介紹,非常適合作為高校教學(xué)案例;③處理器代碼由擁有多年處理器開發(fā)經(jīng)驗的團隊編寫,代碼符合工業(yè)級標準,不僅可以作為教師的科研教學(xué)平臺,還可以作為師生創(chuàng)新創(chuàng)業(yè)平臺;④該處理器由國內(nèi)研發(fā)團隊開發(fā),可方便獲得開發(fā)人員的技術(shù)支持。
FreeRTOS 雖然是一款輕量級的操作系統(tǒng),但可基本滿足較小系統(tǒng)的需求,其功能包括任務(wù)管理、時間管理、信號量、消息隊列、內(nèi)存管理等,完全滿足操作系統(tǒng)課程的需求。FreeRTOS目前有較高的市場占有率,且源碼公開,完全免費,更重要的是,內(nèi)核文件僅由3個C文件組成,方便學(xué)生學(xué)習(xí)。
LLVM 是用C++編寫的編譯框架系統(tǒng),目前已經(jīng)被蘋果、Xilinx、Facebook、Google 等大公司采用。LLVM 由一系列模塊、可重用的編譯工具鏈構(gòu)成,可讀性和可擴展性都優(yōu)勝于GCC。LLVM 所有代碼遵循的開源協(xié)議允許被任意修改、商用,而且不需要開源。因此,學(xué)生可以基于該框架開發(fā)出商業(yè)產(chǎn)品而不會受到開源協(xié)議的約束。LLVM 開發(fā)者社區(qū)非?;钴S,用戶手冊和開發(fā)文檔非常完善,并且網(wǎng)絡(luò)上很多學(xué)習(xí)案例,因此學(xué)生具有豐富的學(xué)習(xí)資源。LLVM 可提供編寫良好的中間表示,可以作為多種語言的后端,提供針對多種CPU 的代碼生成功能[7]。
基于RISC-V 開源項目,通過教學(xué)知識點與開源項目相結(jié)合,可以將理論知識與具體實現(xiàn)相對應(yīng)。通過統(tǒng)一的教學(xué)與實驗平臺,貫穿計算機類專業(yè)知識點,提高學(xué)生工程能力和創(chuàng)新能力。首先,從上述教學(xué)與實驗平臺提取教學(xué)案例,閱讀與講解開源代碼,使教學(xué)內(nèi)容具體化,提高學(xué)生的學(xué)習(xí)興趣。課后學(xué)生通過復(fù)現(xiàn)教學(xué)案例,通過分析源代碼加深對各知識點的理解;其次,學(xué)生基于教學(xué)與實驗平臺對所學(xué)知識進行拓展,如對現(xiàn)有方面進行評估和優(yōu)化,嘗試改變知識點的實現(xiàn)算法。通過這個過程理解各核心知識點的工作原理及其實現(xiàn)方法,能夠加深對計算機系統(tǒng)的全面理解,提高學(xué)生的創(chuàng)新能力;最后,以項目為驅(qū)動,基于蜂鳥E200 處理器、FreeRTOS 操作系統(tǒng)和LLVM 編譯器,解決較復(fù)雜的工程問題,培養(yǎng)學(xué)生的應(yīng)用和創(chuàng)新能力。
課程內(nèi)容改革主要解決課程間知識點無銜接與教學(xué)內(nèi)容抽象兩個問題。為了解決這兩個問題,我們梳理計算機系統(tǒng)能力培養(yǎng)的關(guān)鍵知識點,并將這些知識點劃分到上述4 門核心課程中。在講授課程時,將核心知識點與蜂鳥E200處理器、RTOS 操作系統(tǒng)和LLVM 編譯器的具體實現(xiàn)對應(yīng),形成教學(xué)案例。通過案例演示并結(jié)合代碼分析增強學(xué)生對核心知識點的理解。
(1)數(shù)字電路:數(shù)字電路是學(xué)習(xí)計算機系統(tǒng)硬件知識的基礎(chǔ)。計算機組成原理課程中用到的譯碼器、編碼器、加法器、觸發(fā)器等電路單元均在這門課中介紹??紤]到計算機組成原理課程內(nèi)容較多,可以將相關(guān)內(nèi)容放到數(shù)字電路中介紹(例如運算部件和流水線的概念)。在數(shù)字電路課程中,在介紹理論知識的同時,基于蜂鳥E200處理器介紹各種電路單元的功能、使用場景和基于Verilog HDL 的描述方法。學(xué)生通過課后練習(xí),學(xué)習(xí)EDA 工具的使用方法,模仿各種電路的Verilog HDL 描述,進而加深對核心知識點的理解,并通過實驗課程提前學(xué)習(xí)部分計算機組成原理知識點。
(2)計算機組成原理:盡管計算機組成原理教材上有豐富的示意圖,相關(guān)知識點的介紹仍然很抽象,教師講課時覺得空洞無力,學(xué)生也感到空洞乏味。為了將講授內(nèi)容與計算機系統(tǒng)的真實情景聯(lián)系在一起,可針對講授內(nèi)容編寫一段程序(C 程序或匯編程序),在蜂鳥E200 系統(tǒng)中構(gòu)建相應(yīng)場景,使講授內(nèi)容具體化。例如,通過分析具體指令的執(zhí)行過程講解流水線各階段的功能、流水線沖突及流水線沖突的解決辦法;通過以蜂鳥E200 系統(tǒng)為例介紹各類存儲器的作用、系統(tǒng)總線結(jié)構(gòu)及協(xié)議、I/O 接口及其編址方式;通過具體例子介紹中斷處理過程與DMA 傳輸數(shù)據(jù)的過程。學(xué)生在課后可基于教師提供的程序復(fù)現(xiàn)相關(guān)場景,對相關(guān)知識進行復(fù)習(xí)鞏固,提高學(xué)生的參與度。
(3)操作系統(tǒng):以實時操作系統(tǒng)FreeRTOS源代碼和蜂鳥E200 系統(tǒng)為例,介紹系統(tǒng)存儲管理機制、系統(tǒng)任務(wù)調(diào)度、文件系統(tǒng)、I/O 子系統(tǒng)、中斷及系統(tǒng)調(diào)用。在講授時要強調(diào)處理器硬件代碼與操作系統(tǒng)軟件代碼相結(jié)合,使學(xué)生理解計算機系統(tǒng)軟件與硬件的協(xié)作方法。例如,在啟動過程中,軟件如何檢測系統(tǒng)硬件并對系統(tǒng)硬件進行配置,理解這些系統(tǒng)配置的作用;在任務(wù)調(diào)度時,任務(wù)的上下文包括哪些內(nèi)容,操作系統(tǒng)如何完成上下文的切換;在中斷處理時,硬件如何生成中斷向量,操作系統(tǒng)如何根據(jù)中斷向量進入中斷服務(wù)程序,中斷在系統(tǒng)任務(wù)調(diào)度中起什么作用。通過這個過程,使學(xué)生建立完整的計算機軟硬件層次結(jié)構(gòu)。
(4)編譯原理:基于LLVM 編譯框架介紹編譯的工作流程,如詞法分析、語法分析、語義分析、代碼生成。基于LLVM 編譯器的程序優(yōu)化和靜態(tài)分析,結(jié)合RISC-V 指令集介紹LLVM 編譯器后端實現(xiàn)。在課程學(xué)習(xí)中,教師根據(jù)核心知識點,找出對應(yīng)的LLVM 源代碼段,結(jié)合源代碼介紹編譯中所用到的算法,引導(dǎo)學(xué)生有選擇性地研究LLVM 源代碼,這樣可以使學(xué)生將精力集中在編譯算法的實現(xiàn),減輕學(xué)生面對大規(guī)模代碼的壓力。另一方面,LLVM 具有良好的代碼風(fēng)格和豐富的文檔,可引導(dǎo)學(xué)生學(xué)習(xí)LLVM 的架構(gòu)和實現(xiàn)方法,從而掌握實現(xiàn)大規(guī)模系統(tǒng)軟件的方法。
實驗內(nèi)容分為3 個階段[8]。在實驗的第1 階段,通過考查學(xué)生對核心知識點對應(yīng)源代碼的理解,檢查學(xué)生對核心知識點的理解程度。比如,在介紹編譯原理的語法分析時,通過分析LLVM的源代碼,得到遞歸下降風(fēng)格的語法分析實現(xiàn)過程。在介紹RISC-V 指令格式時,通過分析蜂鳥E200 處理器核的指令譯碼代碼得到不同類型指令的指令格式及各類型指令的譯碼信號,進而加深對處理器指令功能的理解。該階段實驗以代碼分析報告的形式考查,代碼分析報告要體現(xiàn)出源代碼如何實現(xiàn)核心知識點的工作流程。由于地方高校缺少助教,可安排代碼分析討論活動解決這一問題。挑選代碼分析報告寫得較好的學(xué)生講解自己的理解,并解答其他同學(xué)提出的問題。最后任課教師對有爭論的問題進行解答,并根據(jù)討論的過程給予學(xué)生實驗成績。這樣有兩個好處:①實驗內(nèi)容是教學(xué)內(nèi)容的延續(xù),加深學(xué)生對核心知識點的理解,提高了學(xué)生的學(xué)習(xí)積極性;②教師可通過實驗過程了解學(xué)生對核心知識點的困惑,及時解決學(xué)生的問題。
計算機系統(tǒng)的核心知識點均有不斷改進的過程,即有多種實現(xiàn)方法。在實驗的第2 階段,要求學(xué)生模仿開源代碼中核心知識點的實現(xiàn)方式,實現(xiàn)另一種改進型的實現(xiàn)方式,通過這個過程提高學(xué)生的動手能力。比如,處理器的cache 可分為全相連、組相連、多路組相連3 種形式。在實驗時可要求學(xué)生在源代碼的基礎(chǔ)上實現(xiàn)另外兩種形式,并對比這幾種形式,從而加深理解不同cache 組織形式的優(yōu)缺點。在這個階段,不僅進一步加深了學(xué)生對相關(guān)知識點的理解,同時提高了學(xué)生的動手能力,培養(yǎng)了學(xué)生分析問題與解決問題的能力。
實驗的第3 階段重點培養(yǎng)學(xué)生的創(chuàng)新能力,這個階段主要以課程設(shè)計的方式實現(xiàn)。課程設(shè)計包括各門核心專業(yè)課的課程設(shè)計及計算機系統(tǒng)能力培養(yǎng)的專業(yè)課。前者主要考查學(xué)生對各門課程核心知識點的理解與使用情況,后者主要考查學(xué)生計算機系統(tǒng)能力的培養(yǎng)情況??疾樾问綖?,由教師為學(xué)生指定題目,學(xué)生在開源平臺上予以解決。題目的來源包括教師自己的研究課題、歷年來計算機學(xué)科比賽的題目,鼓勵學(xué)生提出自己感興趣的問題。這樣有兩個好處:①以問題為導(dǎo)向,將各學(xué)科的核心內(nèi)容有機融合在一起,提高學(xué)生解決復(fù)雜問題的能力;②將教學(xué)與科研聯(lián)系在一起,為教師的科研培養(yǎng)更多助手。
(1)具體化的教學(xué)內(nèi)容。傳統(tǒng)基于“示意圖+例題”講解的授課方式以原理分析為主,學(xué)生主要依靠課本中示意圖和例題輔助理解。通過將蜂鳥E200 處理器系統(tǒng)、FreeRTOS 操作系統(tǒng)和LLVM 編譯器的具體實現(xiàn)作為教學(xué)案例,學(xué)生對所講內(nèi)容有直觀理解。更重要的是,學(xué)生能夠根據(jù)教師提供的代碼重現(xiàn)講授場景,不僅提高了學(xué)生的學(xué)習(xí)積極性,還提高了動手能力。
(2)貫通式能力培養(yǎng)。能力培養(yǎng)的貫通性體現(xiàn)在教學(xué)內(nèi)容與課程實驗兩個方面。首先,蜂鳥E200 處理器系統(tǒng)和FreeRTOS 操作系統(tǒng)代表一個完整的計算機系統(tǒng),通過將二者相結(jié)合,使2 門課程的核心知識點有效銜接在一起,學(xué)生對計算機系統(tǒng)有整體認識。其次,課程實驗也基于這個平臺,教學(xué)內(nèi)容與課程實驗緊密聯(lián)系在一起,學(xué)生通過實驗深入理解所學(xué)內(nèi)容,也降低了學(xué)生的學(xué)習(xí)難度。
(3)提高學(xué)生解決復(fù)雜工程問題的能力。蜂鳥E200 處理器系統(tǒng)、FreeRTOS 操作系統(tǒng)和LLVM 編譯器雖然都是開源代碼,但均按照工業(yè)標準實現(xiàn),是非常好的學(xué)習(xí)范例。通過對二者源代碼的學(xué)習(xí),不僅能深入理解計算機系統(tǒng)的工作原理,還能掌握軟件與硬件協(xié)同設(shè)計的方法,進而通過配套實驗,培養(yǎng)學(xué)生解決復(fù)雜工程問題的能力。
(4)面向社會需求。在處理器領(lǐng)域,RISV-V作為一種全新的、開放免費的指令集架構(gòu)在國內(nèi)外受到廣泛關(guān)注和使用?;诜澍BE200 處理器系統(tǒng)的學(xué)習(xí),學(xué)生深入理解RISV-V 處理器架構(gòu),能夠為學(xué)生打下堅實的處理器設(shè)計基礎(chǔ)。在操作系統(tǒng)領(lǐng)域,F(xiàn)reeRTOS 有著20%的市場占有率,針對實時操作系統(tǒng)的移植、驅(qū)動開發(fā)等能夠直接滿足企業(yè)的需求。LLVM 是產(chǎn)品級的開源編譯框架,基于LLVM 的學(xué)習(xí),學(xué)生不僅可以學(xué)習(xí)編譯器的架構(gòu)和實現(xiàn),還可以學(xué)習(xí)如何實現(xiàn)較大規(guī)模的系統(tǒng)軟件。基于三者的學(xué)習(xí),最終培養(yǎng)能夠解決復(fù)雜工程問題的緊缺人才。
將RISC-V 開源項目作為教學(xué)與實驗平臺,不僅能夠?qū)⒔虒W(xué)內(nèi)容具體化,還能為計算機系統(tǒng)相關(guān)的各門課程提供貫通式的實驗平臺,為面向計算機系統(tǒng)能力培養(yǎng)的教學(xué)改革提供參考依據(jù)。筆者團隊將“自上而下”地協(xié)調(diào)各門課程的教學(xué)與實驗內(nèi)容改革,詳細設(shè)計和規(guī)劃各門課程的教學(xué)與實驗內(nèi)容,順利完成計算機系統(tǒng)能力培養(yǎng)的課程改革任務(wù)。