本文主要是介绍处理机调度——进程调度/作业调度算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在多道程序系统中,主存中有着多个进程,其数目往往多于处理机数目,这就要求系统能按照某种算法,动态地将处理机分配给就绪队列中的某个进程,使之执行。
对于批量型作业而言,通常需要经历作业调度(又称为高级调度或长程调度)和进程调度(又称为低级调度或短程调度)两个过程后方能获得处理机;对于终端型作业,通常只需要经过进程调度即可获得处理机。
高级调度的对象是作业,作业和进程是不同的东西。 作业是一个更为广泛的概念,作业不仅包含了通常的程序和数据,还应该包含一份作业说明书,系统根据说明书来对程序的运行进程控制。
进程调度:是指对处于就绪状态的多个进程,按照一定的策略选出一个进程使之从就绪状态变成执行状态,真正获得CPU来运行程序。
进程调度方式:
1.非抢占式:采用这种调度方式时,一旦处理机分配给某个进程后,不管该进程运行多长时间,都会让它一直运行下去,不会因为其他原因而抢占正常运行进程的处理机。
引起原因:
1)正在执行的进程执行结束,或因某个原因该进程不再执行。
2)该进程执行过程中因为提出I/O请求而暂停执行。
3)在进程通信或同步过程中执行了某个原语操作,如P操作。
2.抢占式:这种调度方式允许调度程序按照某种原则去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另外一个进程。
引起原因:
1)优先权原则。当一些优先权较高的进程或作业到达时,正在执行的进程会停止,调度程序将处理机分配给优先权更高的进程。
2)短作业(进程)优先原则。当新到达的进程或作业比正在执行的进程或作业执行时间短,调度程序将处理机分配给短进程。
3)时间片原则。各进程按照时间片轮流运行,当前时间片用完之后,该进程便停止执行,调度程序进程重新调度。
调度算法
作业调度:FCFS、SJF、高优先权优先、高响应比优先
进程调度:FCFS、SJF、高优先权优先、时间片轮转
1.先来先服务(FCFS)调度算法
该算法根据名字就很好理解,先来后到,始终选队首进程(作业),进程获得CPU,直至执行完毕或发生某个等待事件,释放CUP。
该调度算法有利于长进程(作业),不利于短进程(作业)。
2.短作业(进程)优先(SJF)调度算法
和FCFS类似,只是在进行选择的时候,从后备队列中选择一个运行时间最短的进程(作业)。
该调度算法不利于长进程(作业),也没有考虑到进程的紧迫程度。
3.高优先权优先调度算法
1)静态优先级 调度算法:进程创建时被赋予优先级,而且在进程的运行过程中保持不变,优先级最高的进程率先被调度,优先级相同的进程采用FCFS调度算法
2)动态优先级 调度算法:进程创建时赋予优先级,但是优先级在运行过程中可以改变,以便获得更好的调度性能。 优先级最高的先被调度,优先级相同的进程采用FCFS调度算法。
4.高响应比有限调度算法
优先权 = (等待时间 + 要求服务时间)/ 要求服务时间
从上面的式子可以看出:
1)当作业的等待时间相同时,如果要求服务的时间越短,优先权越大,所以该算法更有利于短作业。
2)当作业的要求服务时间相同时,等待时间越长,优先权越高,此时它实现的是FCFS。
3)对于长作业而言,作业的优先级可以随着等待时间的增加而提高,,当期等待时间达到一定程度时,其优先级也能提升到很高,从而也能获得处理机。
5.时间片轮转调度算法
每个进程按照先进先出的原则进入就绪队列,每次调度时,调度程序将CPU分配给队首的进程,让其执行一个时间片q,该进程运行完时间片q后,有以下几种情况:
1)该进程执行完毕,调度下一个进程运行
2)该进程未执行完,进程执行被时钟中断,排到就绪队列队尾,特别注意:如果这个时候有一个新到达的进程,则刚才时间片用完的进程排在新到达进程的后面。然后调度就绪队列中的下一个进程执行。
3)该进程I/O等原因而被阻塞,该进程进入阻塞队列,调度就绪队列的下一个进程执行,等该进程被解封后,再从阻塞队列进入就绪队列队尾。
这篇关于处理机调度——进程调度/作业调度算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!