【Linux系统编程】环境变量,进程地址空间与进程控制
缺页中断:使用虚拟地址通过页表查看物理地址,虚拟地址合法,但是物理地址找不到,操作系统此时会将代码和数据加载到内存中,并填充页表,进程就可以继续运行了。其中mm_struct中还包含struct vm_area_struct*的链表,来管理堆空间(因为堆可能有多个),或者管理其他空间。写时拷贝:父子进程将数据部分的权限设置为只读,当某一个进行写的时候,操作系统就会识别出需要进行写时拷贝。每个程序都
- 环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性。
2,常见环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登录到Linux系统中时,默认的⽬录)
- SHELL : 当前Shell,它的值通常是/bin/bash。
3,查看环境变量的方法
echo $NAME //NAME:你的环境变量名称
4,和环境变量相关的命令
- echo: 显⽰某个环境变量值
- export: 设置⼀个新的环境变量
- env: 显⽰所有环境变量
- unset: 清除环境变量
- set: 显⽰本地定义的shell变量和环境变量
5,环境变量的组织方式
每个程序都会收到⼀张环境变量表,环境变量表是⼀个字符指针数组,每个指针指向⼀个以’\0’结尾的字符串。

6,通过系统调用获取和设置环境变量
常⽤getenv和putenv函数来访问特定的环境变量。
代码语言:javascript
AI代码解释
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%s\n", getenv("PATH"));
return 0;
}
7,环境变量通常具有全局性
环境变量通常具有全局属性,可以被子进程继承下去。
二,进程地址空间/虚拟地址空间

分页&虚拟地址空间

缺页中断:使用虚拟地址通过页表查看物理地址,虚拟地址合法,但是物理地址找不到,操作系统此时会将代码和数据加载到内存中,并填充页表,进程就可以继续运行了。
写时拷贝:父子进程将数据部分的权限设置为只读,当某一个进行写的时候,操作系统就会识别出需要进行写时拷贝。
野指针:通过虚拟地址查找物理地址时,找不到。
其中mm_struct中还包含struct vm_area_struct*的链表,来管理堆空间(因为堆可能有多个),或者管理其他空间。
三,进程控制
1,进程创建
在 linux 中 fork 函数是非常重要的函数,它从已存在进程中创建⼀个新进程。新进程为子进程,而原进程为父进程。
代码语言:javascript
AI代码解释
include <unistd.h>
pid_t fork(void);
//返回值:⼦进程中返回0,⽗进程返回⼦进程id,出错返回-1
进程调用 fork ,当控制转移到内核中的 fork 代码后,内核做:
- 分配新的内存块和内核数据结构给子进程
- 将父进程部分数据结构内容拷贝至子进程
- 添加子进程到系统进程列表当中
- fork 返回,开始调度器调度
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)