如何在minix中自定义proc.c来实现FCFS算法?

时间:2012-03-24 19:08:08

标签: c minix

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

但如何将这些事情联系起来?

1 个答案:

答案 0 :(得分:2)

一种可能 - 可能不是一个好的 - 是修改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 */

只需指定0:

,而不是分配rp->p_priority
   int q = 0;

因此,所有进程都在一个优先级队列(队列号0)上排队,并且您有一个FCFS系统。当然,这假设enqueue()是将进程添加到队列的唯一函数。它是唯一一个很好的机会,但你需要知道大部分的Minix内核。

通过适当的修改,您可以调查是否有太多空间浪费支持多个队列。如果有,您可以适当调整队列声明。队列结构可能只是一个指针数组;因此,可用空间不大。

但请注意,您可能不希望仅使用FCFS;优先排队是有充分理由的。例如,你的中断处理程序应该比为SETI工作的数字运算怪物更快速地提供服务。这意味着需要进行一些优先排序。