Linux操作系统内存管理(笔记)

 

 

 

 

大空间分配:页分配器

小于页的分配:slab(伙伴系统)

 

LInux的内存分区:Linux支持多个内存节点,一个节点用node表示,节点的内存空间分为:DMA ,DMA32,ZONE_NORMAL,ZONE_HIGHMEM,ZONE_MOVABLE,ZONE_DEVICE这几个区域
    DMA区域:因为ISA总线的直接内存存取(DMA)处理器有一个严格的限制:他们只能针对RAM的前16M寻址,在具有大容量的现代32位计算机中,CPU不能直接访问所有的物理内存,因为线性地址空间太小
            所以DMA区域就是内存的0-16M的空间
    DMA32区域:适用于64位系统,如果纪要支持只能直接访问16M以下内存的设备,又要支持只能直接访问4GB以下内存的32位设备,那么必须使用DMA32区域
    ZONE_NORMAL:直接映射到内核虚拟地址空间的内存区域,直译为“普通区域”,意译为“直接映射区域”或“线性映射区域”。内核虚拟地址和物理地址是线性映射的关系,即虚拟地址 =(物理地址 + 常量)。
            是否需要使用页表映射?不同处理器的实现不同,例如ARM处理器需要使用页表映射,而MIPS处理器不需要使用页表映射
    ZONE_HIGHMEM:这是32位时代的产物,内核和用户地址空间按1 : 3划分,内核地址空间只有1GB,不能把1GB以上的内存直接映射到内核地址空间,把不能直接映射的内存划分到高端内存区域。
            通常把DMA区域、DMA32区域和普通区域统称为低端内存区域。64位系统的内核虚拟地址空间非常大,不再需要高端内存区域
这是ARM架构的区域:
    x86的内存区域为
    ZONE_DMA        0~15MB
    ZONE_NORMAL        16MB~895MB
    ZONE_HIGHMEM    896MB~物理内存结束
对于高端内存:896M-1024M这一段作为内核空间,需要通过映射到1G-4G这一段物理空间来达到访问大于1G地址内存的目的
    而对于64位系统,因为可以线性映射的区域达到了512G,是完全可以不用高端内存的,

之前一直有个问题:32位的内核和用户地址空间按1:3划分,内核地址空间只有1G,不能映射1G以上的内存,那么内核地址空间为什么要映射1G以上的内存呢,其实这里需要映射1G以上的内存,是因为内存的管理是需要交给内核的,他需要管理,那么他就需要维护映射关系,比如分配和回收,页表也是管理的一种方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值