【Linux】环境变量&进程虚拟地址空间

环境变量

使用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的虚拟空间,当进程真正需要保存数据或者申请内存的时候,再让操作系统给进程分配空间,这样就比较合理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值