Note that there are some explanatory texts on larger screens.

plurals
  1. POFunction missing from proc.c in minix 3
    primarykey
    data
    text
    <p>I installed minix 3 on vmware player and i'm trying to find a function which as i read is in /usr/src/kernel in file "proc.c". The function is called sched().</p> <p>It should be between this 2 functions:</p> <pre><code> /*===========================================================================* * dequeue * *===========================================================================*/ void dequeue(struct proc *rp) /* this process is no longer runnable */ { /* A process must be removed from the scheduling queues, for example, because * it has blocked. If the currently active process is removed, a new process * is picked to run by calling pick_proc(). * * This function can operate x-cpu as it always removes the process from the * queue of the cpu the process is currently assigned to. */ int q = rp-&gt;p_priority; /* queue to use */ struct proc **xpp; /* iterate over queue */ struct proc *prev_xp; u64_t tsc, tsc_delta; struct proc **rdy_tail; assert(proc_ptr_ok(rp)); assert(!proc_is_runnable(rp)); /* Side-effect for kernel: check if the task's stack still is ok? */ assert (!iskernelp(rp) || *priv(rp)-&gt;s_stack_guard == STACK_GUARD); rdy_tail = get_cpu_var(rp-&gt;p_cpu, run_q_tail); /* Now make sure that the process is not in its ready queue. Remove the * process if it is found. A process can be made unready even if it is not * running by being sent a signal that kills it. */ prev_xp = NULL; for (xpp = get_cpu_var_ptr(rp-&gt;p_cpu, run_q_head[q]); *xpp; xpp = &amp;(*xpp)-&gt;p_nextready) { if (*xpp == rp) { /* found process to remove */ *xpp = (*xpp)-&gt;p_nextready; /* replace with next chain */ if (rp == rdy_tail[q]) { /* queue tail removed */ rdy_tail[q] = prev_xp; /* set new tail */ } break; } prev_xp = *xpp; /* save previous in chain */ } /* Process accounting for scheduling */ rp-&gt;p_accounting.dequeues++; /* this is not all that accurate on virtual machines, especially with IO bound processes that only spend a short amount of time in the queue at a time. */ if (!is_zero64(rp-&gt;p_accounting.enter_queue)) { read_tsc_64(&amp;tsc); tsc_delta = sub64(tsc, rp-&gt;p_accounting.enter_queue); rp-&gt;p_accounting.time_in_queue = add64(rp-&gt;p_accounting.time_in_queue, tsc_delta); make_zero64(rp-&gt;p_accounting.enter_queue); } #if DEBUG_SANITYCHECKS assert(runqueues_ok_local()); #endif } </code></pre> <p>*<em>LIKE THIS /</em>===========================================================================* * sched * <em>===========================================================================</em>/</p> <pre><code> it should be here but is missing** /*===========================================================================* * pick_proc * *===========================================================================*/ static struct proc * pick_proc(void) { /* Decide who to run now. A new process is selected an returned. * When a billable process is selected, record it in 'bill_ptr', so that the * clock task can tell who to bill for system time. * * This function always uses the run queues of the local cpu! */ register struct proc *rp; /* process to run */ struct proc **rdy_head; int q; /* iterate over queues */ /* Check each of the scheduling queues for ready processes. The number of * queues is defined in proc.h, and priorities are set in the task table. * If there are no processes ready to run, return NULL. */ rdy_head = get_cpulocal_var(run_q_head); for (q=0; q &lt; NR_SCHED_QUEUES; q++) { if(!(rp = rdy_head[q])) { TRACE(VF_PICKPROC, printf("cpu %d queue %d empty\n", cpuid, q);); continue; } assert(proc_is_runnable(rp)); if (priv(rp)-&gt;s_flags &amp; BILLABLE) get_cpulocal_var(bill_ptr) = rp; /* bill for system time */ return rp; } return NULL; } </code></pre> <p>I'm using minix_R3.2.1-972156d. Anybody knows something???</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload