Linux 内存管理 | 物理内存、内存碎片、伙伴系统、SLAB分配器

本文详细介绍了Linux内核中的内存管理,包括物理内存的三个区域:ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。文章重点讨论了内存分配过程中遇到的外部碎片和内部碎片问题,以及如何通过伙伴系统和SLAB分配器来解决这些问题。伙伴系统通过将内存分组为11个链表,有效管理不同大小的内存块,减少外部碎片。SLAB分配器则针对小块内存分配,通过缓存池机制,提高内存分配效率并减少内部碎片。
摘要由CSDN通过智能技术生成


物理内存

在Linux中,内核将物理内存划分为三个区域。

在解释DMA内存区域之前解释一下什么是DMA:

DMA(直接存储器访问) 使用物理地址访问内存,将数据从一个地址空间复制到另外一个地址空间,从而加快磁盘和内存之间数据的交换,不经过MMU(内存管理单元),这时CPU可以去干别的事,大大增加了效率。

  • DMA内存区域(ZONE_DMA): 包含 0M~16M 之内的内存页框,该区域的物理页面专门供I/O设备的DMA使用,DMA需要连续的缓冲区,为了能够提供物理上连续的缓冲区,必须从物理地址空间专门划分一段区域用于DMA。
  • 普通内存区域(ZONE_NORMAL): 包含 16MB~896M 以上的内存页框,可以直接映射到内核空间中的直接映射区。
  • 高端内存区域(ZONE_HIGHMEM): 包含 896M 以上的内存页框,不可以进行直接映射,可以通过 高端内存映射区中的永久内存映射区 以及 临时内存映射区(固定内存映射区中的一部
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

·Jormungand

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

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

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

打赏作者

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

抵扣说明:

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

余额充值