2006年6月第2期 教学与科技
Linux的进程地址空间研究
蒋波李方军 邓豫蜀赵杨梅
(中国工程物理研究院工学院,四川绵阳,621900)
摘要本文研究了Linux进程的虚拟地址空间管理,包括页表结构、内存分配策略、线性地址区间结 构,线性地址到物理地址的映射等。 关键词进程; 线性地址; 用户模式; 内核模式
O引言
Linux从1991年问世至今已经历了许多版本,本文讨论在80x86平台上的Linux 2.6版本,80x86 微处理器把段和偏移组成的逻辑地址通过分段单元转换成线性地址,线性地址再通过分页单元被转换
成物理地址,线性地址也被称为虚拟地址,它是一个32位的无符号整数,它可以寻址多达4GB的存
储空间。
1物理内存布局
Linux 2.6采用Node节点、Zone区和Page页三级结构来描述物理内存,它支持非一致存储器访问
(Numa)模型,在这种模型中,给定CPU对不同存储器单元的访问时间可能不一样,系统的物理内
存被划分为几个节点,在一个单独的节点内,任一给定CPU访问页所需时间都是相同的。但在实际的
80x86体系结构中,IBM兼容PC使用一致存储器访问(Uma)模型,Numa并不真正被需要,整个物
理内存都被组织在一个单独的节点中。在这个节点内的物理内存被划分成三个Zone区:Zone—dma的
范围是内存的头16M,它是Isa dma可访问的区域;Zone—normal的范围是16M ̄896M,它是内核可
直接映射区域:Zone_highmem包含了高于896M的页帧。 80×86微处理器常规分页使用了两级页表:页目录表(位31~22)和页表(位21~12),从 PenfiumPro开始,微处理器地址引脚从32增加到36根,Intel引入了物理地址扩展(PAE)机制以把
32位线性地址转换为36位物理地址,PAE机制使用三级页表,32位线性地址被分成四部分:页目录
指针表PDPT(31 ̄30)、页目录表(29 ̄21)、页表(20 ̄-12)和页内偏移(11~0),三级页表的每一