图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

目录

  • MMIO 映射区原理

  • MMIO 映射区源码分析

  • MMIO 映射区使用场景

图片无法显示,请右键点击新窗口打开图片


MMIO 映射区原理

图片无法显示,请右键点击新窗口打开图片

CPU 物理地址总线能寻址的空间称为系统物理地址空间,内存条上的物理内存可以映射到系统物理地址空间上,形成系统物理内存。同理外设的内存也可以映射到系统物理地址空间,这部分区域称为 MMIO. 无论是系统物理内存还是 MMIO 区域在硬件上都可以被物理地址总线寻址到,对于开启分页(Paging)的系统,CPU 不能直接访问系统物理地址空间,只能直接访问虚拟内存, 那么对于 MMIO 区域来说,需要将虚拟内存映射到 MMIO 区域之后,CPU 才能访问 MMIO.

图片无法显示,请右键点击新窗口打开图片

Linux 内核提供了 IOREMAP 分配器用于从 MMIO 映射区分配虚拟内存,并负责建立虚拟内存到 MMIO 的页表,页表的粒度可以是 4KiB 的,也可以是 2MiB 粒度的,如果调用者申请的区域大于 PMD_SIZE,那么 IOREMAP 分配器优先创建 2MiB 粒度的页表. 与 VMALLOC 分配器类似,IOREMAP 分配器从 MMIO 映射区分配虚拟内存时都是从 free_vmap_area_root 红黑树上找到一块空闲的区域,然后将新分配的区域插入到 vmap_area_root 红黑树进行管理.

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片