我想自定义minix文件/usr/src/kernel/proc.c
的代码以实现FCFS算法,但我没有任何想法或线索。我曾经说过,当前的算法工作在某个优先级,所有的进程首先进入一个队列,然后使用一些算法,然后为进程分配一些优先级。但是如果我需要实现FCFS,那么我应该只使用一个队列。
但如何将这些事情联系起来?
答案 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工作的数字运算怪物更快速地提供服务。这意味着需要进行一些优先排序。