Linux 内核空间地址映射 高端内存 总结
2017-06-25 18:07
423 查看
内核空间映射到物理内存是从最低地址0x00000000开始,如下图所示
假设内核地址空间的简单线性地址转换关系为:物理地址 =
虚拟地址–
0xC0000000,内核虚拟地址空间对应的物理内存范围0x00000000~0x40000000,只有1G,显然不合理。
内核地址空间划分3部分:ZONE_DMA(16M)、ZONE_NORMAL(16~896M)和ZONE_HIGHMEM(896~1024M)。
ZONE_DMA、ZONE_NORMAL线性映射属于线性映射区,高端内存ZONE_HIGHMEM(0xF8000000~0xFFFFFFFF)动态映射属于vmalloc区,高端内存又分为几部分分别采用vmalloc、固定、临时映射(不详述了)。
内核想访问高于896M的物理地址时,从0xF8000000~0xFFFFFFFF虚拟地址空间中取一部分与想要访问的物理内存建立映射即填充内核PTE页表(内核页表),访问完成之后内核释放0xF8000000~0xFFFFFFFF中的虚拟地址空间,以便其它进程访问,如下图。(采用这128M的虚拟空间,建立临时地址映射,完成了对所有高于896M物理内存的访问)
假设内核地址空间的简单线性地址转换关系为:物理地址 =
虚拟地址–
0xC0000000,内核虚拟地址空间对应的物理内存范围0x00000000~0x40000000,只有1G,显然不合理。
内核地址空间划分3部分:ZONE_DMA(16M)、ZONE_NORMAL(16~896M)和ZONE_HIGHMEM(896~1024M)。
ZONE_DMA、ZONE_NORMAL线性映射属于线性映射区,高端内存ZONE_HIGHMEM(0xF8000000~0xFFFFFFFF)动态映射属于vmalloc区,高端内存又分为几部分分别采用vmalloc、固定、临时映射(不详述了)。
内核想访问高于896M的物理地址时,从0xF8000000~0xFFFFFFFF虚拟地址空间中取一部分与想要访问的物理内存建立映射即填充内核PTE页表(内核页表),访问完成之后内核释放0xF8000000~0xFFFFFFFF中的虚拟地址空间,以便其它进程访问,如下图。(采用这128M的虚拟空间,建立临时地址映射,完成了对所有高于896M物理内存的访问)
相关文章推荐
- linux 内存映射 remap_pfn_range操作(内核地址映射到用户空间)
- Linux用户空间与内核空间(理解高端内存)
- linux 用户空间与内核空间——高端内存详解
- Linux用户空间与内核空间(理解高端内存)
- 全面解析Linux 内核 3.10.x - 内存管理 - 高端地址的内核映射
- linux 用户空间与内核空间——高端内存详解
- linux 用户空间与内核空间——高端内存详解
- linux 用户空间与内核空间——高端内存详解
- Linux用户空间与内核空间内存映射
- [Linux内存管理] linux内存布局的内核实现--用户空间的映射方式
- linux 用户空间与内核空间——高端内存详解
- linux 高端内存页框管理:永久内核映射、临时内核映射以及非连续内存分配
- linux 用户空间与内核空间——高端内存详解
- linux 用户空间与内核空间——高端内存详解
- linux 用户空间与内核空间——高端内存详解
- 【Linux开发】linux设备驱动归纳总结(五):1.在内核空间分配内存
- linux 用户空间与内核空间——高端内存详解
- linux 用户空间与内核空间 (高端内存详解)
- linux 内核空间 及 高端内存详解
- Linux用户空间与内核空间(理解高端内存)【转】