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