OS环境变量

1.进程上下文概念

并行 多个CPU,同一时间多个CPU运行多个进程

并发 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进

进程调度的算法有很多种,有一种是基于进程切换,基于时间片轮转的调度算法,每个进程上处理机运行会有一个时间片的概念,等到时间片一到,进程下处理机就会去waitqueue等待,直到runqueue的进程运行完毕,才会去waitqueue拿进程上处理机

进程在被切换的时候

1.保存上下文(下处理机的进程离开CPU时,将上下文数据保存,便于下一次上处理机恢复上下文,也就是保存CPU中寄存器的值,如果用软件的方式实现,可以将寄存器内容封装为struct保存到PCB,但是这样太慢了,一般结合硬件实现)

2.恢复上下文(上处理机的进程)

CPU内部的寄存器

eip就是PC,存储下一条指令的地址

寄存器存在的意义是提高效率,高频出现的信息会放到寄存器中,保存进程临时数据(上下文),进程对其访问或修改

函数返回值作为局部变量被拿到就是通过寄存器

2.环境变量

环境变量是系统提供的一组name, value形式的变量,不同的用户有不同的环境变量

见见猪跑

2.1 PATH

Linux下指令默认搜索路径

我们可以看到自己写的可执行程序proc不能通过直接在命令行输入proc运行,而要通过./proc来运行,但是ll等指令就可以通过指令对应的可执行程序名称来运行,为什么呢?这就和PATH有关系了,命令行输入的指令,默认系统会在PATH里面找,而我们写的程序不在这些路径下,所以必须通过路径来运行

我们可以通过echo $PATH打印,也可以把我们写的·程序放在PATH下(root才有的权限),就可以输入proc来运行了

也可以把当前路径加入PATH,proc也可以直接运行


PATH=可以直接更改PATH(我的机子退出重启Xshell也会保留上一次对PATH进行的更改)

如果更改PATH为当前目录,很多命令都用不了了

Windows下查看环境变量如下,一般Java, Python等解释型语言,在安装编译器/解释器的时候需要配置PATH

2.2 HOME

查看家目录


SHELL

ENV

SSHTTY是终端,root可以通过终端名称直接向guchen用户的终端写入,但是普通用户不可以向root写入

也有OLDPWD,我们使用cd -进入上一次在的路径,就是通过这个实现的

使用man getenv查看getenv

超级用户和普通用户的权限和USER有关,包括文件权限随用户身份不同,权限不尽相同

2.3 main函数参数

main函数也是有参数的,main函数被startup/CRTstartup函数调用,用来实现指令、工具、软件等的选项

因为argv[i]是以nullptr为结束标志,所以循环结束条件也可以是argv[i]

argv是向量表

Windows下的指令和选项举例

通过main函数参数查看环境变量

两种核心向量表,argv命令行参数表,env环境变量表


这时候proc作为bash的子进程继承了父进程的环境变量MY_VALUE

可以用unset取消环境变量,子进程继承于父进程的MY_VALUE也会随之不复存在

set可以查本地变量(只在本bash内部有效,不会被子进程继承)和环境变量(具有全局属性)

命令行格式,u是用户,h是主机名,W是当前工作目录

PS2表征续航符

运行的进程都是bash的子进程,bash启动的时候会从配置文件读取环境变量信息,子进程继承父进程的环境变量信息

本地变量不会被子进程继承

getenv获取指定的环境变量

但是echo如果是一个进程,作为bash的子进程,也不应该继承本地变量MY_VALUE,为什么还能打印呢?这是因为echo不是进程,是内建命令(类似C++的内联函数),由bash执行自行实现或者调用系统提供的函数


cd -

man chdir

cd -的实现大概如下

man environ



牛刀小试

  1. 使用shell时,默认的环境变量放在哪里
    A.~/.bash_profile
    B.~/.bash
    C./etc/profile.d
    D.~/bash

A

  1. 以下哪些命令可以查看环境变量 [多选]
    A.echo
    B.env
    C.set
    D.export

ABC

  1. 以下描述正确的有 [多选]
    A.子进程默认会复制拥有与父进程相同的环境变量
    B.环境变量使shell运行环境配置变的更加复杂
    C.环境变量可以使用export命令设置
    D.删除一个环境变量可以使用unset和rm命令

AC

相关推荐
Y1rong2 小时前
linux之TCP
linux
浩瀚之水_csdn2 小时前
avcodec_parameters_copy详解
linux·人工智能·ffmpeg
33三 三like2 小时前
高精度计算
开发语言·c++·算法
头发那是一根不剩了2 小时前
Linux 常用服务器命令
linux·运维·服务器
sycmancia2 小时前
C++——二阶构造模式
c++
锅包一切2 小时前
二、几种安装类型
linux·运维·后端·操作系统
vortex52 小时前
详解Linux磁盘相关命令:从基础查看到底层运维
linux·运维
敲代码的哈吉蜂2 小时前
Haproxy
linux·运维·服务器
敲代码的哈吉蜂2 小时前
haproxy的算法——混合算法
linux·运维·服务器·算法