NAME
sched_4bsd
—
The 4.4BSD thread scheduler
SYNOPSIS
#include
<sys/sched.h>
void
resetpriority
(lwp_t
*l);
void
sched_tick
(struct
cpu_info *ci);
void
sched_schedclock
(lwp_t
*l);
void
sched_pstats_hook
(struct
proc *p, int
minslp);
void
sched_setrunnable
(lwp_t
*l);
void
updatepri
(lwp_t
*l);
DESCRIPTION
The traditional 4.4BSD scheduler employs a “multilevel feedback queues” algorithm, favouring interactive, short-running threads to CPU-bound ones.resetpriority
()
recomputes the priority of a thread running in user mode. If the resulting
priority is higher than that of the current thread, a reschedule is
arranged.
sched_tick
()
gets called from
hardclock(9) every 100ms to force a switch between equal priority
threads.
The priority of the current thread is
adjusted through
sched_schedclock
().
The priority of a thread gets worse as it accumulates CPU time.
sched_pstats_hook
()
gets called from
sched_pstats
()
every Hz ticks in order to recompute the priorities of all threads.
sched_setrunnable
()
checks if an LWP has slept for more than one second. If so, its priority is
updated by
updatepri
().
EXAMPLES
To determine the scheduler currently in use
$ sysctl kern.sched.name kern.sched.name = 4.4BSD
CODE REFERENCES
The 4.4BSD scheduler subsystem is implemented within the file sys/kern/sched_4bsd.c.
SEE ALSO
csf(9), hardclock(9), mi_switch(9), sched_m2(9), userret(9)
Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, and John S. Quarterman, The Design and Implementation of the 4.4BSD Operating System, Addison Wesley, 1996.