五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一文解析RISC-V SiFive U54內(nèi)核——中斷和異常

2023-03-29 16:12 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

上篇一文解析RISC-V SiFive U54內(nèi)核——中斷和異常??說到,SiFive U54內(nèi)核有兩個中斷控制器:CLINT和PLIC。CLINT用于本地中斷(軟件中斷和定時器中斷),PLIC用于全局中斷。

下面對CLINT進(jìn)行詳細(xì)說明。

內(nèi)核本地中斷(CLINT)

下圖為CLINT示意圖,CLINT通過固定的中斷號和優(yōu)先級,可將軟件中斷或定時器中斷直接發(fā)送給指定的hart,該過程沒有仲裁。

CLINT 占地面積小,可直接向 hart 提供軟件、定時器和外部中斷。CLINT 塊還保存與軟件和定時器中斷相關(guān)的內(nèi)存映射控制和狀態(tài)寄存器。

CLINT 優(yōu)先級和搶占

CLINT?具有固定的優(yōu)先級方案,但不支持給定特權(quán)級別內(nèi)的嵌套中斷(搶占)。然而,較高的特權(quán)級別可能會搶占較低的特權(quán)級別。CLINT?提供兩種操作模式,直接模式向量模式。

直接模式下,所有中斷和異常都會捕獲到?mtvec.BASE。

向量模式下,異常trap到?mtvec.BASE,但中斷將直接跳轉(zhuǎn)到它們的向量表索引。

CLINT向量表

CLINT向量表如下:

CLINT 向量表填充有跳轉(zhuǎn)指令,因?yàn)橛布紫忍D(zhuǎn)到向量表中的索引,然后再跳轉(zhuǎn)到處理程序。所有異常類型都trap到表中的第一個條目是?mtvec.BASE。

下面是CLINT 向量表的示例:

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ?


CLINT 中斷源

下圖是CLINT 中斷 ID:

CLINT中斷屬性

為了幫助提高保存和恢復(fù)上下文的效率,可以將中斷屬性應(yīng)用于用于中斷處理的函數(shù)。

此屬性將保存和恢復(fù)處理程序中使用的寄存器,并在處理程序的末尾插入一條?mret?指令。

CLINT內(nèi)存映射

下圖是U54 內(nèi)核上 CLINT 的內(nèi)存映射:

注意,在 CLINT 內(nèi)存映射中沒有用于特定中斷的啟用位,因?yàn)檫@些中斷的啟用位于每個中斷的?mie CSR?和?mstatus.mie?CSR 位中,它全局啟用所有機(jī)器中斷.

相關(guān)寄存器

MSIP Registers

機(jī)器模式軟件中斷是通過寫入內(nèi)存映射控制寄存器?msip?來生成的。

msip?寄存器是一個 32 位寬的 WARL 寄存器,其中高 31 位綁定為 0。最低有效位反映在 mip CSR 的?MSIP?位中。msip?寄存器中的其他位被硬連線為零。復(fù)位時,每個?msip?寄存器都清零。

軟件中斷對于多 hart 系統(tǒng)中的處理器間通信最有用,因?yàn)?harts 可能會寫入彼此的 msip 位以影響處理器間中斷。

軟件中斷其實(shí)更多的用于多核之間,也就是所謂的核間通信。

Timer Registers

與timer有關(guān)的寄存器主要是兩個:mtimemtimecmp

mtime?是一個 64 位讀寫寄存器,包含從?rtc_toggle?信號計數(shù)的周期數(shù)。

只要?mtime?大于或等于?mtimecmp?寄存器中的值,定時器中斷就會掛起。定時器中斷反映在 mip 寄存器的 mtip 位中。

復(fù)位時,mtime?清零。mtimecmp?不會重置。

特權(quán)模式委托

默認(rèn)情況下,所有中斷都會陷入機(jī)器模式,包括定時器和軟件中斷。

為了讓定時器和軟件中斷直接進(jìn)入管理員模式,定時器中斷和軟件中斷必須首先委托給管理員模式

原文作者:嵌入式Linux充電站



一文解析RISC-V SiFive U54內(nèi)核——中斷和異常的評論 (共 條)

分享到微博請遵守國家法律
吴忠市| 隆回县| 黑龙江省| 霍林郭勒市| 遵义市| 沽源县| 五寨县| 曲阳县| 花莲市| 德钦县| 麻城市| 长汀县| 陆川县| 靖边县| 莱芜市| 泗水县| 汝城县| 嘉祥县| 郴州市| 潼南县| 健康| 兴和县| 晋中市| 黄平县| 于都县| 浦东新区| 曲沃县| 土默特右旗| 古田县| 宾川县| 晋宁县| 齐齐哈尔市| 陇川县| 鹤岗市| 邓州市| 双辽市| 彰化市| 昂仁县| 峨眉山市| 万源市| 修水县|