ARM存儲器之:存儲管理單元MMU
引起存儲訪(fǎng)問(wèn)失效的存儲訪(fǎng)問(wèn)類(lèi)型如表15.32所示。
表中,對齊失效的編碼可以為0b0001或0b0011。
表15.32 存儲訪(fǎng)問(wèn)失效的存儲訪(fǎng)問(wèn)類(lèi)型
優(yōu)先級 | 引起存儲訪(fǎng)問(wèn)失效的原因 | 失效狀態(tài)字段 | 域字段 | 失效地址寄存器c6 | |
最高 | 極端異常(TerminalException) | 0b0010 | 無(wú)效 | 生產(chǎn)商定義 | |
中斷向量訪(fǎng)問(wèn)異常(VectorException) | 0b0000 | 無(wú)效 | 有效 | ||
地址對齊(Alignment) | 0b00x1 | 無(wú)效 | 有效 | ||
擴展地址變換失效(頁(yè)表訪(fǎng)問(wèn)失效) | 一級頁(yè)表 | 0b1100 | 有效 | 有效 | |
二級頁(yè)表 | 0b1110 | 無(wú)效 | 有效 | ||
地址變換失效 | 段失效 | 0b0101 | 無(wú)效 | 有效 | |
頁(yè)失效 | 0b0111 | 有效 | 有效 | ||
域控制失效 | 段失效 | 0b1001 | 有效 | 有效 | |
頁(yè)失效 | 0b1011 | 有效 | 有效 | ||
訪(fǎng)問(wèn)權限控制失效 | 段失效 | 0b1101 | 有效 | 有效 | |
頁(yè)失效 | 0b1111 | 有效 | 有效 | ||
基于Cache的外部存儲訪(fǎng)問(wèn)系統異常 | 段失效 | 0b0100 | 有效 | 有效 | |
頁(yè)失效 | 0b0110 | 有效 | 有效 | ||
最低 | 非Cache預取時(shí)外部存儲訪(fǎng)問(wèn)異常 | 段失效 | 0b1000 | 有效 | 有效 |
頁(yè)失效 | 0b1010 | 有效 | 有效 |
在域控制字段(bits[3:0])中存在無(wú)效值,是因為無(wú)效發(fā)生在域訪(fǎng)問(wèn)之前。
當不同的存儲訪(fǎng)問(wèn)類(lèi)型同時(shí)引起存儲訪(fǎng)問(wèn)失效時(shí),按照優(yōu)先級由高到低的次序,先保存優(yōu)先級高的存儲訪(fǎng)問(wèn)失效相關(guān)信息,在表中各存儲訪(fǎng)問(wèn)優(yōu)先級由上到下依次遞減。
圖15.36顯示了判斷存儲訪(fǎng)問(wèn)失效的全過(guò)程。
下面分別介紹各種類(lèi)型的存儲訪(fǎng)問(wèn)失效方式。
①極端異常(terminalexception)
極端異常指的是發(fā)生了不可恢復的存儲訪(fǎng)問(wèn)失效。具體屬于哪種情況,有生產(chǎn)商定義。
②中斷向量訪(fǎng)問(wèn)異常(vectorexception)
在數據訪(fǎng)問(wèn)周期,如果訪(fǎng)問(wèn)異常中斷向量表(地址0x0到0x1f)時(shí)發(fā)生存儲訪(fǎng)問(wèn)失效,這種存儲訪(fǎng)問(wèn)失效稱(chēng)為中斷向量訪(fǎng)問(wèn)異常。當MMU被禁止時(shí)是否產(chǎn)生中斷向量訪(fǎng)問(wèn)異常由生產(chǎn)商決定。
③地址對齊失效
在數據訪(fǎng)問(wèn)周期,如果訪(fǎng)問(wèn)字單元地址時(shí)地址bits[1:0]位不是0b00,或者訪(fǎng)問(wèn)半字單元時(shí)地址bits[0]位不是0b0,則產(chǎn)生的存儲訪(fǎng)問(wèn)失效稱(chēng)為地址對齊失效。在指令預取周期不會(huì )產(chǎn)生地址對齊失效。在數據訪(fǎng)問(wèn)周期,如果訪(fǎng)問(wèn)字節單位,不會(huì )產(chǎn)生地址訪(fǎng)問(wèn)失效。
④地址變換失效
有兩種類(lèi)型的地址變換失效。一種是基于段的地址變換失效,它指當一級頁(yè)表描述符的位bits[1:0]=0b00時(shí),表示該一級描述符頁(yè)表項無(wú)效,這時(shí)產(chǎn)生基于段的地址變換失效。第二種是基于頁(yè)的地址變換失效。當二級描述符的位bits[1:0]=0b00時(shí),表示該二級描述符頁(yè)表項無(wú)效,這時(shí)產(chǎn)生基于頁(yè)的地址變換失效。
圖15.36判斷存儲訪(fǎng)問(wèn)失效的全過(guò)程。
存儲器相關(guān)文章:存儲器原理
評論