Linux内核地址空间

1.内核空间是由内核负责映射,它不会随着进程改变,是固定的。因为此时是在内核态的, 而所有进程的页面目录中与内核空间相对应的目录项都指向相同的页面表, 所以不管换上哪一个进程的页面目录都是一样的. 在内核空间的映射始终不会变. 

高端内存:物理内存896M以上的部分称之为高端内存。

2.内核空间分布


2.1直接映射区

从3G开始,最大896M的线性地址空间,我们称之为直接映射区,这个区域的线性地址和物理地址之间存在线性转换关系:线性地址 = 3G + 物理地址。

2.2动态映射区

该区域的地址分配是由vmalloc分配的,分配的是线性的虚拟地址,但对应的物理内存不一定连续。vmalloc分配的线性虚拟地址对应的物理页可能处于低端内存,也可能处于高端内存。

2.3永久内存映射区

对于896M以上的高端内存,可使用该区域来访问,访问方法:

1)使用alloc_page(__GFP_HIGHMEM)分配高端内存页。

2)使用kmap函数将分配的高端内存页映射到该区域。


2.4固定映射区

在上述的情况下,其映射关系是固定的。

*未完

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐