July 14, 2007 SCHED_4BSD 9

### NAME

sched_4bsd - The 4.4BSD thread scheduler

### SYNOPSIS

```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 NetBSD thread scheduling sub-system 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(``).

### CODE REFERENCES

This section describes places within the NetBSD source tree where actual code implementing the scheduler can be found. All pathnames are relative to ```/usr/src`.

The 4.4BSD scheduler subsystem is implemented within the file ```sys/kern/sched_4bsd.c`.

### SEE ALSO

csf(9), hardclock(9), mi_switch(9), userret(9)