ランキュー初期化 =========================== sched_4bsd_setup --------------------------- - sys/kern/sched_4bsd.c .. code-block:: 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 .. code-block:: 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 .. code-block:: 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 .. code-block:: c #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 .. code-block:: 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); }