内核内存分配--关于高内存

Linux物理内存分为三个管理区, 分别0-16MB的ZONE_DMA, 16-896MB的ZONE_NORMAL以上896MB的ZONE_HIGHMEM这是高内存.

至于为什么这样分, ZONE_DMA很好理解, 因为ISA公交车只能到前16MB进行DMA寻址, 这块要分出来不能乱用. 而ZONE_NORMAL和ZONE_HIGHMEM为什么从896MB区分呢? 这还得从物理地址和虚拟地址说起.

默认情况下, 内核空间是指3GB-4GB的虚拟地址, 用户空间则是0-3GB. 内核进程和用户进程分别活动在自己的空间内. 这里重点说内核空间, 3G-(3G+896MB)这块是直接映射, 减去PAGE_OFFSET(0xC000000)就是真实物理地址, 剩下那128MB(4G-3G-896MB)是用来做各种映射的, 包含整个高端内存的映射, 假设不留出这么一段做映射, 内核就仅仅能管理1G的物理内存, 余下部分就仅仅能浪费了.

这里有个小难点. 有人会问, “假设剩下那些映射给用户空间, 内核不就能够无论了么, 高端内存也就不须要了吧?” 此言差矣, 点出来也就是一句话的事儿: 用户空间的内存使用也是内核分配的, 内核当然要有能力控制全部硬件资源.

PS: 以上都是基于x86架构, x86_64没有高内存, 一些MIPS32从默认的处理器高内存256MB开始.

版权声明:本文博客原创文章,博客,未经同意,不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值