编程接口指南

调度类

SunOS 内核按优先级分发进程。调度器或分发程序支持调度类这一概念。可以将类定义为实时类 (RT)、系统类 (SYS) 和分时类 (TS)。每个类都有一个唯一的调度策略,用于分发属于此类的进程。

内核首先分发优先级最高的进程。缺省情况下,实时进程优先于 sysTS 进程。管理员可以配置系统以使 TS 进程和 RT 进程的优先级重叠。

下图说明了 SunOS 内核所查看的类的概念。

图 10–4 调度类的分发优先级

此图形显示了优先级高于实时、内核或分时进程中软件中断的硬件系统中断。

无法由软件控制的硬件中断具有最高优先级。处理中断的例程会从中断处直接立即进行分发,而不会考虑当前进程的优先级。

实时进程具有最高的缺省软件优先级。RT 类中的进程具有优先级以及时间量程值。RT 进程将严格按照这些参数进行调度。只要 RT 进程准备运行,SYSTS 进程便无法运行。通过固定优先级调度,关键进程可以按照预先确定的顺序运行,直到完成为止。这些优先级永远不会更改,除非应用程序对其进行更改。

RT 类的进程可继承父进程的时间量程(有限或无限)。具有有限时间量程的进程将一直运行到时间量程到期为止。如果具有有限时间量程的进程在等待 I/O 事件时阻塞,或者被优先级较高的可运行实时进程抢占,则该进程也会停止运行。具有无限时间量程的进程仅当终止、阻塞或被抢占时才会停止执行。

SYS 类用于调度特殊系统进程(如换页、STREAMS 和交换程序)的执行。不能将进程的类更改为 SYS 类。SYS 类的进程具有内核在进程启动时所建立的固定优先级。

分时 (TS) 进程的优先级最低。TS 类的进程以动态方式进行调度,每个时间片为数百毫秒。TS 调度器可以循环方式切换上下文,通常足以为每个进程提供平等的运行机会,具体取决于以下各项:

缺省分时策略会为优先级较低的进程提供较大的时间片。

子进程可通过 fork(2) 继承父进程的调度类和属性。通过 exec(2) 无法更改进程的调度类和属性。

每个调度类通过不同的算法分发。内核将调用与类有关的例程以做出有关 CPU 进程调度的决定。内核与类无关,并会删除队列中优先级最高的进程。每个类都负责针对属于此类的进程计算其优先级值。该值将放入此进程的分发优先级变量中。

如下图所示,每个类算法都采用不同的方法来确定将放入全局运行队列中的最高优先级进程。

图 10–5 内核分发队列

上下文说明了此图形。

每个类都具有应用于此类中的进程的一组优先级别。特定于类的映射会将这些优先级映射到一组全局优先级。不要求一组全局调度优先级映射从零开始或具有连续性。

缺省情况下,分时 (TS) 进程的全局优先级值的范围为 -20 到 +20。这些全局优先级值映射到内核 0-40,临时指定值最高为 99。实时 (RT) 进程的缺省优先级范围为 0-59,并映射到内核 100 到 159。与类无关的内核代码将运行队列中具有最高全局优先级的进程。