一、处理机调度
调度:由于资源有限,按照某种规则,决定处理任务的顺序
高级调度(作业调度):用户向系统提交一个作业(用户启动一个程序),从后备队列选择一个调入内存。(一个作业只调入一次,调出一次)(无→创建态→就绪态)
中级调度(内存调度):内存不足时,将一些进程调出外存,暂时挂起,等内存空闲时再调入内存(一个进程可能多次被调入调出内存,发生频率高于高级调度)(外存→内存)
低级调度(进程调度/处理机调度):按照某种策略,从就绪队列选取一个进程,将处理机分配给他(内存→CPU)
五状态模型:三状态的情况下增加了新建和结束
七状态模型:
增加了就绪挂起、阻塞挂起,挂起因为内存不足,调入外存中
二、进程调度时机、切换过程、方式
调度时机:当前进程主动放弃处理机(正常终止,发生异常,等待I/O而阻塞)被动放弃处理机(时间片用完,有更紧急事处理、有更高优先级抢占)不能进行调度的情况:正在处理中断过程,进程处于操作系统内核程序临界区,原语操作过程中
访问普通临界区时,进程可以被调度,只有访问内核程序临界区才不能进行调度
进程调度的方式:
1、非剥夺调度方式(非抢占式):只允许进程主动放弃处理机
2、剥夺调度方式(抢占式):主动暂停正在处理的进程,去处理另一个优先级更高的进程
进程切换包括:
1、对原进程各种数据的保存到PCB
2、对新进程的各种数据从PCB中读取恢复(进程的切换有代价,过于频繁的切换浪费系统资源)
三、调度器
调度程序决定:让谁运行,运行多少时间
闲逛进程:调度进程的永远备胎,没有就绪进程时,运行
闲逛进程特点:优先级最低,能耗低,
四、调度算法评价指标
CPU利用率:CPU使用时间,在总时间的占比
系统吞吐量:单位时间内完成作业数量
周转时间:作业被提交,到作业完成为止的时间间隔。
平均周转时间:各作业周转时间/作业数
带权周转时间:作业周转时间/实际运行时间(带权越小(越接近1),客户满意度越高)
平均带权周转时间:各带权和/作业数
等待时间:作业提交后,等待处理机服务的时间(包括调入外存后等待时间)
响应时间:提出请求到首次响应时间
五、调度算法
1、先来先服务(FCFS)
按照到达先后顺序,等待时间越久的优先得到服务优点:公平、算法实现简单(对长作业有利、对短作业不利)不会导致饥饿
算法的特点主要有以下几点:
简单性:FCFS算法的设计和实现都非常简单,容易理解。它不需要考虑进程的优先级或其他复杂因素,只需按照进入队列的顺序依次执行即可。
非抢占性:在FCFS算法中,一旦一个进程开始执行,它将一直运行到完成或被阻塞(例如等待I/O操作)为止。在此期间,没有其他进程可以抢占其CPU时间。
不考虑优先级:FCFS算法不区分进程的优先级,所有进程都按照它们进入就绪队列的顺序进行处理。这意味着,如果有一个高优先级的进程进入队列并排在了一个低优先级进程的后面,它也需要等待前面的进程执行完毕后才能得到处理机。
可能的长等待时间:由于FCFS算法不考虑进程的优先级和等待时间,因此可能会出现某些进程需要等待很长时间才能得到执行的情况。特别是当短进程排在长进程后面时,短进程的等待时间会很长,从而导致系统的整体效率下降。
适用场景:尽管FCFS算法在某些情况下可能不是最优的,但它仍然在一些特定的应用场景中得到了广泛应用。例如,在批处理系统中,由于作业通常是成批提交的,而且作业的执行时间相对较长,因此FCFS算法可以作为一种简单有效的调度策略。
总的来说,先来先服务调度算法虽然简单直观,但在某些情况下可能不是最优的调度策略。因此,在选择进程调度算法时,需要根据具体的应用场景和需求进行权衡和选择。
2、短作业优先(SJF)
短作业优先(SJF,Shortest Job First)算法是一种进程调度算法,它的核心思想是优先执行估计运行时间最短的作业或进程。SJF算法的基本思想在于对短作业或进程给予较高的优先级,以便使它们能尽早地完成执行,从而减少了平均等待时间,提高了系统的吞吐量和资源利用率。
SJF算法可以分为非抢占式和抢占式两种。非抢占式SJF算法在进程进入就绪队列时计算其所需运行时间,并选择运行时间最短的进程执行,直到该进程完成或阻塞。而抢占式SJF算法在进程执行过程中,若有新的更短作业到达,则中断当前进程的执行,转而执行新到达的短作业。
SJF算法的优点在于能有效地降低作业的平均等待时间,提高系统吞吐量。然而,它也存在一些不容忽视的缺点:
需要估计运行时间:SJF算法需要事先知道每个作业或进程的估计运行时间。然而,这个估计值往往难以准确获得,尤其是在复杂的系统中。
对长作业不利:由于SJF算法优先执行短作业,因此长作业可能会等待很长时间才能得到执行,这可能导致长作业的周转时间增加。
可能导致饥饿现象:在抢占式SJF算法中,若有源源不断的短作业到达,那么长作业可能永远得不到执行,从而产生饥饿现象。
总的来说,短作业优先算法是一种有效的进程调度策略,但需要根据具体的应用场景和需求进行权衡和选择。同时,为了克服其缺点,可以考虑与其他调度算法结合使用,形成更加完善的调度策略。
(一)非抢占式短作业优先算法(SJF)
调度时,选择当前已到达运行时间最短的作业进程
(二)抢占式短作业优先算法(SPF)
最短剩余时间优先算法有新进程加入就绪队列时,对比剩余时间,选择时间更短的抢占处理机
题目中未说明的情况下默认短作业(非抢占式)可能会导致饥饿
3、高响应比优先(HRRN)非抢占式
高响应比优先算法(Highest Response Ratio Next,简称HRN)是一种综合考虑作业等待时间和估计运行时间的进程调度算法。这种算法既照顾短作业,又不使长作业等待时间过长,是对先来先服务(FCFS)和短作业优先(SJF)算法的一种折中。
在高响应比优先算法中,作业的响应比是其等待时间与估计运行时间之和与估计运行时间的比值,即 R = (W + T) / T,其中 R 是响应比,W 是作业在后备状态队列中的等待时间,T 是作业估计需要的执行时间。系统在进行作业调度时,会计算每个作业的响应比,并选择响应比最高的作业投入执行。
这种算法的优点在于:
平衡长短作业:通过综合考虑等待时间和估计运行时间,高响应比优先算法既能让短作业较快地得到执行,又能避免长作业因等待时间过长而导致的资源利用效率低下。
减少饥饿现象:由于长作业的响应比会随着其等待时间的增加而增加,因此它们也有机会得到执行,从而减少了饥饿现象的发生。
然而,高响应比优先算法也存在一些缺点:
计算复杂度:每次进行作业调度时,都需要计算所有作业的响应比,这增加了算法的计算复杂度。
参数敏感性:算法的性能受到作业估计运行时间的准确性影响。如果估计时间不准确,可能导致调度效果不理想。
总的来说,高响应比优先算法是一种有效的进程调度策略,它能在一定程度上平衡长短作业的执行,提高系统的整体性能。然而,在实际应用中,需要根据具体的系统环境和需求进行参数调整和优化。
4、时间片轮转调度算法(RR)
时间片轮转调度算法是一种基于时间片(也称为时间量子)的多道批处理调度算法。它的核心思想是将CPU时间分成固定大小的时间片,每个进程在一个时间片内执行。如果时间片用尽而进程未完成,那么该进程就会被放到就绪队列的末尾,等待下一次轮到它执行。
该算法的运行过程如下:
创建一个就绪队列:用于存放等待执行的进程。所有进程按照到达时间或其他某种规则(如优先级)排列到就绪队列中。
执行:从就绪队列中选择队头的进程执行,并分配一个时间片的时间给它。如果进程在时间片内完成,那么它将被移出队列;如果进程在时间片内未完成,则将其移到队列末尾,等待下一轮执行。
调度:当一个进程的时间片用完,或者它主动放弃CPU(如等待I/O操作完成),它将被放回就绪队列的末尾。此时,选择就绪队列中的下一个进程执行,并重复上述执行步骤。
结束:当所有进程都执行完成,算法结束。
时间片轮转调度算法的主要优点包括:
公平性:每个进程都有机会获得CPU时间,避免了某个进程长时间占用CPU的情况。
响应时间短:对于短作业来说,由于它们通常能在一个时间片内完成,因此响应时间非常短,用户体验好。
系统效率高:通过频繁地切换进程,系统可以充分利用CPU资源,减少空闲时间。
然而,该算法也存在一些缺点:
上下文切换开销:每次从一个进程切换到另一个进程时,都需要保存和装入寄存器值及内存映像,更新各种表格和队列等,这会产生一定的开销。
不适合长作业:由于每个进程只能执行一个时间片,长作业可能需要等待多个时间片才能完成,这可能导致其周转时间较长。
总的来说,时间片轮转调度算法是一种简单而有效的进程调度策略,适用于多种应用场景。在实际使用中,需要根据系统的具体需求和特点来设置合适的时间片大小,以达到最佳的性能和效率。
5、优先级调度算法
优先级调度算法是一种基于进程或作业优先级进行调度的算法。在这种算法中,处理机被分配给就绪队列中优先级最高的进程。优先级调度算法可以进一步分为非抢占式优先级调度算法和抢占式优先级调度算法。
非抢占式优先级调度算法:
在这种算法中,系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统才将处理机重新分配给另一优先级最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
抢占式优先级调度算法:
在这种算法中,系统同样把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要出现了另一个其优先级更高的进程,进程调度程序就立即停止当前进程(原优先级最高的进程)的执行,重新将处理机分配给新出现的优先权最高的进程。这种抢占式的优先权调度算法,能更好地满足紧迫作业的要求,常用于要求比较严格的实时系统中,以及对性能要求较高的批处理系统和分时系统中。
优先级的类型:
静态优先级:在创建进程时确定,在进程的整个运行期间保持不变。优先级是利用某一范围内的一个整数来表示的,例如0~255中的某一整数,把该整数称为优先数。
动态优先级:在创建进程之初,先赋予其一个优先级,然后其值随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。
优先级调度算法的主要优点是可以根据任务的特性和需求,给予不同任务不同的优先级,从而满足系统的实时性要求或性能需求。然而,该算法也可能导致低优先级的任务长时间得不到执行,产生饥饿现象。因此,在设计优先级调度算法时,需要权衡各种因素,确保算法的公平性和效率。
非抢占式优先级调度算法:非抢占式进程主动放弃处理机时进行调度
抢占式优先级调度算法:当就绪队列发生变化时,检查是否发生抢占。
6、多级反馈队列调度算法
多级反馈队列调度算法是一种结合了多种调度策略的先进算法,旨在提供更高效、更公平的进程调度。它充分利用了不同队列的优先级和时间片轮转的概念,以优化系统的整体性能。
在多级反馈队列调度算法中,通常设置多个就绪队列,每个队列具有不同的优先级。优先级高的队列中的进程具有较高的调度优先级,可以优先获得CPU资源。这种设计使得系统能够优先处理紧急或重要的任务。
每个队列都遵循一定的调度策略。对于优先级最高的队列,通常采用先来先服务(FCFS)策略,确保队列中的进程按照到达的顺序依次执行。而对于其他队列,则采用时间片轮转法,每个进程获得一个固定的时间片来执行。如果在时间片结束前进程未完成,则将其移至下一级队列的末尾等待再次调度。
多级反馈队列调度算法的关键在于“反馈”机制。当一个进程在一个队列中执行完一个时间片后,它的优先级会发生变化。如果进程在较高优先级的队列中未能完成,当它进入较低优先级的队列时,它的优先级会降低,并且可能会获得更短的时间片。这种反馈机制使得算法能够动态地调整进程的执行顺序和时间片大小,以适应系统的实时性和性能需求。
此外,多级反馈队列调度算法还具有以下优点:
灵活性:通过调整队列的数量、优先级和时间片大小,算法可以适应不同的系统环境和任务需求。
公平性:由于每个进程都有机会在不同优先级的队列中执行,算法避免了某些进程长时间得不到执行的情况,从而保证了公平性。
效率:算法结合了多种调度策略的优点,能够在保证公平性的同时,提高系统的吞吐量和响应速度。
需要注意的是,多级反馈队列调度算法的实现相对复杂,需要考虑多种因素和参数的设置。因此,在实际应用中,需要根据系统的具体需求和特点来选择合适的算法参数和配置方式。