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

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

一、概述

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

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

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

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

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

进程的地址空间。

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

可用的物理内存将映射到内核的地址空间中。访问内存时,如果所用的虚拟地址与内核区域的起始地址之间的偏移量不超出可用物理内存的长度,那么该虚拟地址会自动关联到物理页帧。这是可行的,因为在采用该方案时

你可能感兴趣的:(深入Linux内核架构)