NAME
anyhigher, anyready, hzsched, procpriority, procrestore, procsave,
scheddump, schedinit, sched, yield – scheduler interactions |
SYNOPSIS
int anyhigher(void) int anyready(void) void hzsched(void) void procpriority(Proc *p, int priority, int fixed) void procrestore(Proc *p) void procsave(Proc *p) void procwired(Proc *p, int machno) void scheddump(void) void schedinit(void) void sched(void) void yield(void) enum {
|
DESCRIPTION
These functions define the priority process scheduler's interface.
Processes are scheduled strictly by priority, and processor affinity.
When possible, processes with no affinity will be rescheduled
on the same processor. Within a priority, scheduling is round–robin.
Long–running processes of the same priority are
preempted and rescheduled. But cpu use (or lack thereof) may adjust
the priority up or down, unless it has been explicitly fixed.
Kernel processes are started with PriKproc while user processes
start with PriNormal. Anyhigher returns true if any higher priority processes are runnable, while anyready returns true if any processes are runnable at all. Yield gives up the processor and pretends to consume ½ clock tick, while sched invokes the scheduler, potentially recursively. Sched may be called outside process context. Either may return immediately. Schedinit initializes scheduling on the running processor. Procpriority sets a process' priority directly. Fixed–priority processes are not reprioritized based on cpu use. Procwired makes a process runnable only on a single processor. Hzsched is called by the clock routine on every tick to collect statistics. Periodically (typically once a second) hzsched reprioritizes based on cpu use.
Procsave and procrestore are architecture–dependent routines used
by the scheduler to save and restore processes. Scheddump prints
scheduler statistics. |
SOURCE
/sys/src/9/port/proc.c Procsave and procrestore can be found at /sys/src/9/*/main.c /sys/src/9/*/arch.c /sys/src/9/*/trap.c |
SEE ALSO
edf(9), sleep(9) |