目录

Linux进程调度切换_命令行参数上

Linux:进程调度切换_命令行参数(上)

一.进程退出:

1.释放代码和数据

2.将退出信息(任务完成情况)保存在task_struct内(int code…..)

3.task_struct被维护,给父进程管理

进程创建时,先创建数据结构,再加载代码和数据,退出顺序是反的

如果进程退出前父进程已经没了,会给操作系统进程管理(systemd)

子进程退出,父进程不接收他的退出信息,子进程处于僵尸状态,造成内存泄漏(Z状态一直不退出,PCB一直不释放(必须给父进程退出信息))

https://i-blog.csdnimg.cn/direct/d85c4991a5994b608436f1019479f12c.png

https://i-blog.csdnimg.cn/direct/e14ceffbc4ec4cf7acec8784cdfe2098.png

二.进程优先级

意义:获得计算机资源的先后顺序,计算机资源有限,排优先级可以提高效率

表示:PCB内几个int型变量表示新的PRI=PRI(旧)+nice值                          (越小优先级越高)

默认PRI为80,nice值可调【-20,19】,总PRI范围[60,99]

关联:进程PCB内有UID记录启动人,(linux一切皆文件,所有操作都是进程操作,可以通过UID判断对应文件的拥有者,所属组。。。判断权限)

查看:ps -la

修改:1.指令:top 指令进入后按r,输入pid和nice值

2.系统调用(不常用,调优先级会影响其他进程)

三.进程切换

https://i-blog.csdnimg.cn/direct/a5c7c9f9e2f64e8a92f6cfaa03126dd0.png

https://i-blog.csdnimg.cn/direct/091e6975c85f4c64b2f2ccac7624647f.png

上下文:

https://i-blog.csdnimg.cn/direct/229a4f0f3c9344fe97270a85dba4b306.png

2.切换过程(核心:怎么保存和恢复上下文)

问题:一个进程的时间片到了,切换置另一个进程,寄存器值被覆盖。但重新排队到它,上下文数据怎么恢复(程序从哪执行(PC值和IR值),寄存器内值怎么恢复(内存中的部分没人动))

答:做保护:时间片到了将寄存器的值放入内存中操作系统的tss段内( 可理解为放入PCB内,老内核tss在PCB中 ),重新排到此进程再加载恢复。

四,进程调度

意义:解决一个进程时间片完了调哪个进程的问题。

问题:很老的内核是FIFO,一个链表拿头节点。但没用优先级,用了优先级又要遍历插入,效率低。

答:linux的调度算法: https://i-blog.csdnimg.cn/direct/f8db1f7f07e548d5aedffbcff80a545b.png

解释了为什么优先级PRI值范围只有40