我想自定义迷你文件/usr/src/kernel/proc.c的代码以实现FCFS算法,但是我没有任何想法或线索。有人说过,当前的算法在某些优先级下工作,所有进程首先进入一个队列,然后使用某种算法,然后为进程分配一些优先级。但是,如果我需要实现FCFS,则应该只使用一个队列。

但是如何关联这些东西呢?

最佳答案

一种可能性(可能不是一个好办法)是修改enqueue()函数:

PUBLIC void enqueue(register struct proc *rp)
{
    /* Add 'rp' to one of the queues of runnable processes.  This function is
     * responsible for inserting a process into one of the scheduling queues.
     * The mechanism is implemented here.   The actual scheduling policy is
     * defined in sched() and pick_proc().
     */
    int q = rp->p_priority;                       /* scheduling queue to use */


不用分配rp->p_priority,只需分配0:

   int q = 0;


因此,所有进程都排队在单个优先级队列(队列号0)上,并且您具有单个FCFS系统。当然,这假定enqueue()是将进程添加到队列的唯一函数。这是唯一的机会,但是您需要了解大多数Minix内核才能确定。

进行适当的修改后,您可以调查是否浪费了太多空间来支持多个队列。如果存在,则可以适当地调整队列声明。队列结构可能只是一个指针数组。因此,可用的空间节省不是很大。

但是请注意,您可能不只希望使用FCFS。优先队列在那里是有充分的理由的。例如,您的中断处理程序应该比在SETI上使用数字运算的怪物更迅速地得到服务。这意味着需要确定优先级。

关于c - 如何在minix中自定义proc.c以实现FCFS算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9854646/

10-11 19:35