我想自定义迷你文件/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/