PMP 和 Paging
物理內(nèi)存保護(hù)機(jī)制旨在與 RISC?V 指令集手冊(cè),第二卷:特權(quán)架構(gòu),版本 1.10 中描述的基于頁(yè)面的虛擬內(nèi)存系統(tǒng)組合。啟用分頁(yè)后,訪問(wèn)虛擬內(nèi)存的指令可能會(huì)導(dǎo)致多次物理內(nèi)存訪問(wèn),包括對(duì)頁(yè)表的隱式引用。PMP 檢查適用于所有這些訪問(wèn)。隱式頁(yè)表訪問(wèn)的有效特權(quán)模式是管理員模式。
允許使用虛擬內(nèi)存的實(shí)現(xiàn)以推測(cè)方式執(zhí)行地址轉(zhuǎn)換,并且比顯式虛擬內(nèi)存訪問(wèn)所需的時(shí)間更早。可以在地址轉(zhuǎn)換和顯式虛擬內(nèi)存訪問(wèn)之間的任何時(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)同步。這是通過(guò)在寫(xiě)入 PMP CSR 后執(zhí)行 rs1=x0 和 rs2=x0 的 SFENCE.VMA 指令來(lái)實(shí)現(xiàn)的。
如果未實(shí)現(xiàn)基于頁(yè)面的虛擬內(nèi)存,或者當(dāng)它被禁用時(shí),內(nèi)存訪問(wèn)會(huì)同步檢查 PMP 設(shè)置,因此不需要 fence。
PMP 限制
在包含多個(gè) hart 的系統(tǒng)中,每個(gè) hart 都有自己的 PMP 設(shè)備。hart 上的 PMP 權(quán)限不能應(yīng)用于多 hart 系統(tǒng)中其他 hart 的訪問(wèn)。此外, SiFive 設(shè)計(jì)可能包含一個(gè)前端端口,以允許外部總線主控器訪問(wèn)系統(tǒng)的完整內(nèi)存映射。PMP 無(wú)法阻止前端端口上的外部總線主控器的訪問(wèn)。
沒(méi)有 PMP 保護(hù)的區(qū)域的行為
如果內(nèi)存映射的非保留區(qū)域沒(méi)有應(yīng)用 PMP 權(quán)限,則默認(rèn)情況下,管理員或用戶模式訪問(wèn)將失敗,而機(jī)器模式訪問(wèn)將被允許。
訪問(wèn)設(shè)備內(nèi)存映射中的保留區(qū)域(例如中斷控制器)讀取時(shí)將返回 0x0,寫(xiě)入將被忽略。在沒(méi)有 PMP 保護(hù)的情況下訪問(wèn)設(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ǔ)訪問(wèn)錯(cuò)誤異常,如果沖洗包括受保護(hù)的線路的任何部分。緩存刷新指令執(zhí)行無(wú)效和回寫(xiě),因此它實(shí)際上是在嘗試寫(xiě)回受保護(hù)的內(nèi)存位置。
如果緩存刷新發(fā)生在未受保護(hù)的部分行上,刷新將成功并且不會(huì)產(chǎn)生異常。如果需要在沒(méi)有回寫(xiě)的情況下刷新數(shù)據(jù)高速緩存,請(qǐng)改用高速緩存丟棄指令,因?yàn)檫@會(huì)使該行無(wú)效但不會(huì)回寫(xiě)。
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1468瀏覽量
42877 -
內(nèi)存
+關(guān)注
關(guān)注
9文章
3210瀏覽量
76373 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4835瀏覽量
73731 -
PMP
+關(guān)注
關(guān)注
0文章
45瀏覽量
18715 -
RISC
+關(guān)注
關(guān)注
6文章
485瀏覽量
86605 -
sifive
+關(guān)注
關(guān)注
0文章
37瀏覽量
9783
發(fā)布評(píng)論請(qǐng)先 登錄
管理STM32 MCU中的內(nèi)存保護(hù)單元
STM32H750在使能內(nèi)存保護(hù)后啟用cache導(dǎo)致SPI+DMA傳輸不準(zhǔn)確怎么解決?
STM32H750使能內(nèi)存保護(hù)后DMA異常的原因?怎么解決?
RTThread支持內(nèi)存保護(hù)功能嗎?
如何為MPC5744P配置內(nèi)存保護(hù)單元?
Armv8-M內(nèi)存模型與內(nèi)存保護(hù)用戶指南
如何管理STM32產(chǎn)品中的內(nèi)存保護(hù)單元(MPU)
為什么要使用MPU?MPU如何實(shí)現(xiàn)內(nèi)存保護(hù)?
應(yīng)用筆記|管理STM32 MCU中的內(nèi)存保護(hù)單元
為什么要使用MPU?MPU如何實(shí)現(xiàn)內(nèi)存保護(hù)?
什么是MPU?MPU在哪些方面保護(hù)內(nèi)存安全?
如何管理STM32產(chǎn)品中的內(nèi)存保護(hù)單元(MPU)
PMP物理內(nèi)存保護(hù)介紹
評(píng)論