|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 处理器管理 > 任务调度 >
|
被考次数:3次
被考频率:中频率
总体答错率:51%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
考试要求:掌握
相关知识点:6个
|
|
|
|
|
任务调度的首要问题是何时进行调度,即调度发生的时机。一般来说,在以下几种情形下,可能会发生任务的调度。
|
|
|
(1)当一个新的任务被创建时,需要做出一个调度决策,是立即执行这个新任务还是继续执行父任务?
|
|
|
(2)当一个任务运行结束时,它不再占用CPU,这时调度器必须作出一个决策,从就绪队列中选择某个任务去运行。如果此时没有任务处于就绪状态,系统一般会调度一个特殊的空闲任务。
|
|
|
(3)当一个任务由于I/O操作、信号量或其他原因被阻塞时,也必须另选一个任务运行。
|
|
|
(4)当一个I/O中断发生时,表明某个I/O操作已经完成,而等待该I/O操作的任务将从阻塞状态变为就绪状态,此时可能需要做出一个调度决策,是立即执行这个新就绪的任务,还是继续执行刚才被中断的那个任务。
|
|
|
(5)当一个时钟中断发生时,表明一个时钟节拍已经结束。这时,可能会唤醒一些延时的任务,使它们变为就绪状态,也可能会发现当前任务的时间片已用完,从而把它变为就绪状态。在这些情形下,也需要调度器来重新调度。
|
|
|
|
任务调度的第二个问题是调度的方式,主要有两种方式:不可抢占调度和可抢占调度。
|
|
|
(1)不可抢占方式(non preemptive)。如果一个任务被调度程序选中,就会一直地运行下去,直到它因为某种原因(如I/O操作或任务间的同步)被阻塞了,或者它主动地交出了CPU的使用权。在不可抢占的调度方式下,当出现调度时机当中的前三种情形时,即新任务创建、任务运行结束及任务被阻塞,都有可能会发生调度。而对于第四种和第五种情形,即发生各种中断的时候,虽然也会有中断处理程序,但是它并不会去调用调度程序。因此,当中断处理完成后,又会回到刚才被打断的任务继续执行。
|
|
|
(2)可抢占方式(preemptive)。当一个任务正在运行的时候,调度程序可以去打断它,并安排另外的任务去运行。在这种调度方式下,对于调度时机当中的所有五种情形,都有可能会发生调度。另外,在其他的一些情形下,假设调度算法是按照任务的优先级来进行调度,那么一旦在就绪队列当中有任务的优先级高于当前正在运行的任务,就可能立即进行调度,转让CPU。
|
|
|
实时操作系统大都采用了可抢占的调度方式,使一些比较重要的关键任务能够打断那些不太重要的非关键任务的执行,以确保关键任务的截止时间能够得到满足。
|
|
|
|
在嵌入式操作系统当中,存在着多种调度算法,每一种算法都有各自的优点和缺点。因此,任务调度的第三个问题是调度算法的性能指标,即如何来评价一个调度算法的好坏。这些指标主要包括:
|
|
|
.响应时间:调度器为一个就绪任务进行上下文切换时所需的时间,以及任务在就绪队列中的等待时间;
|
|
|
|
.调度开销:调度器在做出调度决策时所需要的时间和空间开销;
|
|
|
.公平性:大致相当的两个任务所得到的CPU时间也应该是大致相同的。另外,要防止饥饿,即某个任务始终得不到处理器去运行;
|
|
|
.均衡性:要尽可能使整个系统的各个部分(CPU、I/O)都忙起来,提高系统资源的使用效率;
|
|
|
|
在这些指标当中,有一些是可以共存的,也有一些是相互牵制的。因此,对于一个实际的调度算法来说,这些指标不可能全部都实现,而是要根据系统的需要,有一个综合的权衡和折衷的过程。
|
|
|
|
(1)可抢占调度(preemptive scheduling)。允许任务执行中被其他任务抢占的调度程序,称作可抢占调度程序,其采用调度算法称作抢占式调度算法。抢占式调度提供了很大的灵活性,因为任务执行能被分割成任意的时间间隔来适应不同的执行方式,从而获得更高的处理器利用率。但进行可调度性分析时必须考虑现场切换的时间,而且这一时间必须显著的小于任务的执行时间,否则会浪费大量的处理器时间用于抢占造成的现场切换。使用抢占式调度算法时,每个任务使用一个栈空间,所以还会消耗较多的内存资源。
|
|
|
(2)不可抢占调度(non-preemptive scheduling)。不允许任务执行中被其他任务抢占的调度程序称作不可抢占式调度程序,使用的算法称作非抢占式调度算法。在不可抢占式调度中,任务一旦执行就不会被其他任务抢占,因此使用了比可抢占式调度要少的现场切换,节省了处理器时间。但由于不允许抢占,有时会降低任务集合的可调度性。不可抢占式调度的一种极端形式是按照先到先出(服务)FIFO(First-In-First-Out,FIFO)的方式执行任务。后到的高优先级任务会被排在前面的低优先级任务之后而被阻塞,而且阻塞时间是不确定的,会显著降低高优先级任务的可调度性。使用不可抢占式调度算法时,因为任务之间可以共享一个栈空间,所以能够减少内存消耗。
|
|
|
不可抢占调度由于任务的独占性,优点是共享数据的保护需求较低,缺点是系统的响应时间得不到保证。由于机载领域实时要求较高,不选择这种调度方式。
|
|
|
(3)同优先级任务的时间片轮转调度算法(round-robin)。同优先级任务的时间片轮转调度是轮转调度的一种,目的是使实时系统中优先级相同的任务具有平等的运行权利。时间片轮转调度算法是指当有两个或多个就绪任务具有相同的优先级且它们是就绪任务中优先级最高的任务时,任务调度程序按照这组任务就绪的先后次序调度第一个任务,让它运行一段时间。运行的这段时间称为时间片(time slicing)。当任务运行完一个时间片后,该任务即使还没有停止运行,也必须释放处理器让下一个与它相同优先级的任务运行(假设这时没有更高优先级的任务就绪)。释放处理器的任务被排到同优先级就绪链的链尾,等待再次运行。
|
|
|