当前位置: 首页 > article >正文

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


http://www.kler.cn/a/7486.html

相关文章:

  • dpdk tm eth event驱动协同完成收发包流程
  • vue3【实战】切换全屏【组件封装】FullScreen.vue
  • 【机器学习导引】ch6-支持向量机
  • 利用云计算实现高效的数据备份与恢复策略
  • 我的第一个PyQt5程序
  • ffmpeg视频编码
  • MySQL 索引常见问题汇总,一次性梳理
  • React 组件的 children 数据使用
  • Android 10.0 系统framework发送悬浮通知的流程分析
  • 在CentOS 7 中安装Hive-1.2.2
  • 【一起撸个DL框架】1 绪论
  • FPGA纯verilog实现UDP通信,三速网自协商仲裁,动态ARP和Ping功能,提供工程源码和技术支持
  • 多线程-模拟抢红包,抽奖池
  • 设计模式-day03
  • ChatGPT给自己写的科普性文章,你们认为写的怎样
  • echarts tooltip文字太长换行
  • Java多线程与并发
  • 把ChatGPT接入我的个人网站
  • Docker容器理解
  • Hadoop学习笔记(持续更新中)
  • Windows 元件
  • 剪格子
  • 映射的概念以及用法
  • 部署ChatGPT(在VPS或免费容器上),无需科学上网!
  • 区间dp算法刷题笔记【蓝桥杯】
  • 【MySQL每日七问】MySQL总结(一)