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

STM32進(jìn)入和退出睡眠模式
PLIC平臺(tái)級(jí)中斷控制器介紹

LIC內(nèi)核中斷掛起位和中斷使能

U54內(nèi)核PLIC中斷處理例子

U54內(nèi)核上CLINT的內(nèi)存映射

RISC-V SiFive U54內(nèi)核的中斷介紹

U54內(nèi)核中斷控制和狀態(tài)寄存器

U54內(nèi)核特權(quán)模式中斷介紹

U54內(nèi)核不可屏蔽中斷信號(hào)

評(píng)論