文章目录 0. 参考资料 1.1 进程线性地址空间划分 1.2 x86 体系架构下的两种硬件约束 1.3 应对硬件约束的方法 0. 参考资料 https://www.zhihu.com/questio
文章目录
- 0. 参考资料
- 1.1 进程线性地址空间划分
- 1.2 x86 体系架构下的两种硬件约束
- 1.3 应对硬件约束的方法
0. 参考资料
1.1 进程线性地址空间划分
在 32 位操作系统中,最大可寻址范围为 4G,这就意味着虚拟地址空间(线性地址空间)有 4G,进程地址划分方式是:0~3G用户空间、3~4G内核空间,用户进程最多只可以访问3G线性地址空间。
1.2 x86 体系架构下的两种硬件约束
1.3 应对硬件约束的方法
将内存区域进行划分,划分为三个管理区间:
区域
ZONE_DMA
低于16MB的内存空间
ZONE_NORMAL
16MB~895MB
ZONE_HIGHMEM
896MB~4G
内核和应用程序在访问内存时,都是操作线性地址,“均需要”借助MMU实现对应物理内存地址的映射。
对于内核来讲,前两个区域直接通过 -3G 的方式实现对应到物理内存地址的目的 —— 毕竟这样最快!(Linux 规定这样的直接映射范围最大为 896MB)。那么 ZONE_HIGHMEM 区域怎么办? 用户空间怎么进行转换?
针对 ZONE_HIGHMEM 区域还进行了如下划分,划分为了三个区域:
更具体一点,如下图所示,小区域之间有安全区分隔:
- 64位中为什么不存在高端内存?
若机器安装的物理内存超过内核地址空间范围(超过896MB,32位高端内存范围是3G+896MB~4G,64位可支持超过512TB的内核地址空间范围),就会存在高端内存。
- Linux对内存的管理分为三个层次:Node、Zone、Page三个层次
层次
说明
Node(存储节点)
CPU被划分成多个节点,每个节点都有自己的一块内存,可以参考NUMA架构有关节点的介绍
Zone(管理区)
每一个Node(节点)中的内存被划分成多个管理区域(Zone),用于表示不同范围的内存
Page(页面)
每一个管理区又进一步被划分为多个页面,页面是内存管理中最基础的分配单位
————————————————