深入Linux内核架构—内存管理(一)

释放双眼,带上耳机,听听看~!

内存管理是内核最复杂同时也是最重要的一部分。特点在于非常需要处理器和内核之间的协作。本章从技术方面讲解具体的实现。

一、概述

内存管理的实现涵盖了许多领域:

内存中的物理内存页的管理;

分配大块内存的伙伴系统;

分配较小块内存的slab、 slub和slob分配器;

分配非连续内存块的vmalloc机制;

进程的地址空间。

Linux内核一般将处理器的虚拟地址空间划分为两个部分。底部比较大的部分用于用户进程,顶部则专用于内核。虽然(在两个用户进程之间的)上下文切换期间会改变下半部分,但虚拟地址空间的内核部分总是保持不变。在IA-32系统上,地址空间在用户进程和内核之间划分的典型比例为3∶ 1。给出4 GB虚拟地址空间, 3 GB将用于用户空间而1 GB将用于内核。通过修改相关的配置选项可以改变该比例。但只有对非常特殊的配置和应用程序,这种修改才会带来好处。目前,只需假定比例为3∶ 1,其他比例以后再讨论。

可用的物理内存将映射到内核的地址空间中。访问内存时,如果所用的虚拟地址与内核区域的起始地址之间的偏移量不超出可用物理内存的长度,那么该虚拟地址会自动关联到物理页帧。这是可行的,因为在采用该方案时,在内核区域中的内存分配总是落入到物理内存中。不过,还有一个问题。虚拟地址空间的内核部分小于CPU理论地址空间的最大长度。如果物理内存比可以映射到内核地址空间中的数量要多,那么内核必须借助于

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索