目录:
- 进程的调度算法
- task_struct结构体
- 模拟实现僵尸进程,孤儿进程
- 《深入理解计算机系统》虚拟内存
- 《操作系统精髓设计原理》进程
- 使用setenv,export等环境变量
1.进程的调度算法
1> 时间片轮转调度算法(RR)
2>先来先服务调度算法(FCFS)
3>优先级调度算法(HPF)
4>多级反馈队列调度算法
5>高响应比优先调度算法
概念:进程就是运行起来的程序,(用户层面)
从操作系统的层面理解进程:pcb就是进程,程序运行需要将代码数据加载到内存中,在操作系统的层面进程就是操作系统对一个运行中的程序的描述,这个描述信息就做:PCB(进程控制块)
CPU分时机制:对程序处理进行切换调度处理
时间片:CPU在每个程序上所运行的这段时间
2.task_struct结构体
Linux下是【struct task_struct结构体--->pcb】
3.进程状态
Linux下的进程状态:
R运行状态:
S睡眠状态
D磁盘休眠状态
T停止状态
X死亡状态
Z僵死状态
僵尸进程:处于僵死状态的进程--->导致资源泄露【僵死状态会以终止状态在进程表中,并且会一直在等待父进程读取退出状态代码】
僵死状态产生原因:子进程先于父进程退出,因为要保留退出原因,因此操作系统不能直接释放所有资源,通知父进程获取退出原因 ,允许操作系统释放资源,但是父进程没有关注这个通知消息导致子进程退出后无法释放所有资源,处于僵死状态成为僵尸进程。
僵尸进程的危害:资源泄露
如何避免:进程等待
处理方式:退出父进程【避免产生僵尸进程】
孤儿进程(Z):父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程。
守护进程/精灵进程:是特殊的孤儿进程
4.环境变量
环境变量:存储系统运行环境参数的变量
查看环境变量:env(显示所有的环境变量) set(显示本地定义的shell变量和环境变量) echo(查看指定环境变量)
设置环境变量:export(设置一个新的环境变量) 删除环境变量:unset
创建环境变量:HOME PWD SHELL PATH
环境变量的特性:全局特性(父子进程之间的继承关系,父进程设置了子进程的环境变量)
shell终端下所运行的进程能够获取到所有的环境变量,但是获取不到普通变量
环境变量在代码中的获取:
main函数的三个参数: int main(int argc,char* argv[],char* env[])
(声明全局变量):extern char* environ ;
函数: putenv getenv char* getenv(char* name)
【定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明】
环境变量的应用场景:通常是父进程通过给子进程设置环境变量来向子进程传递数据的功能
~bye~