Linux内存管理(6):单页内存和非连续多页内存映射(基于分页映射)

34 篇文章 0 订阅 ¥299.90 ¥99.00

         前面说的基于伙伴系统的SLAB/SLUB内核内存对象管理系统具有一个重要特点就是基于线性映射。从某种意义上讲,基于线性映射的内存管理是有局限的,其中最大的一个局限就是只能利用常规内存(比如ZONE_NORMAL、ZONE_DMA)。对于没有提前建立映射的ZONE_HIGHMEM管理区的高端内存却无能为力,为了利用高端内存,只能使用基于分页映射的内存管理。需要注意的是分页映射不仅可以用于管理高端内存,也同样可以用于管理常规内存(内核虚拟地址空间的映射有线性映射和分页映射二种)。

        基于分页映射额内存管理有二大类:第一类是单页内存管理(又包括持久内核映射和临时内核映射[也叫固定内核映射]);第二类是非连续多页内存管理。

        严格来讲只有非连续内存管理才是真正基于分页映射的;而持久内核映射和临时内核映射只有在启用高端内存(CONFIG_HIGHMEM,意味着拥有ZONE_HIGHMEM管理区)的系统上才是基于分页映射的,否则是基于线性映射的。在32位的系统上一般才会启用高端内存,因此也可以简单理解为单页内存管理只有在32位的内核中才基于分页映射,在64位内核中是基于线性映射的。

 一、持久内核映射

        持久内核映射用于建立一个页帧到内核虚拟地址的长期映射,它可能引起睡眠,因此只能在进程上下文中使用。页帧是预先从伙伴系统中分配出来的,但分配的时候可能没有拿到虚拟地址,因此需要建立或者解除虚拟地址到物理地址的映射/关联。

        持久内核映射的API有二个,分别用于映射和解映射 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张帅峰_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值