ランキュー初期化

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);
}