一.环境变量
1.概念:系统用于定义环境运行的变量
2.查看环境变量
. env:查看全部环境变量
. echo $xxx:查看一个指定环境变量的内容
3.PATH是系统搜索指令的默认搜索路径
PAT=$PATH:路径 :可将指定路径添加到默认路径下
4.环境变量的名称=内容
5.理解环境变量:bash在系统中查看环境变量,bash进程启动后会形成一张环境变量表
6.环境变量最初从配置文件中获取
7.多种环境变量
. ehco $HOME:当前登录用户的主目录路径
. echo $SHELL:当前用户登录的shell解释器的路径
注:当注销并重新登陆后,SHELL会反映新的默认shell
. echo $USER:当前用户的路径
. echo $HISTSIZE:展示历史命令行数(至多1000行)
. echo $HOSTNAME:当前登录的主机名
. echo $PWD:当前工作路径
8.获取环境变量的方法
操作:
. export xxx=yyy:导入xxx环境变量
注:export命令叫做内建命令,他在执行的时候不会创建子进程,而是由bash亲自执行
. unset xxx:取消xxx环境变量
注:环境变量可以被子进程继承,环境变量在系统中通常具有全局性
<1>bash获取
<2>getenv("xxx"):函数获取指定环境变量的内容
<3>extern char** environ:使用声明,其中environ 是一个指向字符指针数组的指针,这个数组包含了当前进程的环境变量。
二.程序地址空间
1.程序的地址空间是虚拟地址
2.一个进程就有一个虚拟地址空间,一套页表(虚拟地址,物理地址,权限)
注:页表的作用是建立虚拟地址和物理地址映射关系,保证可通过进程的虚拟地址找到它应该在内存上的物理地址
3.虚拟地址本质上就是一个数据结构,在OS里就是mm_struct结构体,里面存储各个区域的起始和结束地址
4.为什么要有虚拟地址空间和页表?
<1>将地址从无序变得有序(通过页表的映射关系)
<2>转化地址的过程中,对地址和操作的合法性进行判断,从而保护物理内存(通过页表的权限栏查询,是否由进行某种操作的权限)
<3>让进程管理和内存管理进行一定程度的解耦合
5.如何理解进程具有独立性?
<1>内核结构具有独立性
<2>加载进入内存的代码和数据具有独立性
补:创建进程时先有task_struct,mm_struct等内核数据结构,对于进程可以不加载代码和数据,只有task_struct,mm_struct,页表等