分类:
2009-03-02 17:38:33
POSIX 标准指定了三种调度策略:先入先出策略 (SCHED_FIFO)、循环策略 (SCHED_RR) 和自定
义策略 (SCHED_OTHER)。SCHED_FIFO 是基于队列的调度程序,对于每个优先级都会使用不同
的队列。SCHED_RR 与 FIFO 相似,不同的是前者的每个线程都有一个执行时间配额。
SCHED_FIFO 和 SCHED_RR 是对 POSIX Realtime 的扩展。SCHED_OTHER 是缺省的调度策略。
SCHED_FIFO:允许一个线程一直运行直到有更高优先级的线程准备好或者自愿阻塞自己。在SCHED_FIFO调度策略下,当一个线程准备好时,除非有平等或者更高优先级的线程在运行,否则它会很快开始运行。
SCHED_RR:
即轮询与SCHED_FIFO不同的地方是:在SCHED_RR调度策略下,当一个线程运行了一个固定的时间段(时间片间隔)后还没有阻塞,这时候如果有
相同的优先级(SCHED_FIFO或者SCHED_RR)线程准备好时,运行中的线程将被抢占以使准备好的同优先级的线程得以得到运行的机会。
那么这个模型怎么和solaris的多线程调度模型结合起来的呢?
Solaris内核为内核线程实现了全局的线程优先级模型。内核调度程序,或称dispatcher,使用这个模型选择哪个内核线程作为许多潜在的 可运行内核线程中的下一个执行。内核支持抢占(preemption)的概念,允许较高优先级的线程抢占运行的线程以便高优先级线程可以执行。内核本身是 可抢占的,这个创新为高优先级线程提供时间关键的调度。
共有170个全局的优先级;数字大的优先级值对应于较高的线程优先级。优先级命名空间被分割为不同的调度类(参见图1-3)。Solaris调度程 序实现了多个调度类,允许不同的调度策略被用于线程。三个基本的调度类是TS(IA是加强的TS)、SYS和RT。调度类如图1-3所示并所述如下。
图1-3全局的线程优先级 |
TS:分时调度类是进程和进程内所有内核线程的缺省调度类。它根据最近的处理器使用情况动态改变进程优先级,以求在系统中的内核线程之间平均分配处
理器资源。进程优先级和时间量是根据分时调度表在每个时钟报时信号或者在I/O睡眠后唤醒时计算的。TS类的优先级范围为0到59。
IA:交互类是强化的TS类,用于桌面窗口系统提高焦点下窗口内的线程的优先级。IA类线程的全局优先级范围也是0到59。
FSS:公平份额的调度类是基于份额的,而不是基于优先级;可用的CPU资源以称为份额的单位被分配,线程根据份额分配和处理器利用率被调度。FSS类在Solaris 9被引入,通过Solaris项目数据库管理。
FX:固定优先级调度类。FX类中的线程不会改变优先级。贯穿线程的生存周期,优先级保持固定。FX类在Solaris 9被引入。
SYS:系统类被内核用于调度内核线程。系统类的线程是绑定的线程;即,没有时间量——它们一直运行除非被阻塞或者结束。系统类使用60到99的优先级。
RT:实时类实现固定优先级、固定时间量的调度。实时类使用100到159的优先级。注意RT类中线程的优先级高于SYS类的内核线程的优先级。RT类线程会抢占操作系统内核线程。
如图1-3所示,中断优先级只用于中断线程。他们在优先级方案的位置是为了保证中断线程优先于系统中的所有其他线程。
可用的调度类,与用户和管理员命令集一起观察和管理线程优先级和类,为任何生产工作负载、工作负载组合或者运行的单个Solaris内核实例提供了丰富的环境,满足性能需求和服务水平。