在minix 3中proc.c中缺少函数



我在vmware播放器上安装了minix 3,我试图找到一个函数,因为我在文件"proc.c"中读取/usr/src/kernel。函数名为sched()。

应该介于这两个函数之间:

 /*===========================================================================*
     *              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->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)->s_stack_guard == STACK_GUARD);
  rdy_tail = get_cpu_var(rp->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->p_cpu, run_q_head[q]); *xpp;
          xpp = &(*xpp)->p_nextready) {
      if (*xpp == rp) {             /* found process to remove */
          *xpp = (*xpp)->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->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->p_accounting.enter_queue)) {
    read_tsc_64(&tsc);
    tsc_delta = sub64(tsc, rp->p_accounting.enter_queue);
    rp->p_accounting.time_in_queue = add64(rp->p_accounting.time_in_queue,
        tsc_delta);
    make_zero64(rp->p_accounting.enter_queue);
  }

#if DEBUG_SANITYCHECKS
  assert(runqueues_ok_local());
#endif
}

* 这样的/===========================================================================**时间表*===========================================================================/

                       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 < NR_SCHED_QUEUES; q++) { 
    if(!(rp = rdy_head[q])) {
        TRACE(VF_PICKPROC, printf("cpu %d queue %d emptyn", cpuid, q););
        continue;
    }
    assert(proc_is_runnable(rp));
    if (priv(rp)->s_flags & BILLABLE)       
        get_cpulocal_var(bill_ptr) = rp; /* bill for system time */
    return rp;
  }
  return NULL;
}

我使用minix_R3.2.1-972156d。有人知道吗??

天哪,这个功能可能在minix 3.1图书版本中找到。这是官方链接:http://download.minix3.org/iso/minix-3.1.0-book.iso.bz2

源代码在这里:http://www.minix3.org/documentation/AppendixB.html

该函数可能在最新的minix构建中被移到了其他地方。一个好的起点是查看在proc.c

顶部定义的每个#include文件。

sched在Minix 3.1中存在,而您正在使用3.2。这两个版本之间有相当多的变化。事实上,我在/src中做了cscope搜索,sched无处可寻。

相关内容

  • 没有找到相关文章

最新更新