如何在minix中定制proc.c以实现FCFS算法?

如何在minix中定制proc.c以实现FCFS算法?,c,minix,C,Minix,我想定制minix文件/usr/src/kernel/proc.c的代码来实现FCFS算法,但我没有得到任何想法或线索。我已经说过,当前的算法具有某种优先级,所有进程首先进入一个队列,然后使用某种算法,然后这些进程被分配一些优先级。但是如果我需要实现FCFS,那么我应该只使用一个队列 但是如何将这些事情联系起来呢?一种可能性——可能不是很好的可能性——是修改函数: PUBLIC void enqueue(register struct proc *rp) { /* Add 'rp'

我想定制minix文件
/usr/src/kernel/proc.c
的代码来实现FCFS算法,但我没有得到任何想法或线索。我已经说过,当前的算法具有某种优先级,所有进程首先进入一个队列,然后使用某种算法,然后这些进程被分配一些优先级。但是如果我需要实现FCFS,那么我应该只使用一个队列


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

一种可能性——可能不是很好的可能性——是修改函数:

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_优先级

   int q = 0;
因此,所有进程都在一个优先级队列(队列号0)上排队,并且您有一个FCFS系统。当然,这假设
enqueue()
是唯一一个将进程添加到队列的函数。很有可能它是唯一的一个,但您需要了解Minix内核的大部分内容才能确定

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


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

如果您提供了一个链接(URL),人们可以在其中查看源代码,您可能会得到更好的响应。一种可能性是考虑优先级的扁平化:将一切设置为优先级1(或任何其他合适的值)。它可能会在FCFS中起作用。如果你想把事情分开,这样你就只有一个单一的(未优先化的)列表,你必须理解代码模式,知道优先级列表是在哪里创建的(然后只创建一个),甚至可能从接口中删除优先级。然而,这是对代码更广泛的操作,可能不仅仅是那个文件。谢谢你的帮助。您提到我应该将优先级设置为1或任何其他合适的值,在这种情况下,每个队列都具有相同的优先级…但我发现,在minix中,实际上有16个队列以不同的优先级工作..但在FCFS中,我只需要使用一个队列,其中所有进程都要运行,链接为=,在排队功能中,所有进程都被放入最小用户队列中,这是我需要处理的队列。但是我需要关于优先级的进一步帮助,你能帮忙吗?谢谢Jonathan Leffler。我很感谢你,因为你的指导帮助我成功地修改了minix内核(我想到现在为止)。但是,您是否介意告诉我,是否有任何进程或函数可以检查我的FCFS是否正常工作,或者它是否有一些逻辑错误(我确信没有编译错误)?我将非常感谢你……简而言之,我不知道。但由于代码正在运行,并且只有一个队列,因此很难看出它是如何以FCFS以外的任何方式运行的。也许您可以运行十几个计算密集型进程(因此,这些进程不进行系统调用;反转一些100x100个矩阵或其他内容),并显示您的交互式终端进程在等待计算密集型进程完成其时间片时被阻塞。当计算机以25兆赫的频率运行时,要比现在以2.5兆赫的频率运行要容易得多。