Linux:进程(二)
创始人
2024-02-10 19:49:49
0

文章目录

  • 前言
  • 一、环境变量
    • 1.概念
    • 2.常见环境变量
    • 3.一个疑问
    • 4.通过系统调用获取或设置环境变量
  • 二、地址空间
    • 1.引入
    • 2.分页&进程地址空间
      • 1.页表
      • 2.写时拷贝
    • 3.为什么要有地址空间
  • 总结


前言

  今天我们继续学习进程相关知识。


一、环境变量

1.概念

  1. 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  2. 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找
  3. 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

2.常见环境变量

PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。

3.一个疑问

为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行?

  1. 执行程序前,系统会在特定路径下查找对应程序
  2. 而PATH的作用是辅助系统进程指令查找,PATH变量储存的就是可能存在指令或者程序的路径

也就是说,如果我们把自己程序所在路径加入环境变量PATH当中,就可以直接执行。
测试:

[wkj@VM-4-13-centos ~]$ export PATH=$PATH:/home/wkj/lesson8
[wkj@VM-4-13-centos lesson8]$ ll
total 36
-rw-rw-r-- 1 wkj wkj   77 Nov  7 18:22 makefile
-rwxrwxr-x 1 wkj wkj 8464 Nov 12 21:23 myproc
-rw-rw-r-- 1 wkj wkj  169 Nov 12 21:23 myproc.c
-rwxrwxr-x 1 wkj wkj 9616 Nov 12 19:44 mytest
-rw-rw-r-- 1 wkj wkj  243 Nov 12 19:43 mytest.c
[wkj@VM-4-13-centos lesson8]$ myproc
hello world,20905 
hello world,20905 
hello world,20905 

注意看,添加以后不需要./即可直接执行。
添加方法只在当前有用,退出登陆后不会保存,因此大家可以添加以下玩一玩,不用担心污染环境变量库。

4.通过系统调用获取或设置环境变量

#include 
#include 
int main()
{printf("%s\n", getenv("PATH"));return 0;
}

常用getenv和putenv函数来访问特定的环境变量。

tips:环境变量通常具有全局属性,可以被子进程继承下去

二、地址空间

我们经常在各个论坛看到类似以下的图片。
在这里插入图片描述

1.引入

#include 
#include 
#include 
int g_val = 0;
int main()
{pid_t id = fork();if(id < 0){perror("fork");return 0;
}
else if(id == 0){ //childprintf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);
}else{ //parentprintf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);
}sleep(1);return 0;
}

与环境相关,我们观察现象即可
parent[2995]: 0 : 0x80497d8
child[2996]: 0 : 0x80497d8

我们发现,输出出来的变量值和地址是一模一样的,很好理解呀,因为子进程按照父进程为模版,父子并没有对变量进行任何修改。可是将代码稍加改动:

#include 
#include 
#include 
int g_val = 0;
int main()
{pid_t id = fork();if(id < 0){perror("fork");return 0;
}
else if(id == 0){ //child,子进程肯定先跑完,也就是子进程先修改,完成之后,父进程再读取g_val=100;printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);
}else{ //parentsleep(3);printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);
}sleep(1);return 0;
}

与环境相关,我们观察现象即可
child[3046]: 100 : 0x80497e8
parent[3045]: 0 : 0x80497e8

怎么回事呢?地址一样,变量内容不一样,我接受不了哇!

我们可以得出以下结论:

  1. 变量内容不一样,所以父子进程输出的变量绝对不是同一个变量地址值是一样的,说明,该地址绝对不是物理地址。
  2. 在Linux地址下,这种地址叫做 虚拟地址。
  3. 我们在用C/C++语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理。
  4. OS必须负责将 虚拟地址 转化成 物理地址 。

2.分页&进程地址空间

1.页表

页表就是一个用于将虚拟地址转换为物理地址的工具。在 riscv32 中,如果 satp 的第 31 位为 1 ,则表示启用页表机制。在访问虚拟内存时(开启页表时只允许访问虚拟内存),内存管理单元 MMU(Memory Management Unit) 会用过页表将虚拟地址转换为物理地址,再进行访问。

在这里插入图片描述

2.写时拷贝

一个变量为什么可以标识不同的值?

父子进程各自在物理内存中,都有属于自己的变量空间,只不过在用户层用同一个变量(虚拟地址)来标识了。

3.为什么要有地址空间

  1. 凡是非法的访问或者映射,OS都可以设备到,并终止这个进程。
  2. 因为有地址空间、页表,在物理内存中,可以堆未来的数据进行任意位置的加载。
  3. 物理内存理论上可以进行任意位置加载,那么他很可能是乱序的。页表将虚拟地址和物理地址进行映射,内存分布可以有序化。

总结

以上就是今天要讲的内容啦。
在这里插入图片描述

相关内容

热门资讯

环境描写死气沉沉句子精选98... 环境描写死气沉沉句子 精选69句1. 教室中死气沉沉,同学们个个都泪流满面,惟有几位同学装作一脸苦笑...
一生能遇到的句子精选420句 一生能遇到的句子 精选63句1. 选择你所爱的,然后爱你所选择的。2. 你的温柔,我懂,你的疼爱,我...
诚信的句子 有关诚信的句子大全  诚信是一种美德,会让你更加完美。下面是小编整理的有关诚信的句子大全,欢迎阅读!...
时间过得快的搞笑句子精选26... 时间过得快的搞笑句子 精选132句1. 我们不可能都成为英雄。2. 要找出时间来考虑一下,一天中做了...
你好六月的优美句子 你好六月的优美句子(精选100句)  在学习、工作或生活中,大家都听说过或者使用过一些比较经典的句子...
怀念好句子大全要短的精选38... 怀念好句子大全要短的 精选35句1. 小学同学聚会能聚这么多人真的不容易,好怀念以前小的时候现在大家...
有哲理的唯美句子精选76句 有哲理的唯美句子 精选50句1. 池塘边的榕树上,还有知了在声声叫着;家门口的小路旁,还有小狗在快乐...
自我独特的个性签名 自我独特的个性签名(精选70句)  不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗...
人类破坏环境污染句子精选30... 人类破坏环境污染句子 精选64句1. 排放的气息,是乌云盖天的狂欢;森林的骤减,是沙漠扩展的心愿;灾...
繁体字情侣个性签名   繁体字情侣个性签名  1、討厭自己想刺猬一樣小心防備。討厭自己想小丑一樣假冒開心。  2、如果決...
抖音名字 抖音名字▼※目录※▼抖音名字(1-100个)抖音名字(101-200个)抖音名字(201-300个)...
爱情的经典个性签名 关于爱情的经典个性签名集锦  1、其实只要两个人幸福就好了,何必在乎别人的眼光和议论。  2、距离让...
女生爱情个性签名 女生爱情个性签名  永远都不好停止微笑,即使是在你难过的时候,说不定有人会正因你的笑容而爱上你。以下...
微信名字最好听的昵称(精选5... 微信名字最好听的昵称(精选500个)  一、什么是网名  网名指在网上使用的名字。由于网络是一个虚拟...
塘尾村 塘尾村广东省东莞市石排镇塘尾村塘尾村(广东省东莞市石排镇塘尾村)塘尾村位于东莞市石排内,古村以古围墙...
父亲节个性签名 父亲节个性签名  引导语:我不害怕前途再多挫折挣扎只是愧疚没能在家给你们报答。下面由yjbys小编与...
感情的个性签名 关于感情的个性签名80条  1、不是所有的牛奶都叫特仑苏,不是所有的喜欢都是爱。  2、如果你明明知...
此省人口排名中国第一,GDP... 此省人口排名中国第一,GDP排名中国第一,还是一座历史名城中国历代皇帝中,秦始皇绝对称得上千古一帝。...
开心的个性签名 关于开心的个性签名(通用150句)  开心,汉语词组,意指开露心意、坦诚相待,或者心情舒畅、快乐等。...
情侣签名 情侣签名30句  下辈子我一定要做个男的取个像我这样的女人。下辈子我一定要做个女的嫁个像我这样的男人...