高优先权优先调度算法及程序实现


进程调度算法大致可分为先来先服务(FCFS),短作业优先(SJF/SPF),时间片轮转(RR)和优先级算法。这一节,我们主要来分析一下优先级算法的优劣并通过程序实现。
高优先权优先调度可分为:
非抢占式优先权
基本原理:系统把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直到完成;或因发生某时间使该进程放弃处理机时,系统才可将处理机重新分配给另一优先权最高的进程。
抢占式优先权
基本原理:系统把处理机优先权最高的进程,使之执行。若在其执行期间,只要又出现另一个优先权更高的进程,则立即停止当前进程的执行,重新分配处理机给新来的优先权更高的进程。
优先权类型:
静态优先权
静态优先权是在创建进程的时确定的,且在进程的整个运行期间保持不变。
动态优先权
是指在创建进程时确定的优先权,在进程的运行期间会发生变化。

为了解决低优先级的进程在优先级调度算法中的不公平处理,我们对优先级调度算法进行改进提出了高响应比优先调度算法。
高响应比优先调度算法
高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。
该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:
响应比 =(等待时间+要求服务时间)/ 要求服务时间即:RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。
优缺点:
优点:等待时间相同的作业,则要求服务的时间愈短,其优先权愈高,——对短作业有利要求服务的时间相同的作业,则等待时间愈长,其优先权愈高,——是先来先服务 长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可升到很高, 从而也可获得处理机——对长作业有利,是一种折衷,既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。
缺点:要进行响应比计算,增加了系统开销

算法思想:
非抢占式优先权:
①首先也是按进程的到达时间进行排序。让最先到达的进程尾插进入。②当容器不空时,从尾部取出一个进程来执行,直至此进程执行完,设置一个变量记录此进程执行过程中所有到达的进程。③将这些到达的进程依次尾插入容器中,然后对容器中的进程按优先级排序。(只排当前进程执行期间到达的进程)④此时也要考虑如果容器为空,但进程数组中仍存在未到达的进程,这时将要到达进程加入进程就绪队列。

抢占式优先权:
①首先也是按进程的到达时间进行排序。让最先到达的进程尾插进入。②当容器不空时,从尾部取出一个进程来执行。③如果在执行期间没有其他进程到达,则将当前进程运行完毕;如果在执行期间有新的进程达到,则需要记录下当前进程运行了多少时间,并更新当前时间,然后把新到达的进程加入到容器里面,接着把容器里面存在的进程按照优先级排序④此时也要考虑如果容器为空,但进程数组中仍存在未到达的进程,这时将要到达进程加入进程就绪容器。

优先级抢占核心代码
来到例题看看结果:

非抢占:

程序运行结果:

抢占:

程序运行结果:
