C++--问题23--进程调度

C++--问题23--进程调度


进程调度:    

      CPU在每个系统滴答(Tick)中断产生的时候,检查就绪队列里面的进程(遍历链表中的进程结构体),如有符合调度算法的新进程需要切换,保存当前运行的进程的信息(包括栈信息等)后挂起当前进程,选择新的进程运行,这就是进程调度。

       一般把调度算法分为两类:非抢占式调度算法和抢占式调度算法。

非抢占式调度算法挑选一个进程,然后让该进程运行直到被阻塞,或者直到该进程退出,才会调用另外一个进程,也就是说不会因为时钟中断改变调用。

抢占式调度算法挑选一个进程,然后让该进程只运行某段时间,如果在该时段结束时,该进程仍然在运行时,则会把它挂起,接着调度程序从就绪队列挑选另外一个进程。这种抢占式调度处理,需要在时间间隔的末端发生时钟中断,以便把 CPU 控制返回给调度程序进行调度,也就是常说的时间片机制

常见的非抢占式:先来先服务(First Come First Severd, FCFS)算法,最短作业优先(Shortest Job First, SJF)调度算法

常见的抢占式:时间片轮转(Round Robin, RR)调度算法

假设进程来的顺序以及所需CPU时间如下:

(1)先来先服务算法

执行的顺序就是:先来后到原则

(2)最短作业优先算法

执行顺序:谁时间短谁先

(3)时间片轮转调度算法

执行顺序:给定一个适当的时间片,轮着来。加入时间片是2,注意在执行P4的时候有1个单位时间被浪费。

(4) 高响应比优先调度算法

         把响应比优先级最高的进程投入运行。

根据比率:R=(W+S)/S(R为响应比,W为等待处理的时间,S为预计的服务时间)

等待处理的时间 + 预计的服务时间 = 周转时间

     比率 = 周转时间 / 预计的服务时间

影响因素:

        如果两个进程的等待时间相同时,要求的服务时间越短,响应比就越高,这样短作业的进程容易被选中运行;

        如果两个进程要求的服务时间相同时,等待时间越长,响应比就越高,这就兼顾到了长作业进程,因为进程的响应比可以随时间等待的增加而提高,当其等待时间足够长时,其响应比便可以升到很高,从而获得运行的机会。

(5)最高优先级调度算法

        对于多用户计算机系统,它们希望调度是有优先级的,即希望调度程序能从就绪队列中选择最高优先级的进程进行运行,这称为最高优先级调度算法

进程的优先级可以分为,静态优先级或动态优先级:

        静态优先级:创建进程时候,就已经确定了优先级了,然后整个运行时间优先级都不会变化;

        动态优先级:根据进程的动态变化调整优先级,比如如果进程运行时间增加,则降低其优先级,如果进程等待时间(就绪队列的等待时间)增加,则升高其优先级,也就是随着时间的推移增加等待进程的优先级

该算法也有两种处理优先级高的方法,非抢占式和抢占式:

         非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程。

         抢占式:当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行。

缺点:可能会导致低优先级的进程永远不会运行。

(6)多级反馈队列调度算法

多级反馈队列调度算法是时间片轮转算法和最高优先级算法的综合和发展。

顾名思义:

多级表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。

反馈表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列。

工作步骤:

(6.1)设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短。

(6.2)新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成。

(6.3)当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行。

转载图片,更好理解:

对于短作业,可能可以在第一级队列很快被处理完。对于长作业,如果在第一级队列处理不完,可以移入下次队列等待被执行,虽然等待的时间变长了,但是运行时间也会更长了,所以该算法很好的兼顾了长短作业,同时有较好的响应时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值