PMP 和 Paging
物理內(nèi)存保護(hù)機(jī)制旨在與 RISC?V 指令集手冊(cè),第二卷:特權(quán)架構(gòu),版本 1.10 中描述的基于頁(yè)面的虛擬內(nèi)存系統(tǒng)組合。啟用分頁(yè)后,訪問虛擬內(nèi)存的指令可能會(huì)導(dǎo)致多次物理內(nèi)存訪問,包括對(duì)頁(yè)表的隱式引用。PMP 檢查適用于所有這些訪問。隱式頁(yè)表訪問的有效特權(quán)模式是管理員模式。
允許使用虛擬內(nèi)存的實(shí)現(xiàn)以推測(cè)方式執(zhí)行地址轉(zhuǎn)換,并且比顯式虛擬內(nèi)存訪問所需的時(shí)間更早??梢栽诘刂忿D(zhuǎn)換和顯式虛擬內(nèi)存訪問之間的任何時(shí)候檢查結(jié)果物理地址的 PMP 設(shè)置。到不可執(zhí)行地址范圍的錯(cuò)誤預(yù)測(cè)分支不會(huì)生成陷阱。因此,當(dāng)以影響保存頁(yè)表的物理內(nèi)存或頁(yè)表指向的物理內(nèi)存的方式修改 PMP 設(shè)置時(shí),M 模式軟件必須將 PMP 設(shè)置與虛擬內(nèi)存系統(tǒng)同步。這是通過在寫入 PMP CSR 后執(zhí)行 rs1=x0 和 rs2=x0 的 SFENCE.VMA 指令來實(shí)現(xiàn)的。
如果未實(shí)現(xiàn)基于頁(yè)面的虛擬內(nèi)存,或者當(dāng)它被禁用時(shí),內(nèi)存訪問會(huì)同步檢查 PMP 設(shè)置,因此不需要 fence。
PMP 限制
在包含多個(gè) hart 的系統(tǒng)中,每個(gè) hart 都有自己的 PMP 設(shè)備。hart 上的 PMP 權(quán)限不能應(yīng)用于多 hart 系統(tǒng)中其他 hart 的訪問。此外, SiFive 設(shè)計(jì)可能包含一個(gè)前端端口,以允許外部總線主控器訪問系統(tǒng)的完整內(nèi)存映射。PMP 無(wú)法阻止前端端口上的外部總線主控器的訪問。
沒有 PMP 保護(hù)的區(qū)域的行為
如果內(nèi)存映射的非保留區(qū)域沒有應(yīng)用 PMP 權(quán)限,則默認(rèn)情況下,管理員或用戶模式訪問將失敗,而機(jī)器模式訪問將被允許。
訪問設(shè)備內(nèi)存映射中的保留區(qū)域(例如中斷控制器)讀取時(shí)將返回 0x0,寫入將被忽略。在沒有 PMP 保護(hù)的情況下訪問設(shè)備內(nèi)存映射之外的保留區(qū)域?qū)?dǎo)致總線錯(cuò)誤??偩€錯(cuò)誤可以使用總線錯(cuò)誤單元 (BEU) 對(duì) hart 產(chǎn)生中斷。
PMP 保護(hù)區(qū)的緩存刷新行為
當(dāng)一條線被帶入高速緩存并且 PMP 設(shè)置為斷言鎖定 (L) 位以保護(hù)該線的一部分時(shí),數(shù)據(jù)高速緩存刷新指令將生成存儲(chǔ)訪問錯(cuò)誤異常,如果沖洗包括受保護(hù)的線路的任何部分。緩存刷新指令執(zhí)行無(wú)效和回寫,因此它實(shí)際上是在嘗試寫回受保護(hù)的內(nèi)存位置。
如果緩存刷新發(fā)生在未受保護(hù)的部分行上,刷新將成功并且不會(huì)產(chǎn)生異常。如果需要在沒有回寫的情況下刷新數(shù)據(jù)高速緩存,請(qǐng)改用高速緩存丟棄指令,因?yàn)檫@會(huì)使該行無(wú)效但不會(huì)回寫。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40290 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3025瀏覽量
74054 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4509瀏覽量
70642 -
PMP
+關(guān)注
關(guān)注
0文章
45瀏覽量
18166 -
RISC
+關(guān)注
關(guān)注
6文章
462瀏覽量
83734 -
sifive
+關(guān)注
關(guān)注
0文章
36瀏覽量
9460
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論