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