我想自定义minix文件/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中的数字运算怪物更快地得到服务。这意味着需要有一些优先次序。