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判断存储访问失效的全过程。
存储器相关文章:存储器原理
评论