Processes in the time-sharing class which are
running in user mode (or in kernel mode
before going to sleep) are scheduled according to the parameters in
a time-sharing dispatcher parameter table
(Time-sharing processes running in kernel mode after sleeping
are run within a special range of priorities reserved for such processes
and are not affected by the parameters in the ts_dptbl until they
return to user mode.)
The ts_dptbl consists of an array of parameter structures
struct ts_dpent), one for each of the n priority levels
used by time-sharing processes in user mode.
The properties of a given priority level i are specified
by the ith parameter structure in this array (ts_dptbli).
A parameter structure consists of the following members. These are also described in the /usr/include/sys/ts.h header file.
ts_globpriis the only member of the ts_dptbl which cannot be changed with dispadmin(1M).
ts_dispwaitis initialized to zero each time a time-sharing process is placed back on the dispatcher queue after its time quantum has expired or when it is awakened (
ts_dispwaitis not reset to zero when a process is preempted by a higher priority process). This counter is incremented once per second for each process on the dispatcher queue. If a process's
ts_dispwaitvalue exceeds the
ts_maxwaitvalue for its level, the process's priority is changed to that indicated by
ts_lwait. The purpose of this field is to prevent starvation.
ts_dispwaitis greater than
An administrator can affect the behavior of the time-sharing portion of the scheduler by reconfiguring the ts_dptbl. There are two methods available for doing this.
ts_globpriall of the members of the ts_dptbl can be examined and modified on a running system using the dispadmin(1M) command. Invoking dispadmin for the time-sharing class allows the administrator to retrieve the current ts_dptbl configuration from the kernel's in-core table, or overwrite the in-core table with values from a configuration file. The configuration file used for input to dispadmin must conform to the specific format described below.
Blank lines are ignored and any part of a line to the right of a #
symbol is treated as a comment.
The first non-blank, non-comment line must indicate the resolution to be
used for interpreting the
ts_quantum time quantum values.
The resolution is specified as
where res is a positive integer between 1 and 1,000,000,000 inclusive
and the resolution used is the reciprocal of res in seconds
RES=1000 specifies millisecond resolution).
Although very fine (nanosecond) resolution may be specified, the time quantum
lengths are rounded up to the next integral multiple of the system
The system clock's resolution is hardware-dependent;
this resolution can be calculated from the value of HZ,
which is defined in the file /usr/include/sys/param.h.
HZ gives the number of clock ticks per second of the system clock.
For example, an HZ of 100 specifies 100 clock ticks per second,
or one tick every 10 milliseconds (that is, this system clock has a resolution
of 10 milliseconds).
If the -t and -r options
are used to specify a time quantum of 34 milliseconds, it is rounded up
to 4 ticks (40 milliseconds) on a machine with an HZ of 100.
The remaining lines in the file are used to specify the parameter values for each of the time-sharing priority levels. The first line specifies the parameters for time-sharing level 0, the second line specifies the parameters for time-sharing level 1, and so on. There must be exactly one line for each configured time-sharing priority level.
No sanity checking is done on the ts_dptbl values specified in the ts master file. Specifying an inconsistent or nonsensical ts_dptbl configuration through the ts master file could cause serious performance problems and/or cause the system to panic.
# Time-Sharing Dispatcher Configuration File RES=1000
# ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY LEVEL 500 0 10 5 10 # 0 500 0 11 5 11 # 1 500 1 12 5 12 # 2 500 1 13 5 13 # 3 500 2 14 5 14 # 4 500 2 15 5 15 # 5 450 3 16 5 16 # 6 450 3 17 5 17 # 7 . . . . . . . . . . . . . . . . . . . . . 50 48 59 5 59 # 58 50 49 59 5 59 # 59