进程优先级
进程优先级是一个进程对于cpu资源获取的优先权
存在优先级的原因:
交互式进程:直接与用户进行交互的进程 (要求能被cpu优先处理)
批处理进程:在后台有周期性循环工作的进程
优先级的作用:让操作系统运行的更加良好
优先级就是一个数值,数值越小优先级越高。
操作系统如何调度进程
创建一个能容下140个进程的队列,每个队列都有相应的下标,下标就是进程的优先级,数值越小优先级越高。创建一个bitmap整形数组,一个有160个bit位,用来存储对应位置的进程是否存有pcb块,操作系统可以根据是否存在pcb块来快速调用进程,而不需要每次调度都要判断下一个进程是否存在pcb块。操作系统还将这两个数组复制了一遍,active指针指向的队列进程,当时间片结束就会转到expire指针指向的队列中进行排队。当expire指向的队列满时就和active交换指向,依次循环调度active指针指向的队列中进程。这种算法也叫作多级反馈调度算法
时间复杂度O(1)
环境变量
环境变量就是配置系统运行环境参数的变量
配置环境变量的好处:使系统运行环境配置更加简单灵活;可以通过设置环境变量给一个进程传递参数信息
例如:修改执行的默认路径
修改前要执行一个可执行文件的命令是:./test
;
修改执行默认路径为当前目录:PATH=${PATH}:./
修改后执行一个可执行文件的命令是:test
环境变量的操作
env
查看环境变量
set
查看所有变量,包含环境变量
echo
查看单个变量内容 echo valName
export
设置变量为环境变量 export valName
unset
删除环境变量 unset valName
main函数的第三个参数 int main(int argc, char *argv[], char *env[])
env用来保存环境变量
通过一个全局变量 extern char **environ
; (extern声明一个变量,这个变量实际上已经在其他地方定义了) environ保存了所有可以访问的环境变量的地址
char *getenv(const char *name)
通过环境变量名称获取一个指定环境变量的数据
特性:子进程会默认继承父进程的环境变量
如何在Makefile中获取环境变量?
在Makefile中输入以下代码
test:
echo ${PATH}
执行命令make test