目录
进程调度基础:
一、进程调度的定义:
进程调度也称为低级调度(CPU调度),是按照某种调度算法(或原则)从就绪队列中选取进程分配CPU,主要是协调对CPU的争夺使用。
二、进程调度的原因:
在操作系统中,由于进程综述多于处理机,它们必然竞争处理机,为了充分利用计算机系统中的CPU资源,让计算机系统能够多快好省地完成我们让它做的各种任务,所以需要进程调度。
三、进程调度的方式:
- 可抢占式(可剥夺式):就绪队列中一旦有某进程的优先级高于当前正在执行的进程的优先级时,操作系统便立即进行进程调度,完成进程切换。
- 不可抢占式(不可剥夺式):即使在就绪队列存在有某进程优先级高于当前正在执行的进程的优先级时,当前进程仍将占用处理机执行,直到该进程自己进入阻塞状态,或时间片用完,或在执行完系统调用后准备返回用户进程前的时刻,才重新发生调度让出处理机。
四、进程调度的时机:
进程调度发生的时机(也称为调度点)与进程的状态变化有直接的关系。引起进程调度的时机可归结为以下几类:
- 正在执行的进程执行完毕,需要选择新的就绪进程执行。
- 正在执行的进程调用相关系统调用(包括与I/O操作,同步互斥操作等相关的系统调用)导致需等待某事件发生或等待资源可用,从而将自己阻塞起来进入阻塞状态。
- 正在执行的进程主动调用放弃CPU的系统调用,导致自己的状态为就绪态,且把自己重新放到就绪队列中。
- 等待事件发生或资源可用的进程等待队列,从而导致进程从阻塞态回到就绪态,并可参与到调度中。
- 正在执行的进程的时间片已经用完,致自己的状态为就绪态,且把自己重新放到就绪队列中。
- 在执行完系统调用后准备返回用户进程前的时刻,可调度选择一新用户进程执行
- 就绪队列中某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。
进程调度算法:
基于进程调度的两种方式的调度算法如下:
- 先来先服务(FCFS)调度算法
- 短作业优先(SJF)调度算法
- 时间片轮转(RR)调度算法
- 最高优先级优先调度算法
- 多级反馈队列(MFQ)调度算法
一、先来先服务(FCFS)调度算法
1、简介:先来先服务调度算法是一种最简单的调度算法,可用于作业调度,也可用于进程调度。
2、原理:在进程调度中采用先来先服务算法的时候,每次调度就从就绪队列中选一个最先进入该队列的进程,为之分配处理机,即谁第一排队谁就先被执行。
3、优点:
- 有利于长作业(进程)
- 有利于CPU繁忙型的作业(进程)
4、缺点:
- 不利于短作业(进程)
- 不利于I/O繁忙型的作业(进程)
二、短作业优先(SJF)调度算法
1、简介:短作业(进程)优先调度算法是指短作业或者短进程的优先调度算法,它们分别作用于作业调度和进程调度,它是先来先服务调度算法的一种优化版本。
2、原理:短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,再将处理机分配给它,直到执行完成,而其他进程一般不抢先正在执行的进程。
3、优点:
- 算法对长作业(进程)不利(长作业(进程)长期不被调度)
- 未考虑进程的紧迫程度
- 由于是估计运行时间而定,而这个时间是由用户所提供的,所以该算法不一定能真正做到短作业优先调度
三、时间片轮转(RR)调度算法
1、简介:RR 调度算法与FCFS 调度算法在选择进程上类似,但在调度的时机选择上不同。RR调度算法定义了一个的时间单元,称为时间片(或时间量)。一个时间片通常在1~100 ms之间。当正在运行的进程用完了时间片后,即使此进程还要运行,操作系统也不让它继续运行,而是从就绪队列依次选择下一个处于就绪态的进程执行,而被剥夺CPU使用的进程返回到就绪队列的末尾,等待再次被调度。
2、优点:平均执行时间短,简单可行。
3、缺点:时间片的大小可调整,如果时间片大到让一个进程足以完成其全部工作,这种算法就退化为FCFS调度算法;若时间片设置得很小,那么处理机在进程之间的进程上下文切换工作过于频繁,使得真正用于运行用户程序的时间减少。
四、最高优先级优先调度算法
1、简介:为了解决在短作业优先调度算法中进程的紧迫程度问题,我们引入最高优先级优先调度算法,它的方法也很简单,就是在队列中选取优先权最高的进程装入内存。进程的优先级用于表示进程的重要性及运行的优先性。一个进程的优先级可分为两种:静态优先级和动态优先级。
- 静态优先级是在创建进程时确定的。一旦确定后,在整个进程运行期间不再改变。静态优先级一般由用户依据包括进程的类型、进程所使用的资源、进程的估计运行时间等因素来设置。一般而言,若进程需要的资源越多、估计运行的时间越长,则进程的优先级越低;反之,对于I/O bounded的进程可以把优先级设置得高。
- 动态优先级是指在进程运行过程中,根据进程执行情况的变化来调整优先级。动态优先级一般根据进程占有CPU时间的长短、进程等待CPU时间的长短等因素确定。占有处理机的时间越长,则优先级越低,等待时间越长,优先级越高。那么进程调度器将根据静态优先级和动态优先级的总和现在优先级最高的就绪进程执行。
五、多级反馈队列调度算法
1、简介:前面介绍的四种调度算法都有各自缺陷,但是多级反馈调度算法有很多优点,是目前被公认的一种好的调度算法。
多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。
2、方法:
设置多个就绪队列,每个队列的优先级逐渐降低,同时每个队列的执行时间也各不相同,优先级越高的队列,执行时间越短,优先级越低的队列,执行时间越长。
当一个进程进入内存后,首先进入第一个队列的末尾,按照先来先服务的调度算法进行调度,如果在第一个队列的执行时间内未执行完成,此时把此进程放入第二个队列的末尾,按照之前的方法进行执行,直到在某一个队列的队首执行完成。
当第一个队列全部执行完成,此时系统才会执行第二个队列,但是如果此时又有新的进程进入,此时执行完毕这个时间段,立刻把此进程分配给新的作业。
高响应比优先调度算法:
综合了短作业优先,先来先服务,以及长作业也能得到服务的特性。
计算公式:
优先权 = (等待时间 + 要求服务时间) / 要求服务时间又因为等待时间 + 要求服务时间 = 响应时间
优先权 = 响应时间 / 要求服务时间
故而称之为,高响应比优先算法。
那么,这个计算公式,怎么就能体现上面三个综合特性呢?
- 首先,短作业优先。短作业优先是因为,要求服务时间在分子,如果要求服务时间很短,且等待时机我们认为相等,那么短作业就有更高的优先权。
- 其次,先来先服务。假设要求服务时间相同,那么先来的作业等待时间肯定较长,所以先来的优先级更高。
- 最后,长作业也不会沦落到没法调度的尴尬局面。因为一个长作业,等啊等,越等自己自己资历越老,优先级是在不断增长的,所以总会有机会熬出头的!