一、虚拟内存地址
对应于上图的两端,其中 0 - 3G 是用户区 ,3 - 4G 是内核区。编码的内存地址都是虚拟地址。
在3G到4G之间是PCB 进程控制块。从3G到0依次为:
(1)命令行参数 和 环境变量。
(2)stack 栈区(生长方向:高地址到地址)。
(3)共享动态库。
(4)heap 堆区(生长方向:低地址到高地址)。
(5).bss 未初始化数据区。
(6).data 初始化数据区。
(7).text 代码区。
(8)0~4K 首保护地址。
其中:
(1)命令行参数: argv[i]
(2)环境变量:
PATH: linux 系统命令所在的路径;
SHELL:使用的 shell;
LANG 语言;
HOME:家目录;
(3)输出环境变量:echo $env。
(4)获取环境变量: char *getenv(const char *name)
返回值:返回环境变量的值;
若失败则返回NULL (name 不存在)。
二、MMU:内存管理单元
作用:
(1)虚拟内存和物理内存的映射。
(2)设置虚拟内存的访问级别:linux 内核访问级别是 0,用户访问 级别是 3。