进程的调度方式:
- 非抢占方式:在这种调度方式下,一旦把处理机分配给某个进程后,就会一直让它运行下去,绝不会因为时钟中断或任何其他原因去抢占当前正在运行进程的处理机,直到该进程完成,或者发生某事件而被阻塞时,才会放弃处理机,这样系统才能把 处理机分配给其他进程。
- 抢占方式:这种调度方式允许调度进程根据某种原则,去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程。
抢占方式也要遵循某种原则:
- 优先权原则
- 短进程优先原则
- 时间片原则
1、2两个原则就不做过多的介绍了,在之前的作业调度算法中已经给出了较为详细的介绍,这里就说一下时间片原则,即为各进程按时间片轮转运行时,当正在执行的进程对一个时间片用完后,便停止该进程的执行而重新进行调度。 调度算法: 1.轮转调度算法RR:基于时间片的进行轮转调度,即:让就绪队列上的每一个进程每次仅运行一个时间片,然后就切换到下一个进程。 在轮转(RR)中,系统根据FCFS策略,将所有就绪进程排成一个就绪队列,并可设置每隔一定时间间隔产生一次中断,激活系统中的进程调度,完成一次调度,将CPU分配给新的队首进程(或新到达的紧迫进程)。 进程的切换时机,有两种情况:
- 若一个时间片尚未用完,正在运行的进程便已经完成,则立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。
- 在一个时间片用完时,计时器中断处理程序被激活,如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
时间片大小的选择一定要合适,如果太长则变为了FCFS算法,太短的话进程切换太频繁。 具体过程: 具体过程: 2.优先级调度算法 有两种类型:非抢占式优先级调度算法,抢占式优先级调度算法 优先级分别静态优先级和动态优先级 静态优先级:事先给进程分配一个优先级 动态优先级:根据进程的等待时间以及其他因素来分配优先级 3.多级反馈队列 设置多个就绪队列,每个队列赋予不同的优先级。第一个队列优先级最高,第二个次之,其余的队列优先级依次降低。算法为,每个队列赋予的时间片的大小也不同,在优先级越高的队列时间片越短。 其中每个队列都采用FCFS算法,如果有一个新的进程到达则把它放到第一个队列末端,按照FCFS原则等待调度。如果在该时间片内该进程没有运行结束,则把它放到下一个优先级的队列末端进行等待,如果在时间片内进程运行结束,则运行调度算法执行下一个进程,如果该队列中没有进程可以调度,则进入下一个优先级的队列。 例如:如果处于第二队列的进程在使用处理机,那么当一个新的进程到达时则把它放到第一个队列中等到调度,当正在执行的进程时间片结束之后,如果没有运行结束则把该进程放到第三优先级的队列末尾,然后重新回到第一队列中执行进程。