收藏 分享(赏)

windows操作系统课件 第3章调度.ppt

上传人:tkhy51908 文档编号:6985538 上传时间:2019-04-29 格式:PPT 页数:75 大小:1.41MB
下载 相关 举报
windows操作系统课件 第3章调度.ppt_第1页
第1页 / 共75页
windows操作系统课件 第3章调度.ppt_第2页
第2页 / 共75页
windows操作系统课件 第3章调度.ppt_第3页
第3页 / 共75页
windows操作系统课件 第3章调度.ppt_第4页
第4页 / 共75页
windows操作系统课件 第3章调度.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

1、第三章 进程和处理器管理,处理器调度概述,处理机调度的四个层次,执行,等待,就绪,等待,就绪,完成 状态,收容 状态,进程调度,交换调度,作业调度,内存,外存,线程调度,高级调度:作业调度 中级调度:交换调度 低级调度:进程调度 线程调度,作业与进程的关系,作业可被看作是用户向计算机提交任务的任务实体,例如一次计算、一个控制过程等。进程则是计算机为了完成用户任务实体而设置的执行实体,是系统分配资源的基本单位。计算机要完成一个任务实体,必须要有一个以上的执行实体。也就是说,一个作业总是由一个以上的多个进程组成的。,调度目标:一般来说,调度目标主要是以下四点 (1)公平合理:对所有作业应该是公平合

2、理的; (2)高利用率:应使设备有高的利用率, (3)吞吐量大:每天执行尽可能多的作业; (4)响应迅速:有快的响应时间。,任一调度算法要想同时满足上述目标是不可能的: 1)如要想吞吐量大,调度算法就应选择那些估计执行时间短的作业。这对那些估计执行时间长的作业不公平,并且可能使它们的得不到调度执行或响应时间很长。 2)如果考虑的因素过多,调度算法就会变得非常复杂。其结果是系统开销增加,资源利用率下降。,衡量调度策略的常用指标,周转时间:指将一个作业提交给计算机系统后到该作业的结果返回给用户所需要的时间。 吞吐量:指在给定的时间内,一个计算机系统所完成的总工作量(作业数)。 响应时间:指从用户向

3、计算机发出一个命令到计算机把相应的执行结果返回给用户所需要的时间。 设备利用率:输入输出设备的使用情况,在有些要求IO处理能力强(如管理信息系统)的系统中,高的设备利用率也是一个衡量调度策略好坏的重要指标。,周转时间: 作业i的周转时间Ti为 TiTei-Tsi 其中Tei为作业i的完成时间;Tsi为作业的提交时间。 N个作业的平均周转时间T=(T1 + T2 + + TN)/N 带权周转时间: 周转时间Ti可分解为两部分,即 TiTwi+Tri 这里,Twi主要指作业i由后备状态到执行状态的等待时间,它不包括作业进入执行状态后的等待时间; Tri指作业i的执行时间。 带权周转时间是作业周转时

4、间与作业执行时间的比: WiTiTri N个作业的平均带权周转时间W(W1 + W2 + + WN)/N,常用作业调度算法 1 先来先服务(First come first serve,FCFS)方式: 执行时间很短的作业是在那些长作业的后面到达系统的话,则必须等待很长时间 2 短作业优先(Shortest Job first,SJF)方式 选择那些估计需要执行时间最短的作业投入执行,为它们创建进程和分配资源。有可能使得那些长作业永远得不到调度执行 3 响应比高者优先( Highest Response-ratio Next ,HRN)方式,响应比R(W+T)T1+WT T:为估计需要的执行时

5、间 W:在后备状态队列中的等待时间 T+W:响应时间 作业调度时,系统计算每个作业的响应比,选择R最大者投入执行。 长作业有机会获得调度执行(随着它等待时间的增加,WT也就随着增加)。 HRN的吞吐量小于SJF,由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法。 系统开销增加:每次调度前要计算响应比。 HRN是对FCFS方式和SJF方式的一种综合平衡。,时间片轮转程序调度算法 (RR),把CPU划分成若干时间片,并且按顺序赋给就绪队列中的每一个进程,进程轮流占有CPU,当时间片用完时,即使进程未执行完毕,系统也剥夺该进程的CPU,将该进程排在就绪队列末尾。同时系统选择另一

6、个进程运行 本算法主要用于微观调度,说明怎样并发运行,即切换的方式;设计目标是提高资源利用率。其基本思路是通过时间片轮转,提高进程并发性和响应时间特性,从而提高资源利用率;,时间片长度的确定,时间片长度变化的影响 过长退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。 过短用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。 时间片长度的影响因素: 就绪进程的数目:数目越多,时间片越小(当响应时间一定时) 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。,多队列反馈调度算法,* 首先系统中设置多个就绪队

7、列 * 每个就绪队列分配给不同时间片,优先级高的为第一级队列,时间片最小,随着队列级别的降低,时间片加大 * 各个队列按照先进先出调度算法 * 一个新进程就绪后进入第一级队列 * 进程由于等待而放弃CPU后,进入等待队列,一旦等待的事件发生,则回到原来的就绪队列 * 当有一个优先级更高的进程就绪时,可以抢占CPU,被抢占进程回到原来一级就绪队列末尾 * 当第一级队列空时,就去调度第二级队列,如此类推 * 当时间片到后,进程放弃CPU,回到下一级队列,例题,在一单道批处理系统中,一组作业的提交时刻和运行时间如表所示 试计算以下三种作业调度算法的平均周转时间T和平均带权周转时间W,先来先服务,短作

8、业优先算法,HRN,例2,假设作业在时刻0以1、2、3、4、5的顺序到达。 用FCFSRRSJF非剥夺优先级法,FCFS,RR,SJF,非剥夺优先级,线性优先级调度策略,新创建的进程按FCFS方式排成就绪队列,而其它已得到过时间片服务的进程也按FCFS方式排成另一个就绪队列或称享受服务队列,对于这两个不同队列中的进程,设新创建进程进入新创建进程就绪队列时的优先级P为0,进入就绪队列后以Pa*t (a0)的速率增加。 享受服务队列中进程的优先级P以Pb*t (ab0)的速率增长。 新创建进程进入享受服务队列条件: 当新创建进程就绪队列中的头一个进程的优先级 P (t)=a(t-t1)与享受服务队

9、列中最后一个就绪进程的优先级P(t)b*t相等时 当享受服务进程队列为空时,新创建进程队列的头一个进程也将移入享受服务进程队列。,设某一进程在时刻t1时被创建在时刻t时,该进程的优先级为P(t)a *(t-t1) (t1tt2) 又设该进程在t1时刻转入享受服务队列,则在时刻t,该进程的优先级变为P(t)a*(t1-t1)+b*(t-t1) (t2tt3),P(t),b(t-t1),a(t-t1),t1 t1 t2 t2 t,在线性优先级调度法中,ab0的条件是必要的。否则算法将发生退化情形: 当ba0时,上述线性优先级调度策略退化为FCFS方式。(两个不同队列中的就绪态进程的优先级将永远不会

10、相等,从而,在享受服务进程队列中永远只有一个进程)。如果ab0,则线性优先级调度策略退化为轮转法调度方式。线性优先级调度策赂是一种介于轮转法和FCFS方式之间的调度策略。,优先级算法,静态优先数法:在进程创建时指定优先数,在进程运行时优先数不变 实现简单,系统开销小; 系统效率较低,调度性能不高。由于静态优先级一旦确定之后,直到执行结束为止始终保持不变。 动态优先数法:在进程创建时创立一个优先数,但在其生命周期内优先数可以动态变化。如等待时间长优先数可改变。 系统要经常计算各进程的优先级为此付出一定的开销。,两种占用CPU的方式: 可剥夺式(可抢占式Preemptive):当有比正在运行的进程

11、优先级更高的进程就绪时,系统可强行剥夺正在运行进程的CPU,提供给具有更高优先级的进程使用 不可剥夺式(不可抢占式 Non-preemptive ):某一进程被调度运行后,除非由于它自身的原因不能运行,否则一直运行下去,每个优先级的就绪进程排成一个先进先出队列; 当一个线程状态变成就绪时,它可能立即运行或排到相应优先级队列的尾部。 总运行优先级最高的就绪线程;,调度单位是线程而不是进程,采用严格的抢先式动态优先级调度,依据优先级和分配时间片来调度。,Windows 2000的线程调度概述,完全的事件驱动机制,在被抢先前没有保证的运行时间; 在同一优先级的各线程按时间片轮转算法进行调度; 在多处

12、理机系统中多个线程并行运行;,Windows 2000的中断优先级,windows线程的优先级,实时(real-time):从16到31,如设备监控线程。 可变优先级(variable-priority):从1到15(级别0保留为系统使用)。 线程的基本优先级 = 进程的基本优先级 - 2,进程的基本优先级 + 2,由应用程序控制 线程的动态优先级 = 进程的基本优先级 - 2, 31,由NT核心控制,从0到31,数值越大,优先级越高。分为两类,线程优先级(Base Priority)由进程优先级类(Priority Class)和线程优先级偏移(Priority Level)构成,分别由相关

13、函数控制。,有关API,进程优先级类函数: GetPriorityClass(读取) SetPriorityClass(设置) 线程优先级偏移: GetThreadPriority(读取) SetThreadPriority(设置),线程调度数据结构,就绪位图(KiReadySummary) 为了提高调度速度,Windows 2000维护了一个称为就绪位图(KiReadySummary)的32位量。就绪位图中的每一位指示一个调度优先级的就绪队列中是否有线程等待运行。空闲位图(KiIdleSummary) Windows 2000还维护一个称为空闲位图(KiIdleSummary)的32位量。空

14、闲位图中的每一位指示一个处理机是否处于空闲状态。 调度器自旋锁(KiDispatcherLock) 为了防止调度器代码与线程在访问调度器数据结构时发生冲突,处理机调度仅出现在DPC/调度层次。但在多处理机系统中,修改调度器数据结构需要额外的步骤来得到内核调度器自旋锁(KiDispatcherLock),与线程调度相关的内核变量,线程时间配额(Quantum),时间配额是一个线程从进入运行状态到Windows 2000检查是否有其他优先级相同的线程需要开始运行之间的时间总和。一个线程用完了自己的时间配额时,如果没有其它相同优先级线程,Windows 2000将重新给该线程分配一个新的时间配额,并

15、继续运行。 每个线程都有一个代表本次运行最大时间长度的时间配额。时间配额不是一个时间长度值,而一个称为配额单位(quantum unit)的整数。,时间配额的计算,缺省时,在Windows 2000专业版中线程时间配额为6;而在Windows 2000服务器中线程时间配额为36。 在Windows 2000服务器中取较长缺省时间配额的原因是,保证客户请求所唤醒的服务器应用有足够的时间在它的时间配额用完前完成客户的请求并回到等待状态。,每次时钟中断,时钟中断服务例程从线程的时间配额中减少一个固定值(3)。 如果没有剩余的时间配额,系统将触发时间配额用完处理,选择另外一个线程进入运行状态。 在Wi

16、ndows 2000专业版中,由于每个时钟中断时减少的时间配额为3,一个 线程的缺省运行时间为2个时钟中断间隔;在Windows 2000服务器中,一个线程的缺省运行时间为12个时钟中断间隔。,如果时钟中断出现时系统正在处在DPC/线程调度层次以上(如系统正在执行一个延迟过程调用或一个中断服务例程),当前线程的时间配额仍然要减少。甚至在整个时钟中断间隔期间,当前线程一条指令也没有执行,它的时间配额在时钟中断中也会被减少。,不同硬件平台的时钟中断间隔是不同的,时钟中断的频率是由硬件抽象层确定的,而不是内核确定的。 例如,大多数x86单处理机系统的时钟中断间隔为10毫秒,大多数x86多处理机系统的

17、时钟中断间隔为15毫秒。,在等待完成时允许减少部分时间配额。 当优先级小于14的线程执行一个等待函数(如WaitForSingleObject或WaitForMultipleObjects)时,它的时间配额被减少1个时间配额单位。 当优先级大于等于14的线程在执行完等待函数后,它的时间配额被重置。,这种部分减少时间配额的做法可解决线程在时钟中断触发前进入等待状态所产生的问题。 如果不进行这种部分减少时间配额操作,一个线程可能永远不减少它的时间配额。 例如,一个线程运行一段时间后进入等待状态,再运行一段时间后又进入等待状态,但在时钟中断出现时它都不是当前线程,则它的时间配额永远也不会因为运行而减

18、少。,时间配额的控制,在系统注册库中的一个注册项“HKLMSYSTEMCurrentControlSetControlPriorityControlWin32PrioritySeparation”,允许用户指定线程时间配额的相对长度(长或短)和前台进程的进程的时间配额是否加长。该注册项为6位,分成3个字段,每个字段占2位。,时间配额长度字段(Short vs. Long): 1表示长时间配额,2表示短时间配额。0或3表示缺省设置(Windows 2000专业版的缺省设置为短时间配额,Windows 2000服务器版的缺省设置为长时间配额)。 前后台变化字段 (Variable vs. Fixe

19、d): 1表示改变前台进程时间配额,2表示前后台进程的时间配额相同。0或3表示缺省设置(Windows 2000专业版的缺省设置为改变前台进程时间配额,Windows 2000服务器版的缺省设置为前后台进程的时间配额相同)。,前台进程时间配额字段(Foreground Quantum Boost): 该字段的取值只能是0、1或2(取3是非法的,被视为2)。该字段是一个时间配额表索引,用于设置前后台进程的时间配额。该字段的值保存在内核变量PsPrioritySeparation。,提高前台线程优先级的潜在问题,假设用户首先启动了一个运行时间很长的电子表格计算程序,然后切换到一个计算密集型的应用(

20、如一个需要复杂图形显示的游戏)。 如果前台的游戏进程提高它的优先级,后台的电子表格将会几乎得不到CPU时间。 但增加游戏进程的时间配额,则不会停止电子表格计算的执行,只是给游戏进程的CPU时间多一些。 如果用户希望运行一个交互式应用程序时的优先级比其他交互进程的优先级高,可利用任务管理器来修改进程的优先级类型为中上或高级,也可利用命令行在启动应用时使用命令“start /abovenormal”或“start /high”来设置进程优先级类型。,Windows 2000线程调度策略(单处理器),主动切换,许多Win32等待函数调 (如WaitForSingleObject等)都使线程等待某个对

21、象,等待的对象可能有事件、互斥信号量、资源信号量、I/O操作、进程、线程、窗口消息等。 通常进入等待状态线程的时间配额不会被重置,而是在等待事件出现时,线程的时间配额被减1,相当于1/3个时钟间隔;如果线程的优先级大于等于14,在等待事件出现时,线程的优先级被重置。,抢先,当一个高优先级线程进入就绪状态时,正在处于运行状态的低优先级线程被抢先。,可能在以下两种情况下出现抢先: 高优先级线程的等待完成,即一个线程等待的事件出现。 一个线程的优先级被增加或减少。,用户态下运行的线程可以抢先内核态下运行的线程。 在判断一个线程是否被抢先时,并不考虑线程处于用户态还是内核态,调度器只是依据线程优先级进

22、行判断。 当线程被抢先时,它被放回相应优先级的就绪队列的队首。 处于实时优先级的线程在被抢先时,时间配额被重置为一个完整的时间片; 处于动态优先级的线程在被抢先时,时间配额不变,重新得到处理机使用权后将运行到剩余的时间配额用完。,时间片用完,线程完整用完一个规定的时间片值时,重新赋予新时间片值,优先级降一级(不低于基本优先级),放在相应优先级就绪队列的尾部;,如果刚用完时间配额的线程优先级降低了,Windows 2000将寻找一个优先级高于刚用完时间配额线程的新设置值的就绪线程。 如果刚用完时间配额的线程的优先级没有降低,并且有其他优先级相同的就绪线程,Windows 2000将选择相同优先级

23、的就绪队列中的下一个线程进入运行状态,刚用完时间配额的线程被排到就绪队列的队尾 如果没有优先级相同的就绪线程可运行,刚用完时间配额的线程将得到一个新的时间配额并继续运行。,结束(Termination),当线程完成运行时,它的状态从运行状态转到终止状态。线程完成运行的原因可能是通过调用ExitThread而从主函数中返回或通过被其他线程通过调用TerminateThread来终止。,优先级调整,线程由于调用等待函数而阻塞时,减少一个时间片,并依据等待事件类型提高优先级;如等待键盘事件比等待磁盘事件的提高幅度大。,在下列5种情况下,Windows 2000会提升线程的当前优先级: I/O操作完成

24、 信号量或事件等待结束 前台进程中的线程完成一个等待操作 由于窗口活动而唤醒图形用户接口线程 线程处于就绪状态超过一定时间,但没能进入运行状态(处理机饥饿),线程优先级提升的目的:改进系统吞吐量、响应时间等整体特征解决线程调度策略中潜在的不公正性。 Windows 2000永远不会提升实时优先级范围内(16至31)的线程优先级。,I/O操作完成后的线程优先级提升,在完成I/O操作后,Windows 2000将临时提升等待该操作线程的优先级,以保证等待I/O操作的线程能有更多的机会立即开始处理得到的结果。 为了避免I/O操作导致对某些线程的不公平偏好,在I/O操作完成后唤醒等待线程时将把该线程的

25、时间配额减1。 线程优先级的实际提升值是由设备驱动程序决定的。内核函数IoCompleteRequest来指定优先级提升的幅度。 线程优先级的提升幅度与I/O请求的响应时间要求是一致的,响应时间要求越高,优先级提升幅度越大。,线程优先级提升的建议值,线程优先级提升是以线程的基本优先级为基点的,不是以线程的当前优先级为基点。 当用完它的一个时间配额后,线程会降低一个优先级,并运行另一个时间配额。这个降低过程会一直进行下去,直到线程的优先级降低至原来的基本优先级。 优先级提升策略仅适用于可变优先级范围(0到15)内的线程。不管线程的优先级提升幅度有多大,提升后的优先级都不会超过15而进入实时优先级

26、。,等待事件和信号量后的线程优先级提升,当一个等待执行事件、信号量对象的线程完成等待后,提升一个优先级。 阻塞于事件或信号量的线程得到的处理机时间比处理机繁忙型线程要少,减少这种不平衡 提升是以线程的基本优先级为基点的,而不是线程的当前优先级。提升后的优先级永远不会超过15。在等待结束时,线程的时间配额被减1,并执行完剩余的时间配额;随后降低1个优先级,运行一个新的时间配额,直到优先级降低到初始的基本优先级。,前台线程在等待结束后的优先级提升,对于前台进程中的线程,一个内核对象上的等待操作完成时,内核函数会提升线程的当前优先级(不是线程的基本优先级) 。 在前台应用完成它的等待操作时小幅提升它

27、的优先级,以使它更有可能马上进入运行状态,有效改进前台应用的响应时间特征。 用户不能禁止这种优先级提升,甚至是在用户已利用Win32的函数SetThreadPriorityBoost禁止了其他的优先级提升策略时,也是如此。,图形用户接口线程被唤醒后的优先级提升,拥有窗口的线程在被窗口活动唤醒(如收到窗口消息)时将得到一个幅度为2的额外优先级提升。 窗口系统(Win32k.sys)在调用函数KeSetEvent时实施这种优先级提升,KeSetEvent函数调用设置一个事件,用于唤醒一个图形用户接口线程。 这种优先级提升的原因是改进交互应用的响应时间。,对处理机饥饿线程的优先级提升,系统线程“平衡

28、集管理器(balance set manager)” 会每秒钟检查一次就绪队列,是否存在一直在就绪队列中排队超过300个时钟中断间隔的线程。 如果找到这样的线程,平衡集管理器将把该线程的优先级提升到15,并分配给它一个长度为正常值两倍的时间配额; 当被提升线程用完它的时间配额后,该线程的优先级立即衰减到它原来的基本优先级。,SMP系统上Windows 2000线程调度,亲合关系 亲合掩码该线程可在哪些处理机上运行。 线程的亲合掩码是从进程的亲合掩码继承得到的。 缺省时,所有进程(即所有线程)的亲合掩码为系统中所有可用处理机的集合。应用程序通过调用SetProcessAffinityMask函数

29、来指定亲合掩码;,当Windows 2000试图调度优先级最高的可执行线程时,有几个因素会影响到处理机的选择。Windows 2000只保证一个优先级最高的线程处于运行状态。,首选处理机(ideal processor):线程运行时的偏好处理机; 线程创建后,Windows 2000系统不会修改线程的首选处理机设置; 应用程序可通过SetThreadIdealProcessor函数来修改线程的首选处理机。 第二处理机(last processor):线程第二个选择的运行处理机;,就绪线程的运行处理机选择,当线程进入运行状态时,Windows 2000首先试图调度该线程到一个空闲处理机上运行。如

30、果有多个空闲处理机,线程调度器的调度顺序为: 线程的首选处理机 线程的第二处理机 当前执行处理机(即正在执行调度器代码的处理机)。 如果这些处理机都不是空闲的,Windows 2000将依据处理机标识从高到低扫描系统中的空闲处理机状态,选择找到的第一个空闲处理机。,如果线程进入就绪状态时,所有处理机都处于繁忙状态,Windows 2000将检查一个处于运行状态或备用状态的线程,判断它是否可抢先。检查的顺序如下: 线程的首选处理机 线程的第二处理机 如果这两个处理机都不在线程的亲合掩码中,Windows 2000将依据活动处理机掩码选择该线程可运行的编号最大的处理机。,Windows 2000并

31、不检查所有处理机上的运行线程和备用线程的优先级,而仅仅检查一个被选中处理机上的运行线程和备用线程的优先级。 如果在被选中的处理机上没有线程可被抢先,则新线程放入相应优先级的就绪队列,并等待调度执行。,为特定的处理机调度线程,在多处理机系统,Windows 2000不能简单地从就绪队列中取第一个线程,它要在亲合掩码限制下寻找一个满足下列条件之一的线程。 线程的上一次运行是在该处理机上; 线程的首选处理机是该处理机; 处于就绪状态的时间超过2个时间配额; 优先级大于等于24; 如果Windows 2000不能找到满足要求的线程,它将从就绪队列的队首取第一个线程进入运行状态。,高优先级就绪线程可能不

32、处于运行状态,有可能出现这种情况,一个比当前正在运行线程优先级更高的线程处于就绪状态,但不能立即抢先当前线程,进入运行状态。,例如:假设0号处理机上正运行优先级为8的线程,1号处理机上正运行优先级为4的线程;这时一个只能在0号处理机上运行的优先级为6的线程进入就绪状态。在这种情况下,优先级为6的线程只能等待0号处理机上优先级为8的线程结束。因为Windows 2000不会为了让优先级为6的线程在0号处理机上运行,而把优先级为8的线程从0号处理机移到1号处理机。,空闲线程,如果在一个处理机上没有可运行的线程,Windows 2000/XP会调度相应处理机对应的空闲线程。 由于在多处理机系统中可能两个处理机同时运行空闲线程,所以系统中的每个处理机都有一个对应的空闲线程。 Windows 2000/XP给空闲线程指定的线程优先级为0,该空闲线程只在没有其他线程要运行时才运行。,空闲线程的功能,空闲线程的功能就是在一个循环中检测是否有要进行的工作。其基本的控制流程如下: 处理所有待处理的中断请求。 检查是否有待处理的DPC请求。如果有,则清除相应软中断并执行DPC。 检查是否有就绪线程可进入运行状态。如果有,调度相应线程进入运行状态。 调用硬件抽象层的处理机空闲例程,执行相应的电源管理功能。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报