ランキュー初期化
sched_4bsd_setup
sys/kern/sched_4bsd.c
static void
sched_4bsd_setup(void)
{
/*
* Decay 95% of `ts_pctcpu' in 60 seconds; see CCPU_SHIFT
* before changing.
*/
ccpu = 0.95122942450071400909 * FSCALE; /* exp(-1/20) */
setup_runqs();
/* Account for thread0. */
sched_load_add();
ast_register(TDA_SCHED_PRIV, ASTR_UNCOND, 0, maybe_resched_ast);
}
setup_runqs
sys/kern/sched_4bsd.c
static void
setup_runqs(void)
{
#ifdef SMP
int i;
for (i = 0; i < MAXCPU; ++i)
runq_init(&runq_pcpu[i]);
#endif
runq_init(&runq);
}
runq_init
sys/kern/kern_switch.c
/*
* Initialize a run structure.
*/
void
runq_init(struct runq *rq)
{
int i;
bzero(rq, sizeof(*rq));
for (i = 0; i < RQ_NQS; i++)
TAILQ_INIT(&rq->rq_queues[i]);
}
TAILQ_INIT
sys/sys/queue.h
#define TAILQ_FIRST(head) ((head)->tqh_first)
#ifdef QUEUE_MACRO_DEBUG_TRACE
#define QMD_TRACE_HEAD(head) do { \
(head)->trace.prevline = (head)->trace.lastline; \
(head)->trace.prevfile = (head)->trace.lastfile; \
(head)->trace.lastline = __LINE__; \
(head)->trace.lastfile = __FILE__; \
} while (0)
#else
#define QMD_TRACE_HEAD(head)
#endif
#define TAILQ_INIT(head) do { \
TAILQ_FIRST((head)) = NULL; \
(head)->tqh_last = &TAILQ_FIRST((head)); \
QMD_TRACE_HEAD(head); \
} while (0)
sched_load_add
sys/kern/sched_4bsd.c
static __inline void
sched_load_add(void)
{
sched_tdcnt++;
KTR_COUNTER0(KTR_SCHED, "load", "global load", sched_tdcnt);
SDT_PROBE2(sched, , , load__change, NOCPU, sched_tdcnt);
}