环境变量: 保存运行环境参数的变量, 使程序运行环境配置更加灵活, 以及可以通过环境变量实现进程间的小量通信(父子进程的传递)
操作命令: env-查看环境变量, set-查看指定变量, export-设置环境变量, unset-删除环境变量
典型环境变量: 程序的默认搜索路径---在命令行终端输入命令名称可以直接执行对应名称的命令程序,实际上是因为shell捕捉到输入的命令名称之后, 然后去PATH环境变量指定的路径下去找这个程序, 找到了就运行, 找不到就报命令没有找到
PATH=$PATH:./ 将当前的目录加入到./中
环境变量接口:
char *getenv(const char *name)---通过名称获取值
程序地址空间:
实际在进程中, 访问地址(变量地址)实际上是一个假地址, 称为虚拟地址.
我们所说的程序地址空间实际上叫做进程的虚拟地址空间, 虚拟地址空间实际上是系统给进程描述的一个假的地址空间, 是一个mm_struct结构体, 并且每个进程都有自己独立的虚拟地址, 也就是有自己的mm_struct内存描述.
系统会为每一个进程都描述一个假的地址空间, 进程访问的都是虚拟地址, 访问内存数据的时候, 先将虚拟地址转换为物理地址然后访问
系统为每一个进程都描述了一个完整的, 连续的, 线性的虚拟地址空间, 实际物理内存用的时候再给进程分配, 这样的话,对于每一个进程自己的感觉, 看起来都是一块完整的, 连续的内存可以使用.
给每个进程虚拟一个地址空间, 让进程访问完整连续的地址, 但这些虚拟地址在使用的时候通过页表映射一块物理内存地址, 进行访问物理内存. 通过映射的这种方式, 实现了数据在物理内存上的离散式存储, 提高内存的利用率.
虚拟地址如何通过页表获取到物理地址的?
内存管理房方式:
分段式内存管理: 将地址空间分为多段(代码段, 数据段......), 便于编译器进行地址管理
分段式虚拟地址组成: 段号+段内的地址偏移量; 在系统中有一个段表: 一个个段表项(段号, 物理内存起始地址)

分页式内存管理: 将地址空间分为多个小块(页), 提高内存利用率,
分页式虚拟地址组成: 页号+页内偏移; 在系统中有一个页表(页号, 物理内存块起始地址,权限控制,缺页中断位)

段页式内存管理: 将虚拟地址空间进行分段, 在每个分段内进行分页式管理, 集合了分段分页的优点进行内存管理.

浙公网安备 33010602011771号