64位内核内存 各段的作用说明

在这里插入图片描述


  • kernel 区域

start_kernel->paging_init->map_kernel会将内核镜像的各个段依次映射到该区域 ? !


  • vmalloc 区域

之前ARM32可以通过bootargs去控制vmalloc区域的大小,不知道64还有没


  • kasan shadow memory
  1. kasan:内存测试,发现use-after-free错误
  2. KASAN_SHADOW_START,KASAN影子内存的起始虚拟地址,大小为32TB。
  3. 为什么是32TB呢?因为KASAN通常使用1:8或1:16比例的内存来做影子内存,分别对应大小为256TB/8=32TB或256TB/16=16TB,这里表示的是1:8的情况所以是32TB。

  • fixmap区域
  1. 其对应的物理地址不必是线性地址减__START_KERNEL_map
  2. fixmap区域是内核地址空间中的一段特殊区间,这段区间在编译时指定,也就是说是代码中写死的(不是动态分配的)
  3. 在内核启动后,根据需要通过set_fixmap接口修改相应线性地址映射的物理地址(也就是修改相应的页表项),从而使相应线性地址可以动态映射到新的物理地址,
  4. 类似于动态分配内存的概念,与vmalloc类似,只是vmalloc的线性地址是动态分配的,而fixmap区域是编译时指定的、静态的。

从目前的代码看,主要有两个用途:

  1. 用于kprobe之类的工具,作为探测点的实现方式,通过修改在内核运行过程中动态修改内核代码段中的数据,从而实现实现跳转,或类似的内核运行流的控制。
  2. 在ioremap()可用之前(内核初始化的前期阶段),通过fixmap区域提供512个临时的boot-time mappings,在early_ioremap()中使用。

由于fixmap区域也需要动态修改地址映射,所以相应的TLB entry在地址映射修改后也需要及时刷新,所以,在修改fixmap区域的地址映射后会进行相应的TLB flush操作。

TLB flush && fixmap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值