【操作系统---7】进程调度算法和僵尸、孤儿进程模拟实现

进程的调度算法:

<1>先来先服务调度算法(FCFS,first come first served):

谁第一个排队,谁就先被执行,在它执行过程中,不会中断它

<2>短作业优先调度算法(SJF,shortest job first):

对预计执行时间短的进程有限分配处理机,通常后来的短进程不会抢先正在执行的进程;
对长进程非常不利,可能长时间得不到执行

<3>最高响应比优先法(HRRN,highest response radio next):

对于FCFS和SJF的平衡,FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF只考虑了执行时间而未考虑等待时间的长短,因此两种算法在某种极端的情况下会带来某些不便

HRRN通过综合这两种情况算出响应比R,根据响应比完成调度

优点:长作业也有机会投入运行
缺点:每次调度前要计算响应比

<4>时间片轮转法(RR,Round-Robin):

采用剥夺方式,每个进程被分配一个时间段,按照在队列中的顺序交替执行;不利于处理紧急作业

<5>多级反馈队列(multilevel feedback queue):

UNIX使用这种调度算法;进程在进入待调度的队列等待时,首先进入优先级最高的Q1中等待;
首先调度优先级高的队列中的进程;若高优先级队列中已经没有调度的进程,则调度次优先级队列的进程;
同一队列中的各个进程按照时间片轮转调度;
低优先级队列中的进程在运行时,又有新到达的作业,运行完这个时间片后,CPU马上分配给新到达的作业(剥夺)

task_struct结构体:

在这里插入图片描述

pcb中的一些描述信息: 

	内存指针		指向程序代码在内存中的位置
	
	程序计数器	上下文数据---程序下次执行的指令,存储程序的数据
	
	标识符PID
	
	进程状态		描述程序是否在运行
	
	进程优先级	cpu资源的优先分配权---避免急需响应的程序卡顿
	
	IO状态信息
	
	记账信息		记录程序运行的时间

进程的信息可以通过系统的/proc文件夹查看:

在这里插入图片描述

代码模拟实现僵尸进程, 孤儿进程:

僵尸进程:

子进程先于父进程退出,操作系统保存着退出原因导致操作系统无法回收资源,通知父进程获取退出原因,允许操作系统释放资源,但是父进程没有关注这个通知导致进程退出后无法释放所有资源,处于僵死状态变为僵尸进程

代码实现:

在这里插入图片描述
在这里插入图片描述
进程状态:

在这里插入图片描述

杀掉子进程之后:

在这里插入图片描述

孤儿进程:

父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程变为1号进程sysytemd

在这里插入图片描述

杀死父进程之后:
在这里插入图片描述

环境变量特性:

全局特性(父子进程之间的继承关系,父进程设置了子进程的环境变量)

shell创建的process程序,所需要的环境变量都是bash给予的

代码中操作环境变量:

main函数中的第三个参数  int main(int argc,char* argv[],char* env[])

exten char** environ

函数 char * getenv putenv  setenv

修改PATH效果图:

设置环境变量PATH前:

在这里插入图片描述

设置环境变量PATH后:

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值