虚拟地址到物理地址的转换
在ARM CPU中,最多会用到两级页表:以段(Section, 1MB)的方式进行转换时用到一级页表,以Page的方式进行转换时用到两级页表。也分为大页(64KB)、小页(4KB)和极小页(1KB)。条目也称为“描述符”(Descriptor)。有段描述符、大页描述符、小页描述符和极小页描述符 – 它们保存段、大页、小页、极小页的起始物理地址;粗页表描述符、细页表描述符—它们保存二级页表的物理地址。
(1) 根据给定的虚拟地址找到一级页表中的条目
(2) 如果此条目是段描述符,返回物理地址
(3) 否则此条目是二级页表描述符,继续利用虚拟地址在二级页表中找到下一个条目
(4) 如果第二个条目是页描述符,则返回物理地址,转换结束。
(5) 其他情况出错
7.1.4 TLB
从虚拟地址到物理地址的转换得知:使用一级页表进行地址转换时,每次读写数据需要访问两次内存;使用两级页表时,每次读写需要访问3次内存。高速、容量相对较小的存储起来存储近期用到的页表条目。“转译查找缓存”Translation Lookaside Buffers, TLB。如果TLB中不含有能转换这个VM的描述符,MMU访问页表找到描述符后再进行地址转换和权限检查,并将这个描述符填入TLB中。一般需要:在启动MMU之前Invalidate整个MMU,改变页表时,Invalidate所涉及的虚拟地址对应的TLB中的条目。
Cache hit; Cache miss
(1) 开启MMU前,使无效ICaches、DCaches和Write buffer
(2) 关闭MMU前,清空ICaches、DCaches,将脏的数据写到主存上
(3) 如果代码有变,使无效ICaches,这个CPU取指时会重新读取主存
(4) 如果DMA操作可以被Cache的内存时,将内存的数据发送出去时,要清空Cache;将内存的数据读入时,要使无效Cache
(5) 改变页表中地址映射关系时要慎重考虑
(6) 开启ICaches和DCaches,要考虑是否与主存一致
(7) 对于I/O地址空间,不使用Cache和Write buffer。如寄存器,非内存的外设