操作系统知识整理 - 处理机调度(个人觉得比较重要)

版权声明: https://blog.csdn.net/Ha1f_Awake/article/details/84758705

主要内容

作业的概念

作业的状态及转换

作业控制块(JCB)

作业调度目标与性能衡量

先来先服务(FCFS)

轮转法(round robin,RR)

优先级法


一般来说,处理机调度可以分为4级:

(1)作业调度又称宏观调度或高级调度。其主要任务是完成作业从后备状态(或称收容状态)到执行状态的转变,以及从执行状态到完成状态的转变。

(2)交换调度。又称中级调度。其主要任务是交换主存和外存交换区中的就绪态或等待状态的进程,涉及到主存的管理与扩充。

(3)进程调度。又称微观调度或低级调度。其主要任务是选取一个(内存)就绪态的进程占用处理机,并进行进程上下文切换。

(4)线程调度。其主要任务是改善进程执行情况,减少进程创建和进程上下文切换的开销。


作业调度

作业的概念

作业可被看作是用户向计算机提交任务的任务实体,例如一次计算和一个控制过程等。

进程则是计算机为了完成用户任务而设置的执行实体,是系统分配资源和执行的基本单位。

计算机完成一个任务实体必须要有一个以上的执行实体,也就是说一个作业总是由一个以上的进程组成。

关系表示:作业(进程(线程))

如何将作业分解为进程?

系统首先为一个作业创建一个根进程,然后再创建相应的子进程,最后为各子进程分配资源,调度各子进程执行,完成作业要求的任务。

作业的状态及转换

一个作业从提交给计算机系统到执行结束推出系统,一般都要经历4个状态:提交后备(收容)执行完成

1)提交状态:从输入设备进入外存的过程称为提交状态,此时作业的信息尚未全部进入系统,不能被作业调度程序选取。

2)后备(收容)状态:输入后的作业信息存放在一个被称作输入井的外存分区中,并为每个作业建立一个作业控制块(JCB)来记录作业信息。在被调度去执行之前,作业都处于后备状态。

3)执行状态:被作业调度程序送到内存的若干个作业处于执行状态。作业调度程序为选中的作业创建进程并分配必要的资源(内存、外存、外设等)。若干个作业被分解为若干xN个进程后,就进入到进程状态转换的阶段。(可回顾“进程状态转换”

4)完成状态:作业的所有进程运行完毕后,作业也进入完成状态,但它所占用的资源尚未全部被系统回收,这种状态下还需要系统做诸如打印结果、回收资源等善后工作(主要是输出作业管理信息)。系统通过撤销JCB来释放资源和撤销作业。

作业控制块(JCB)

作业调度程序对作业进行管理和调度的依据。

包括信息:

1)作业名:用户提供作业名,系统将其转换为系统可识别的作业标识符。

2)作业类型:计算型(要求CPU时间多)、管理型(要求输入输出量大)或图形设计型(要求高速图形显示)等。

3)资源要求:作业的预期执行时间、要求最迟完成的时间(deadline)、要求的内存量和外存量、要求的外设类型及台数、要求的库函数等。

4)当前状态:提交、后备、执行或完成。

5)资源使用情况:作业进入系统时间(全部信息进入输入井,提交->后备)、开始执行时间(被作业调度程序选取,后备->执行)、已执行时间(执行到完成之前的计时)、内存地址(分配给作业的起始地址)、外设台数等。

6)作业的优先级:既可以用户定义,也可以由系统动态计算产生。

作业调度目标与性能衡量

1)公平合理地对待所有作业;

2)使设备具有较高的利用率;

3)执行尽可能多的作业;

4)较短的响应时间。

需要注意的是,以上4个目标互相冲突,不存在一个调度算法可以同时满足上面的4个目标。

例如:要执行尽可能多的作业,调度算法就应选择预期执行时间较短的作业,但这样会造成作业的不公平对待,而且被怠慢的作业的响应时间会变得相当长。

所以应该用其他量来衡量作业调度算法的优劣。

对于批处理系统而言,作业的平均周转时间平均带权周转时间被作为衡量算法优劣的标准;

对于分时系统实时系统,另外增加了平均响应时间来作为衡量标准。(可回顾“操作系统的基本类型”

一个作业的周转时间说明了该作业在系统中的停留时间,包括等待时间(后备转成执行的时间)和执行时间。


进程调度

无论在哪种操作系统中,用户进程数一般都多于处理机数,这将导致用户进程互相争夺处理机。另外,系统进程同样需要处理机,这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列的某个进程。

关于进程调度的功能可以回顾“上一篇博文”

进程调度虽然是系统内部的低级调度,但进程调度的优劣直接影响作业调度的性能。

作业的执行时间包含进程的等待时间(就绪态和等待状态),而进程的等待时间取决于系统的运行速度进程调度程序的策略以及等待事件的发生


调度算法

进程调度算法与作业调度算法同理。

在认识调度算法前,要先了解一个概念——时间片

CPU分配给各(执行态)进程的执行时间段,我们称它为时间片。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换(进程上下文切换),使进程进入等待状态,而不会造成CPU资源浪费。

在宏观上,我们可以同时打开多个应用程序,每个程序并行不悖,同时运行;但在微观上,由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,其中一种方法就是引入时间片,事每个程序、每个进程轮流执行。

通常情况下,进程被分配的时间片长短并不相等。系统通过测量进程处于“睡眠”和“正在运行”状态的时间长短来计算每个进程的交互性,交互性和每个进程预设的静态优先级的叠加即是动态优先级,动态优先级按比例缩放就是要分配给那个进程时间片的长短。

先来先服务(FCFS)

将用户作业按照提交顺序,或者将进程按照转换为就绪态的先后,排成一个队列,并按先来先服务(First Come First Serve)的方式进行调度处理。这是一种最普遍、最简单的算法。

该算法在一般意义下是公平的,每个作业或进程都按照在队列中的位置来决定“享受服务”的先后。但对于那些执行时间较短的作业或进程而言,排在很后的位置似乎又不够合理。

在实际的操作系统中,尽管很少单独使用FCFS算法,但如果和其他算法配合起来,FCFS算法用到的地方还是蛮多的。

性能评价:短作业在系统中的驻留平均时间与长作业相同,这对短作业是不利的。

轮转法(round robin,RR)

轮转法的基本思想是让每个进程在就绪队列中的等待时间与享受服务的时间成正比。

将CPU的处理时间分成固定大小的时间片,当一个进程用完一个时间片且未能完成任务时,自动释放CPU,并排到就绪队列的末尾,等待下一次调度。

轮转法只能调度分配可抢占的资源(如CPU)。由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含了不可抢占的资源,所以作业调度不能使用轮转法。

在轮转法中,时间片长度的选取非常重要,这会直接影响系统开销以及响应时间。如果时间片过短,进程上下文切换次数增加,系统开销增大;如果时间片过长,长到可以运行完最长的进程,轮转法就变成了FCFS法。

时间片长度q根据响应时间要求R和就绪队列允许的最大进程数N确定:q = R/N

为了进一步改进算法,可以在每一次调度开始时,根据就绪队列中的进程数计算一次时间片长度。

至于计算时间片带来的开销和固定时间片带来的开销哪个比较大,就要根据实际情况判断了。

性能评价:进程的响应时间与服务时间成正比。从而,所需服务时间短的进程的响应时间将会小于所需服务时间长的进程。因此轮转法在响应时间上优于FCFS算法。

优先级法

优先级高的作业或进程先执行。

确定优先级的方法可分为静态法动态法。静态法根据作业或进程的静态特性,在作业或进程开始执行之前确定它们的优先级,一旦开始执行就不能改变。动态法是将作业或进程的静态特性和动态特性结合起来确定它们的优先级,随着作业或进程的不断执行,优先级不断变化。

作业的静态优先级确定原则:

1)用户根据作业的紧急程度定义;

2)按作业类型确定:I/O繁忙、CPU繁忙、均衡、一般;

3)按照资源需求情况。

进程的静态优先级确定原则:

1)进程类型:系统进程或用户进程,I/O繁忙、CPU繁忙、均衡、一般;

2)根据作业的优先级。

进程的动态优先级确定原则(常用):

1)根据进程占用CPU的时间长短,占用时间越长,被阻塞之后再次获得调度的优先级降低;

2)根据就绪态进程等待CPU的时间长短,等待时间越长,优先级越高。

需要注意的是,由于系统要经常计算各进程的优先级,因而系统要额外付出开销。

除了以上三种算法还有线性优先级法(SRR,介于FCFS和RR)多级反馈轮转法(进程结束前多次反馈循环执行)、最短作业优先法(SJF,注重执行时间)和最高响应比优先级法(HRN,响应比 = 1 + 后备状态作业的等待时间 / 作业的预期执行时间)等。


路过的圈毛君:“妄想当个日更博主?肝还好吗?脑子可能已经不灵活了惹......本来想写点代码示例的,但还是以后有机会再(wa)补(keng)上(bu)叭(tian)_(:з」∠)_”

猜你喜欢

转载自blog.csdn.net/Ha1f_Awake/article/details/84758705