Одна из возможностей, вероятно, не очень хорошая, — изменить 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. Это означает, что должны быть определенные приоритеты.
person
Jonathan Leffler
schedule
25.03.2012