概述
对于多处理器调度,此处概述了多个处理器可能带来的问题和设计上的一些问题;对于实时调度,概述了两种调度方法:限时调度和速率单调调度。
多处理器系统可以分为以下几类:
调度上需要考虑三种问题:
如果多处理器结构统一,即在内存、I/O设备的访问时没有特殊的优势,最简单的方法时将处理器看作一个资源池,然后按照要求分配到对应处理器。那么要静态还是动态分配呢?
如果一个进程的生命周期都被分配到一个处理器上(静态分配),则需要为每个处理器维护一个短程队列,优点是开销小(所有进程只分配一次,使用专门处理器的一个策略时组调度),缺点时一个处理器可能一直处于空闲状态,而另一个处理器积压许多工作,避免此方法是使用一个公共队是列,所有进程进入并分配到任意一个可用的处理器上。在紧密耦合的共享储存器结构中,所有处理器可以得到任意进程的上下文环境信息(调度进程的开销与被调度到的处理器无关)。另一种分配方法是动态负载均衡(动态分配),线程可以在不同处理器所对应的队列里转移,Linux使用此策略。
在分配到处理器的过程中,主要有两种方法:主从式、对等式。
如果每个进程使用静态分配,就会有一个新问题:此处理器支持多道程序吗?如果绑定后因为等待I/O或考虑到并发/同步而被频繁阻塞,则会有处理器的浪费。
这是关于选择那个进程运行的策略,在多道单处理器上面,使用优先级或基于历史的高级调度算法比简单的FCFS策略性能更好。而在多处理器上,这些复杂性可能不必要,甚至有相反效果,而简单的方法可能更有效。对于线程调度则有比优先级或执行历史更重要的新问题。
实际大多数传统处理器系统,使用多条基于优先级的队列,且都在相同的处理池中执行。并非指定专门处理器或一个处理器使用一个队列。
在一个双处理器和单处理器系统里,多处理的每个处理器处理速度是单处理的一半。使用FCFS调度、轮转法和最短剩余时间法后进行比较,得到进程服务时间的对比,即一个进程的生命周期里使用处理器的时间。轮转法的时间片长度比上下文环境切换的开销大,且比平均服务时间短。该执行结果取决于每个进程之间的服务时间变化,从每个服务时间的差异从0增加,可得到一个结论:对于双处理器,不同调度算法的差距没有单处理表现的大,当处理器增多时该结论更加确定。因此多处理器使用简单的FCFS或静态优先级方案的FCFS即可。(在多处理器的FCSF调度中,一个长进程很少被中断,其他进程可以使用其他的处理器,因此相对单处理器短进程等待时间较少)
(见文献Sauer, C. and Chandy, K. Computer Systems Performance Mondling. Englewood Cliffs, NJ:Prentice Hall, 1981)
有4种比较突出的方法:
进程不是分配到固定的处理器,而是有系统维护一个就绪进程的全局队列,当处理器空闲时就从队列里选择一个进程。
优点是:
缺点是:
一组相关进程基于一对一的原则,同时调度到一组处理器上运行。提高程序性能的显著方式是使进程切换开销最小,即让有联系的线程可以同时运行。可以按照每个应用程序的线程个数加权分配不同的组调度时间,以减少处理器浪费的时间。
优点:
与负载分配的方法相反,指定线程运行到某个处理器。处理器数目与线程数相等,线程结束时处理器返回到处理器池里。
看上去会浪费处理器时间,即应用程序一个线程被阻塞且等待I/O或与其他线程的同步,则该处理会一直空闲,属于非多道程序设计。但有以下两点的情况可以解释使用此策略的原因:
在其他方案里提出一个类似虚拟内存的工作集术语--活动工作集:为了保证应用程序以可接受的速度运行,在处理器上必须同时调度的最少数目的线程。和存储器管理方案一样,调度活动工作集中所有元素是的失败可能导致处理器抖动:调度其他线程时,取消了未来将要调度执行的线程。类似内存碎片,处理器碎片指当一些处理器剩余的数目和合适程度上不满足正在等待的应用程序的需要。而组调度和专用处理器分配则有意避免这些问题。
线程数可变,通过调整负载提高利用率。
将处理器分配给作业,每个作业将他的部分可以运行任务映射到线程,使用当前分配的处理器运行。而关于运行那个子集以及需要挂起那个线程的决策留个单个应用程序决定。
调度策略:
实时任务或进程是指该进程的执行与计算机系统外部的某些进程、功能或事件集合有关,并且为了保证有效和正确的与外部环境交互,必须满足一个或多个最后期限。
实时操作系统是指能够管理实时进程的操作系统。在实时的操作系统中,传统的调度算法原则不适用,关键因素是满足最后期限,很大程度上依靠抢占和对相对最后期限有反应的算法适合于这种上下文。
目标是尽可能快速启动实时任务,因此强调快速中断处理和任务分派。尽管存在动态资源请求和冲突、处理过载和软硬件故障,实时应用程序不关注绝对速度,关注在最有价值的时间完成或启动任务。
关于实时任务调度的有效、合适的方法,都基于每个任务的额外信息,常见信息有:
相关的策略有:
速率单调调度RMS是基于任务的周期给它们指定优先级,周期越短(速率越高)优先越高,周期与速率互为倒数。处理器利用率为执行时间/周期时间。
由于每个任务的处理器利用率和不大于1,所以可以通过计算总处理器利用率以判断是否所以任务可以实时执行完毕。而RMS对于以下不等式成立:n个任务的总利用率和不大于n*(2^(1/n) -1)。
选择RMS的原因是: