計算機操作系統實驗指導-基于RISC-V代理內核 課件 第三章實驗1:系統調用、異常和外部中斷_第1頁
計算機操作系統實驗指導-基于RISC-V代理內核 課件 第三章實驗1:系統調用、異常和外部中斷_第2頁
計算機操作系統實驗指導-基于RISC-V代理內核 課件 第三章實驗1:系統調用、異常和外部中斷_第3頁
計算機操作系統實驗指導-基于RISC-V代理內核 課件 第三章實驗1:系統調用、異常和外部中斷_第4頁
計算機操作系統實驗指導-基于RISC-V代理內核 課件 第三章實驗1:系統調用、異常和外部中斷_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于RISC-V代理內核的操作系統課程實驗與課程設計第三章.實驗1:系統調用、異常和外部中斷

目錄

實驗1的基礎知識RISC-V程序的編譯和鏈接指定符號的邏輯地址代理內核的構造過程代理內核的啟動過程ELF文件(app)的加載過程spike的HTIF接口實驗內容lab1_1系統調用lab1_2異常處理lab1_3(外部)中斷3.1實驗1的基礎知識RISC-V程序編譯主要過程:預處理:展開頭文件、宏替換、條件編譯、刪除注釋等等;編譯:語法檢查;匯編:將匯編文件翻譯成機器碼(二進制文本),生成目標文件;鏈接:將所有的目標文件打包鏈接成一個可執行文件。RISC-V程序的編譯過程指定符號的邏輯地址使用鏈接腳本,例如:OUTPUT_ARCH("riscv")ENTRY(main)SECTIONS{.=0x81000000;.=ALIGN(0x1000);.text:{*(.text)}.=ALIGN(16);.data:{*(.data)}.=ALIGN(16);.bss:{*(.bss)}}代理內核的構造(build)過程采用makefile,簡化構造過程,此處摘取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代理內核的構造(build)過程構造過程可概括為:構造util目錄下的靜態庫文件$(OBJ_DIR)/util.a;構造應用程序,得到$(OBJ_DIR)/app_helloworld;構造$(OBJ_DIR)/spike_interface.a,即spike所提供的工具庫文件;最后構造代理內核$(OBJ_DIR)/riscv-pke。代理內核的啟動過程采用spike模擬器(執行命令):spike./obj/riscv-pke./obj/app_helloworld啟動具體過程:在M態執行一系列初始化動作(如HTIF);將中斷異常處理“代理”給S態,進入S態;加載程序到內存,將程序封裝成一個最簡單的“進程”,然后調度執行,同時進入U態。ELF文件(app)的加載過程大致過程為:首先,解析命令行參數,獲得需要加載的ELF文件文件名;接下來初始化ELF加載數據結構,并打開即將被加載的ELF文件;加載ELF文件;通過ELF文件提供的入口地址設置進程的“入口地址”,保證“返回”用戶態的時候,所加載的ELF文件被執行;關閉ELF文件并返回。spike的HTIF接口

HTIF原理示意圖HTIF(HostTargetInterface)是一種通信協議,負責主機與代理內核的通信。主要功能:讀/寫內存、加載/啟動/停止程序等等。中斷處理例程當發生一個目標模式為機器模式的中斷,RISC-V處理器硬件將執行以下動作:1)保存pc到mepc寄存器;2)將特權級保存到mstatus寄存器的MPP字段;3)將mstatus寄存器中的MIE字段保存到(它自己的)MPIE字段;4)設置mcause,其值與中斷向量表中的Interrupt和Exceptioncode對應;5)將pc設置為中斷例程的入口,如果為直接模式則設置為mtvec的值;6)將mstatus寄存器的MIE字段清零,轉入機器模式。中斷處理例程注:在PKE實驗中,系統的中斷實際上是代理給監管模式處理的,在發生中斷時處理器硬件的流程與以上的機器模式類似,只是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注:處理器在執行mret指令時,將執行以下動作:1)將mstatus寄存器的MPIE字段恢復到該寄存器的MIE字段;2)處理器轉換到mstatus寄存器中MPP字段所對應的特權模式;3)將mepc中的內容恢復到pc中。

目錄

實驗1的基礎知識RISC-V程序的編譯和鏈接指定符號的邏輯地址代理內核的構造過程代理內核的啟動過程ELF文件(app)的加載過程spike的HTIF接口實驗內容lab1_1系統調用lab1_2異常處理lab1_3(外部)中斷lab1_1系統調用給定應用預期輸出lab1_1系統調用實驗內容:給定應用沒有實現預期效果,即在屏幕上打印“Helloworld!\n”。實驗代碼中syscall沒有被調用,找到并完成對do_syscall的調用,獲得預期的輸出結果。lab1_2異常處理給定應用預期輸出lab1_2異常處理實驗內容:(在用戶U模式下執行的)應用企圖執行RISC-V的特權指令csrwsscratch,0。該指令會修改S模式的棧指針,如果允許該指令的執行,執行的結果可能會導致系統崩潰。通過調用handle_illegal_instruction函數完成異常指令處理,阻止app_illegal_instruction的執行。lab1_3(外部)中斷給定應用預期輸出lab1_3(外部)中斷實驗內容:給定的程序在運行過程中受到了系統的外部時鐘中斷(timerirq)的“干擾”。而我們在這個實驗中給出的PKE操作系統內核,在時鐘中斷部分并未完全做好,導致(模擬)RISC-V機器碰到第一個時鐘中斷后就會出現崩潰。完成PKE操作系統內核未完成的時鐘中斷處理過程,使得它能夠完整地處理時鐘中斷。lab1_challenge1打印用戶程序調用棧給定應用預期輸出lab1_challenge1打印用戶程序調用棧實驗內容:通過修改PKE內核,來實現從給定應用(user/app_print_backtrace.c)到預期輸出的轉換。對于print_backtrace()函數的實現要求:應用程序調用print_backtrace()時,應能夠通過控制輸入的參數(如例子user/app_print_backtrace.c中的7)控制回溯的層數。例如,如果調用print_backtrace(5)則只輸出5層回溯;如果調用print_backtrace(100),則應只回溯到main函數就停止回溯(因為調用的深度小于100)。lab1_challenge2打印異常代碼行給定應用預期輸出lab1_challenge2打印異常代碼行實驗內容:通過修改PKE內核(包括machine文件夾下的代碼),使得用戶程序在發生異常時,內核能夠輸出觸發異常的用戶程序的源文件名和對應代碼行。文件名規范:需要包含路徑,如果是用戶源程序發生的錯誤,路徑為相對路徑,如果是調用的標準庫內發生的錯誤,路徑為絕對路徑。為了降低挑戰的難度,本實驗在elf.c中給出了debug_line段的解析函數make_addr_line。這個函數接受三個參數,ctx為elf文件的上下文指針,這個可以參考文件中的其他函數;debug_line為指向.debug_line段數據的指針,你需要讀取elf文件中名為.debug_line的段保存到緩沖區中,然后將緩沖區指針傳入這個參數;length為.debug_line段數據的長度。lab1_challenge3多核啟動及運行給定應用預期輸出lab1_challenge3多核啟動及運行實驗內容:在RISC-V處理器中,每一個CPU稱作一個hart(hardwarethread),并從0開始編號。此實驗要求啟動兩個CPU,它們的編號分別為0和1。本實驗中,你需要修改內核代碼,使得riscv-pke能夠通過spike啟動兩個CPU(hart),并且讓CPU0執行app0,讓CPU1執行app1。user0.lds和user1.lds中規定了app0從0x81000000處開始加載,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論