内存管理

内存管理是内核最复杂同时也最重要的一部分。器特点在于非常需要处理器和内核之间的协作。

3.1 概述
内存管理的实现涵盖了许多领域:
*内存中的物理内存也得管理
*分配大块内存的伙伴系统
*分配较小块内存的slab\slub和slob分配器
*分配非连续内存块的vmalloc机制。
*进程的地址空间
Linux内核一般讲处理器的虚拟地址空间划分为两个部分。地步比较大的部分用于用户进程,顶部则专用于内核。可用的物理内存将映射到内核的地址空间中。访问内存时,如果所有的虚拟地址与内核区域的起始地址之间的偏移量不超出可用物理内存的长度,那么该虚拟地址会自动关联到物理页帧。
注:只有内核自身使用高端内存页时,才会有问题。在内核使用高端内存之前,必须使用下文讨论的kamp和kunmap函数将其映射到内核虚拟地址空间中,对普通内存也这是不必要的,但对用户空间进程来说,是高端内存页还是完全没有任何差别。因为用户空间进程总是通过页表访问内存,却不会直接访问。
有两种类型计算机,分别以不同的方法管理物理内存。
(1)UMA计算机(一致内存访问,uniform memory access)将可用内存一连续方式组织。
(2)NUMA计算机(非一致内存访问,non-uniform memory access)总是多处理器计算机。系统的各个CPU都有本地内存,可支持特别快速的访问。各个处理器之间通过总线连接起来,以支持对其他CPU的本地内存的访问,当然比访问本地内存慢些。
内核会区分3中配置选项:FLATMEM、DISCONTIGMEM和SPARSEMEM.SPARSEMEM和DISCONTIGMEM实际上作用相同,但从开发者的角度看来,对应代码的质量有所不同。
真正的NUMA会设置配置选项GONFIG_NUMA,相关的把内存管理代码与上述两种变体有所不同。由于平坦内存模型在NUMA计算机上没有意义,只有不连续内存模型和稀疏内存模型是可用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值