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