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