进程的三种状态:
1、等待态:等待某个事件的完成;
2、就绪态:等待系统分配处理器以便运行
3、运行态:占有处理器正在运行
三种状态的转化:
运行态到等待态:往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的;
等待态到就绪态:等待的条件已经满足,只需要分配到处理器后就能运行;
就绪态到运行态:系统按某种策略选中就绪队列中的一个进程占用处理器;
运行态到就绪态:由于外界原因是运行状态的进程让出处理器,例如有更高优先级的进程来抢占处理器,或时间片(时间片是系统分配给程序的运行时间)用完。
调度方式:
剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给他的处理机,将之分配给其他进程,剥夺原则有:优先权原则、短进程优先原则、时间片原则。
非剥夺方式:分配程序一旦吧处理机分配给某进程后便让他一直运行下去,知道进程完成或发生事件而阻塞时,才把处理机分配给另一个进程。
进程调度算法
主要有以下几种,本文旨在简单复习总结,详细的算法实现请有兴趣的读者自行探究。
1、先来先服务调度算法(FCFS,first come first served):谁第一个排队,谁就先被执行,在它执行过程中,不会中断它;
2、短作业优先调度算法(SJF,shortest job first):对预计执行时间短的进程有限分配处理机,通常后来的短进程不会抢先正在执行的进程;对长进程非常不利,可能长时间得不到执行。
基于优先级的调度算法
优先权调度算法的类型:
- 非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;
或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
- 抢占式优先权调度算法
3、最高响应比优先法(HRRN,highest response radio next):对于FCFS和SJF的平衡,FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF只考虑了执行时间而未考虑等待时间的长短,因此两种算法在某种极端的情况下会带来某些不便。HRRN通过综合这两种情况算出响应比R,根据响应比完成调度。
作业的优先级随着等待时间的增加而以速率a 提高,响应比Rp的计算公式如下:
优点:长作业也有机会投入运行,缺点:每次调度前要计算响应比。
基于时间片的调度算法:
4、时间片轮转法(RR,Round-Robin):采用剥夺方式,每个进程被分配一个时间段,按照在队列中的顺序交替执行;不利于处理紧急作业。
时间片长度变化的影响
过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。
过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。
一个较为可取的时间片的大小是略大于一次典型的交互所需时间,是大多数交互程序能在一个时间片内完成。
对响应时间的要求:T(响应时间)=N(进程数目)*q(时间片)
就绪进程的数目:数目越多,时间片越小
系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。
5、多级反馈队列(multilevel feedback queue): UNIX使用这种调度算法;进程在进入待调度的队列等待时,首先进入优先级最高的Q1中等待;首先调度优先级高的队列中的进程。若高优先级队列中已经没有调度的进程,则调度次优先级队列的进程;同一队列中的各个进程按照时间片轮转调度;在低优先级队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(剥夺)。
通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列。但是,多级反馈队列调度算法允许进程在队列之间迁移。如果进程使用过多的 CPU 时间,那么它会被移到更低的优先级队列。在较低优先级队列中等待过长的进程会被移到更高优先级队列。这种形式可阻止饥饿的发生。
详细的请看进程调度算法:https://blog.csdn.net/u011080472/article/details/51217754#t0