陷阱trap
術語陷阱描述了軟件應用程序中的控制轉移,其中陷阱處理通常在更特權的環境中執行。例如,一個特定的 hart包含三種權限模式:機器、管理員和用戶。每種特權模式都有自己的軟件執行環境,包括專用的堆棧區域。此外,每種特權模式都包含用于陷阱處理的單獨控制和狀態寄存器(CSR)。在用戶模式下操作時,需要上下文切換來處理主管模式下的事件。軟件為上下文切換設置系統,然后執行 ECALL 指令,將控制同步切換到Environment call-from-User 模式異常處理程序。
復位后的默認模式是機器模式。軟件以最高權限級別開始執行,這允許在任何權限級別更改之前初始化所有 CSR和系統資源。下面的步驟描述了將特權模式從機器模式更改為用戶模式所需的步驟,在特定設計上也包括管理員模式。
應首先通過將 mstatus.MIE 寫入 0(默認復位值)來全局禁用中斷。
將機器模式異常處理程序的基地址寫入 mtvec CSR。這是任何引導流程中的必需步驟。
將 mstatus.MPP 寫入 0 以將之前的模式設置為 User,這允許我們返回到該模式。
設置物理內存保護 (PMP) 區域以將所需區域授予用戶和主管模式,并可選擇從機器模式撤消權限。
用主管模式異常處理程序的基地址寫入 stvec CSR。
編寫 medeleg 寄存器,將異常委托給主管模式。考慮 ECALL 和頁面錯誤異常。
編寫 mstatus.FS 以啟用浮點(如果支持)。
將機器模式用戶寄存器存儲到堆棧或應用程序特定的幀指針。
用用戶態軟件的入口點編寫mepc
執行mret指令進入用戶模式。
Note:只有一組用戶寄存器 (x1 - x31) 用于所有權限級別,因此應用軟件負責在進入和退出不同級別時保存和恢復狀態。
本地中斷
軟件中斷(中斷 ID #3):通過寫入特定 hart 的內存映射中斷掛起寄存器 msip 來觸發。
定時器中斷:當寄存器 mtime 大于或等于寄存器 mtimecmp 并且兩個寄存器都是 CLINT 內存映射的一部分時,會觸發定時器中斷(中斷 ID#7)。mtime 和 mtimecmp 寄存器通常僅在機器模式下可用,除非 PMP 授予用戶或管理員模式訪問它們所在的內存映射區域的權限。
全局中斷通常首先路由到 PLIC,然后使用外部中斷進入 hart(中斷 ID #11)
中斷操作
在特權模式 m 內,如果相關的全局中斷使能 {ie} 清零,則在該特權模式下不會產生任何中斷,但更高特權模式下的待決啟用中斷將搶占當前執行。如果設置了{ie},則在相同特權模式下處于更高中斷級別的掛起啟用中斷將搶占當前執行并運行更高中斷級別的中斷處理程序。
當發生中斷或同步異常時,會修改特權模式以反映新的特權模式。處理程序特權模式的全局中斷使能位被清除
中斷進入和退出
當中斷發生時:
? mstatus.MIE 的值被復制到mcause.MPIE 中,然后mstatus.MIE 被清除,有效地禁用了中斷。
? 中斷前的特權模式在mstatus.MPP 中編碼。
? 當前 pc 被復制到 mepc 寄存器中,然后將 pc 設置為 mtvec 指定的值
此時,控制權移交給中斷處理程序中的軟件,并禁用中斷。執行 mret 指令時,會發生以下情況:
? 特權模式設置為在 mstatus.MPP 中編碼的值。
? 全局中斷使能 mstatus.MIE 設置為 mcause.MPIE 的值。
? pc 設置為mepc 的值。
此時,控制權交給軟件。
-
寄存器
+關注
關注
31文章
5250瀏覽量
119187 -
內核
+關注
關注
3文章
1336瀏覽量
40082 -
控制
+關注
關注
4文章
1005瀏覽量
122506 -
RISC
+關注
關注
6文章
460瀏覽量
83566 -
sifive
+關注
關注
0文章
34瀏覽量
9443
發布評論請先 登錄
相關推薦
評論