Page Table


  • 学习AXI总线时涉及到4KB边界,网上搜到的资料是与Page有关,没有了解过相关知识,补习一下。

1. 虚拟内存地址和物理地址

1.1 为什么CPU要使用虚拟内存地址映射物理地址

  • 便于管理,程序可以使用虚拟内存连续的地址空间管理物理内存中不相邻的地址空间;
  • 方便进程之间的隔离,提高安全性。每个进程有一段私有的,连续的,完整的内存空间。进程A代码无法更改进程B使用的物理内存;
  • 虚拟内存空间远大于实际物理内存大小,进程可以使用更多的内存空间。
    • 考虑当剩余物理内存变少时,内存管理器会将物理内存页(大小通常为4KB)保存到磁盘空间中,根据需要在物理内存和磁盘之间进行移动。

1.2 MMU(Memory Management Unit)

  • 完成虚拟内存到物理内存映射的硬件为:内存管理单元。
    • MMU 借助存放在内存中的页表来动态翻译虚拟地址,MMU需要知道页表在内存中的地址。

1.3 TLB(Translation Lookaside Buffer)

  • 前面介绍虚拟地址和物理地址的映射关系存在页表中,常见的页表配置为4级。
    • 查找需要一级一级找下去,而4级的页表查找需要4次内存访问。
  • TLB实际上为一块高速缓存,缓存虚拟地址和其映射的物理地址。
    • 首先给TLB一个虚拟地址,确认是否命中cache,如果命中则可以直接获得物理地址;
    • 否则还是需要一级一级查找,查找到后再将虚拟地址和物理地址的映射关系缓存到TLB中。
  • 虚拟地址映射到物理地址过程如下所示

1.4 内存中的页表

  • 首先考虑,页表会有多大?
    • 只考虑一个寄存器,64bit,那么可以遍历到的地址也有2^64这么多,如果以地址为粒度管理,那么所有内存都会被这个页表占满。
    • 实际上,是一个page对应页表中的一个条目,一般来说一个page为4KB,相当于以page为粒度进行管理。
    • 主要有两个参数用于查找虚拟内存,一个是index,用于确定在哪个page里;还有一个是offset,确定对应的是page中的哪个字节。
    • 使用对应的PPN(44 bits)和 offset进行拼接得到的物理地址。其中PPN中包含的是page的物理地址。
  • RISC-V 处理器中页表管理
    • 64bit寄存器实际上只用了39bit,大概有512GB虚拟内存地址,如果有更多虚拟内存需要可以使用高25bits。
    • 上图中的page table最多有2^27个条目,如果每个进程都有一个这么大的,那么会很快的消耗掉物理内存。
    • 实际上page table为多级,27bit可以划分成3个9bit,依级查找。

2. 与AXI 4KB的关系

  • 回到问题,AXI提出的4KB边界,是为了防止突发传输跨页,而且一般从机的地址单位也为4KB.
  • 关于AXI的内容可以看分类

只是简单学习,如有问题,请指正!!

posted @ 2023-06-08 15:26  可达达鸭  阅读(67)  评论(0编辑  收藏  举报