Linux 内核 内存管理虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )
Posted 韩曙亮_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )相关的知识,希望对你有一定的参考价值。
文章目录
一、虚拟地址空间布局架构
在 64 64 64 位的 Linux 操作系统中 , " ARM64 架构 " 并 不支持 64 64 64 位的虚拟地址 , 最大只支持 48 48 48 位的虚拟地址 , 64 64 64 位地址太大 , 并不需要那么大的内存空间 ;
" ARM64 架构 " 中 , Linux 系统的 " 内核虚拟地址 “ 与 ” 用户虚拟地址 " 是等同的 ;
- 用户虚拟地址 :
0x 0000 0000 0000 0000
~0x 0000 FFFF FFFF FFFF
, 48 位有效地址 ; - 内核虚拟地址 :
0x FFFF 0000 0000 0000
~0x FFFF FFFF FFFF FFFF
, 48 位有效地址 ;
二、用户虚拟地址空间划分
Linux 操作系统 进程 的 " 用户虚拟空间 " 起始地址 为 0 0 0 ;
" 用户虚拟空间 " 的大小为 TASK_SIZE
, 该值与 处理器 架构 有关 , 不同的处理器 , 定义的 TASK_SIZE
宏不同 ;
- 32 位处理器定义的
TASK_SIZE
宏为TASK_SIZE_32
, 该值为0x100000000 字节 , 大约 4GB ;
- 64 位处理器定义的
TASK_SIZE
宏为TASK_SIZE_64
该值为2VA_BITS 字节 ;
在 Linux 内核源码的 LINUX-4.12\\arch\\arm64\\include\\asm\\memory.h#86 中 , 定义了 TASK_SIZE
与 TASK_SIZE_64
宏 ;
VA_BITS
是编译内核时 , 选择的 " 虚拟地址空间 " 的地址位数 ,
TASK_SIZE
与 TASK_SIZE_64
宏 相关源码如下 :
/*
* PAGE_OFFSET - the virtual address of the start of the linear map (top
* (VA_BITS - 1))
* KIMAGE_VADDR - the virtual address of the start of the kernel image
* VA_BITS - the maximum number of bits for virtual addresses.
* VA_START - the first kernel virtual address.
* TASK_SIZE - the maximum size of a user space task.
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area.
*/
/* CONFIG_COMPAT */
源码路径 : LINUX-4.12\\arch\\arm64\\include\\asm\\memory.h#86
以上是关于Linux 内核 内存管理虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理虚拟地址空间布局架构 ⑦ ( Linux 内核地址空间布局简介 )
Linux 内核 内存管理虚拟地址空间布局架构 ⑤ ( Linux 内核中对 “ 虚拟地址空间 “ 的描述 | task_struct 结构体源码 )
Linux 内核 内存管理虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )
Linux 内核 内存管理Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )