| CSF(9) | Kernel Developer's Manual | CSF(9) |
CSF —
#include <sys/sched.h>
void
sched_rqinit(void);
void
sched_setup(void);
void
sched_cpuattach(struct
cpu_info *);
void
sched_tick(struct
cpu_info *);
void
sched_schedclock(lwp_t
*);
bool
sched_curcpu_runnable_p(void);
lwp_t *
sched_nextlwp(void);
void
sched_enqueue(lwp_t
*, bool);
void
sched_dequeue(lwp_t
*);
void
sched_nice(struct
proc *, int);
void
sched_proc_fork(struct
proc *, struct proc
*);
void
sched_proc_exit(struct
proc *, struct proc
*);
void
sched_lwp_fork(lwp_t
*);
void
sched_lwp_exit(lwp_t
*);
void
sched_setrunnable(lwp_t
*);
void
sched_print_runqueue(void
(*pr)(const char *, ...));
void
sched_pstats_hook(struct
proc *, int);
void
sched_pstats(void
*arg);
pri_t
sched_kpri(lwp_t
*);
void
resched_cpu(lwp_t
*);
void
setrunnable();
void
schedclock(lwp_t
*);
void
sched_init(void);
CSF provides a modular and self-contained interface for
implementing different thread scheduling algorithms. The different schedulers
can be selected at compile-time. Currently, the schedulers available are
sched_4bsd(9), the
traditional 4.4BSD thread scheduler, and
sched_m2(9) which implements a
SVR4/Solaris like approach.
The interface is divided into two parts: A set of functions each scheduler needs to implement and common functions used by all schedulers.
sched_cpuattach(struct cpu_info
*)sched_rqinit(void)sched_setup(void)sched_enqueue(lwp_t *,
bool)sched_dequeue(lwp_t *)sched_nextlwp(void)sched_curcpu_runnable_p(void)sched_print_runqueue(void
(*pr)(const char *, ...))sched_tick(struct cpu_info
*)sched_schedclock(lwp_t *)schedclock() in order to
handle priority adjustment.sched_nice(struct proc *,
int)sched_proc_fork(struct proc *,
struct proc *)fork().sched_proc_exit(struct proc *,
struct proc *)sched_lwp_fork(lwp_t *)sched_lwp_exit(lwp_t *)sched_setrunnable(lwp_t
*)setrunnable().sched_pstats_hook(struct proc
*, int)sched_pstats().sched_kpri(lwp_t *)sched_pstats(void *)resched_cpu(lwp_t *)setrunnable(lwp_t *)schedclock(lwp_t *)statclock().sched_init(void)sched_pstats() and call
sched_setup() to initialize any other
scheduler-specific data.CSF programming interface is defined within the file
sys/sys/sched.h.
Functions common to all scheduler implementations are in sys/kern/kern_synch.c.
The traditional 4.4BSD scheduler is implemented in sys/kern/sched_4bsd.c.
The M2 scheduler is implemented in sys/kern/sched_m2.c.
CSF appeared in NetBSD 5.0.
CSF was written by Daniel
Sieger ⟨dsieger@NetBSD.org⟩.
| October 27, 2014 | NetBSD 10.0 |