版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于RISC-V代理內(nèi)核的操作系統(tǒng)課程實驗與課程設(shè)計第三章.實驗1:系統(tǒng)調(diào)用、異常和外部中斷
目錄
實驗1的基礎(chǔ)知識RISC-V程序的編譯和鏈接指定符號的邏輯地址代理內(nèi)核的構(gòu)造過程代理內(nèi)核的啟動過程ELF文件(app)的加載過程spike的HTIF接口實驗內(nèi)容lab1_1系統(tǒng)調(diào)用lab1_2異常處理lab1_3(外部)中斷3.1實驗1的基礎(chǔ)知識RISC-V程序編譯主要過程:預(yù)處理:展開頭文件、宏替換、條件編譯、刪除注釋等等;編譯:語法檢查;匯編:將匯編文件翻譯成機器碼(二進制文本),生成目標文件;鏈接:將所有的目標文件打包鏈接成一個可執(zhí)行文件。RISC-V程序的編譯過程指定符號的邏輯地址使用鏈接腳本,例如:OUTPUT_ARCH("riscv")ENTRY(main)SECTIONS{.=0x81000000;.=ALIGN(0x1000);.text:{*(.text)}.=ALIGN(16);.data:{*(.data)}.=ALIGN(16);.bss:{*(.bss)}}代理內(nèi)核的構(gòu)造(build)過程采用makefile,簡化構(gòu)造過程,此處摘取makefile的一部分。KERNEL_TARGET=$(OBJ_DIR)/riscv-pkeUSER_TARGET:=$(OBJ_DIR)/app_helloworld……$(KERNEL_TARGET):$(OBJ_DIR)$(UTIL_LIB)$(SPIKE_INF_LIB)$(KERNEL_OBJS)$(KERNEL_LDS)@echo"linking"$@...@$(COMPILE)$(KERNEL_OBJS)$(UTIL_LIB)$(SPIKE_INF_LIB)-o$@-T$(KERNEL_LDS)@echo"PKEcorehasbeenbuiltinto"\"$@\“…….DEFAULT_GOAL:=$(all)all:$(KERNEL_TARGET)$(USER_TARGET).PHONY:all代理內(nèi)核的構(gòu)造(build)過程構(gòu)造過程可概括為:構(gòu)造util目錄下的靜態(tài)庫文件$(OBJ_DIR)/util.a;構(gòu)造應(yīng)用程序,得到$(OBJ_DIR)/app_helloworld;構(gòu)造$(OBJ_DIR)/spike_interface.a,即spike所提供的工具庫文件;最后構(gòu)造代理內(nèi)核$(OBJ_DIR)/riscv-pke。代理內(nèi)核的啟動過程采用spike模擬器(執(zhí)行命令):spike./obj/riscv-pke./obj/app_helloworld啟動具體過程:在M態(tài)執(zhí)行一系列初始化動作(如HTIF);將中斷異常處理“代理”給S態(tài),進入S態(tài);加載程序到內(nèi)存,將程序封裝成一個最簡單的“進程”,然后調(diào)度執(zhí)行,同時進入U態(tài)。ELF文件(app)的加載過程大致過程為:首先,解析命令行參數(shù),獲得需要加載的ELF文件文件名;接下來初始化ELF加載數(shù)據(jù)結(jié)構(gòu),并打開即將被加載的ELF文件;加載ELF文件;通過ELF文件提供的入口地址設(shè)置進程的“入口地址”,保證“返回”用戶態(tài)的時候,所加載的ELF文件被執(zhí)行;關(guān)閉ELF文件并返回。spike的HTIF接口
HTIF原理示意圖HTIF(HostTargetInterface)是一種通信協(xié)議,負責主機與代理內(nèi)核的通信。主要功能:讀/寫內(nèi)存、加載/啟動/停止程序等等。中斷處理例程當發(fā)生一個目標模式為機器模式的中斷,RISC-V處理器硬件將執(zhí)行以下動作:1)保存pc到mepc寄存器;2)將特權(quán)級保存到mstatus寄存器的MPP字段;3)將mstatus寄存器中的MIE字段保存到(它自己的)MPIE字段;4)設(shè)置mcause,其值與中斷向量表中的Interrupt和Exceptioncode對應(yīng);5)將pc設(shè)置為中斷例程的入口,如果為直接模式則設(shè)置為mtvec的值;6)將mstatus寄存器的MIE字段清零,轉(zhuǎn)入機器模式。中斷處理例程注:在PKE實驗中,系統(tǒng)的中斷實際上是代理給監(jiān)管模式處理的,在發(fā)生中斷時處理器硬件的流程與以上的機器模式類似,只是mepc、mstatus、mcause以及mtvec換成了sepc、sstatus、scause以及stvec。典型的中斷處理過程.align6.globalhandler_interrupthandler_interrupt:addisp,sp,-32*REGBYTESSTOREx1,1*REGBYTES(sp)...STOREx31,31*REGBYTES(sp)//callCcodehandlercallsoftware_handler//finishedinterrupthandling,readytoreturnLOADx1,1*REGBYTES(sp)...LOADx31,31*REGBYTES(sp)addisp,sp,32*REGBYTESmret注:處理器在執(zhí)行mret指令時,將執(zhí)行以下動作:1)將mstatus寄存器的MPIE字段恢復(fù)到該寄存器的MIE字段;2)處理器轉(zhuǎn)換到mstatus寄存器中MPP字段所對應(yīng)的特權(quán)模式;3)將mepc中的內(nèi)容恢復(fù)到pc中。
目錄
實驗1的基礎(chǔ)知識RISC-V程序的編譯和鏈接指定符號的邏輯地址代理內(nèi)核的構(gòu)造過程代理內(nèi)核的啟動過程ELF文件(app)的加載過程spike的HTIF接口實驗內(nèi)容lab1_1系統(tǒng)調(diào)用lab1_2異常處理lab1_3(外部)中斷l(xiāng)ab1_1系統(tǒng)調(diào)用給定應(yīng)用預(yù)期輸出lab1_1系統(tǒng)調(diào)用實驗內(nèi)容:給定應(yīng)用沒有實現(xiàn)預(yù)期效果,即在屏幕上打印“Helloworld!\n”。實驗代碼中syscall沒有被調(diào)用,找到并完成對do_syscall的調(diào)用,獲得預(yù)期的輸出結(jié)果。lab1_2異常處理給定應(yīng)用預(yù)期輸出lab1_2異常處理實驗內(nèi)容:(在用戶U模式下執(zhí)行的)應(yīng)用企圖執(zhí)行RISC-V的特權(quán)指令csrwsscratch,0。該指令會修改S模式的棧指針,如果允許該指令的執(zhí)行,執(zhí)行的結(jié)果可能會導(dǎo)致系統(tǒng)崩潰。通過調(diào)用handle_illegal_instruction函數(shù)完成異常指令處理,阻止app_illegal_instruction的執(zhí)行。lab1_3(外部)中斷給定應(yīng)用預(yù)期輸出lab1_3(外部)中斷實驗內(nèi)容:給定的程序在運行過程中受到了系統(tǒng)的外部時鐘中斷(timerirq)的“干擾”。而我們在這個實驗中給出的PKE操作系統(tǒng)內(nèi)核,在時鐘中斷部分并未完全做好,導(dǎo)致(模擬)RISC-V機器碰到第一個時鐘中斷后就會出現(xiàn)崩潰。完成PKE操作系統(tǒng)內(nèi)核未完成的時鐘中斷處理過程,使得它能夠完整地處理時鐘中斷。lab1_challenge1打印用戶程序調(diào)用棧給定應(yīng)用預(yù)期輸出lab1_challenge1打印用戶程序調(diào)用棧實驗內(nèi)容:通過修改PKE內(nèi)核,來實現(xiàn)從給定應(yīng)用(user/app_print_backtrace.c)到預(yù)期輸出的轉(zhuǎn)換。對于print_backtrace()函數(shù)的實現(xiàn)要求:應(yīng)用程序調(diào)用print_backtrace()時,應(yīng)能夠通過控制輸入的參數(shù)(如例子user/app_print_backtrace.c中的7)控制回溯的層數(shù)。例如,如果調(diào)用print_backtrace(5)則只輸出5層回溯;如果調(diào)用print_backtrace(100),則應(yīng)只回溯到main函數(shù)就停止回溯(因為調(diào)用的深度小于100)。lab1_challenge2打印異常代碼行給定應(yīng)用預(yù)期輸出lab1_challenge2打印異常代碼行實驗內(nèi)容:通過修改PKE內(nèi)核(包括machine文件夾下的代碼),使得用戶程序在發(fā)生異常時,內(nèi)核能夠輸出觸發(fā)異常的用戶程序的源文件名和對應(yīng)代碼行。文件名規(guī)范:需要包含路徑,如果是用戶源程序發(fā)生的錯誤,路徑為相對路徑,如果是調(diào)用的標準庫內(nèi)發(fā)生的錯誤,路徑為絕對路徑。為了降低挑戰(zhàn)的難度,本實驗在elf.c中給出了debug_line段的解析函數(shù)make_addr_line。這個函數(shù)接受三個參數(shù),ctx為elf文件的上下文指針,這個可以參考文件中的其他函數(shù);debug_line為指向.debug_line段數(shù)據(jù)的指針,你需要讀取elf文件中名為.debug_line的段保存到緩沖區(qū)中,然后將緩沖區(qū)指針傳入這個參數(shù);length為.debug_line段數(shù)據(jù)的長度。lab1_challenge3多核啟動及運行給定應(yīng)用預(yù)期輸出lab1_challenge3多核啟動及運行實驗內(nèi)容:在RISC-V處理器中,每一個CPU稱作一個hart(hardwarethread),并從0開始編號。此實驗要求啟動兩個CPU,它們的編號分別為0和1。本實驗中,你需要修改內(nèi)核代碼,使得riscv-pke能夠通過spike啟動兩個CPU(hart),并且讓CPU0執(zhí)行app0,讓CPU1執(zhí)行app1。user0.lds和user1.lds中規(guī)定了app0從0x81000000處開始加載,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 泌尿系腔鏡檢查及護理
- 高校思想政治教育工作方案
- 熱力一次線施工環(huán)境監(jiān)測方案
- 語文一年級《ie üe er》說課稿
- 稅法與實訓(xùn)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 蘇州文化學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 別墅外墻砌磚施工方案
- 心理委員角色與責任培訓(xùn)方案
- 娛樂媒體產(chǎn)業(yè)行業(yè)經(jīng)營分析報告
- 大米與油類產(chǎn)品質(zhì)量控制方案
- 2024秋期國家開放大學(xué)《政治學(xué)原理》一平臺在線形考(形考任務(wù)三)試題及答案
- 化工企業(yè)中試階段及試生產(chǎn)期間的產(chǎn)品能否對外銷售
- 國開作業(yè)《公共關(guān)系學(xué)》實訓(xùn)項目1:公關(guān)三要素分析(六選一)參考552
- 多圖中華民族共同體概論課件第十一講 中華一家與中華民族格局底定(清前中期)根據(jù)高等教育出版社教材制作
- 2024年福建閩投永安抽水蓄能有限公司招聘筆試參考題庫附帶答案詳解
- 成長生涯發(fā)展展示
- 求職能力展示
- 基于PLC的熱水箱恒溫控制系統(tǒng)
- 城軌行車組織-工程列車的開行
- 國培教師個人成長案例3000字
- 中國馬克思主義與當代思考題(附答案)
評論
0/150
提交評論