【Linux】环境变量进程虚拟地址空间
环境变量&进程虚拟地址空间
- 环境变量
- 一些常见的环境变量-PATH
- 修改环境变量
- 进程虚拟地址空间
环境变量
使用ls man pwd cd echo
这些指令时,不需要加./
但是要运行我们自己的可执行程序就需要加上,本质上两个都是指令,为什么执行方法不同?
是由于环境变量在其中做了手脚
当使用操作系统指定的一些指令时,操作系统会通过环境变量来找到需要运行的代码,这样就不需要指定路径了
一些常见的环境变量-PATH
PATH:是可执行程序的搜索路径,我们执行ls man pwd cd echo
不需要输入路径,就是由于PATH环境变量中已经保存了这些路径
如果想要查看当前PATHecho $[环境变量名称]
如果有一个程序需要经常运行,我们又不想在每次运行时都指定路径,那么就可以将这个路径放到PATH的路径下。
修改环境变量
注意:这里暂时以PATH举例
修改分为两种:临时修改和永久修改
临时修改:直接使用命令行
export PATH=$PATH:想要添加的目录路径
永久修改:需要找到PATH文件,然后进行修改
一个linux系统中,可以有多个用户
如果需要让修改的结果对每一个用户都生效,那么就需要切换到root用户下,用vim进入/etc/bashrc
,对PATH进行修改,但是不建议这样做。
建议只修改自己用户的PATH,用户级别的环境变量在自己用户的家目录下.bashrc和./bash_profile
vim ~/.bash_profile
这里有PATH的环境变量,通过:分割,就可以在里面添加自己的环境变量
注意:需要将xshell退出,重新进入登录才可以生效
环境变量的组织方式
环境变量是以字符指针数组的方式进行组织的,最后的元素以NULL结尾
进程虚拟地址空间
我们在写代码的时候,发现了这样一个Bug,子进程将val值修改后,父进程中看到的val竟然没有变化,并且val的地址还是指向的同一块空间,为什么相同空间内会出现两个值呢?
实际上是进程虚拟地址空间导致出现的这种现象,因为我们看到的地址并不是真实的物理内存地址,而是操作系统虚拟出来的一个虚拟地址。
这种虚拟地址是操作系统为每一个进程都分配的,大小为4g(在32位系统下),虚拟地址空间无法直接存储数据,当需要发生真实内存修改的时候,才会将虚拟内存和物理内存进行映射,来访问物理内存空间
操作系统为何不直接让进程访问物理内存,而是先虚拟一个虚拟地址空间呢?
直接访问物理内存,a进程是不知道当前的内存是否被使用的,这时候如果访问到了其他进程的空间,就会出现混乱,并且操作系统也不知道当前这个进程需要多大的内存空间,需要使用多久的内存空间,所以直接给进程4g的虚拟空间,当进程真正需要保存数据或者申请内存的时候,再让操作系统给进程分配空间,这样就比较合理