В настоящее время для своего проекта в колледже я пытаюсь реализовать алгоритмы планирования FCFS и Priority для xv6. Я сделал с приоритетом и теперь пытаюсь заставить FCFS работать. Ниже приведено изменение, которое я внес в код:
void
scheduler(void)
{
struct proc *p = 0;
struct cpu *c = mycpu();
c->proc = 0;
for(;;)
{
// Enable interrupts on this processor.
sti();
// Loop over process table looking for process to run.
acquire(&ptable.lock);
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++)
{
struct proc *minP = 0;
if(p->state != RUNNABLE)
continue;
// ignore init and sh processes from FCFS
if(p->pid > 1)
{
if (minP != 0){
// here I find the process with the lowest creation time (the first one that was created)
if(p->ctime < minP->ctime)
minP = p;
}
else
minP = p;
}
// If I found the process which I created first and it is runnable I run it
//(in the real FCFS I should not check if it is runnable, but for testing purposes I have to make this control, otherwise every time I launch
// a process which does I/0 operation (every simple command) everything will be blocked
if(minP != 0 && p->state == RUNNABLE)
p = minP;
if(p != 0)
{
// Switch to chosen process. It is the process's job
// to release ptable.lock and then reacquire it
// before jumping back to us.
c->proc = p;
switchuvm(p);
p->state = RUNNING;
swtch(&(c->scheduler), p->context);
switchkvm();
// Process is done running for now.
// It should have changed its p->state before coming back.
c->proc = 0;
}
}
release(&ptable.lock);
}
}
Теперь я хотел бы спросить: когда я запускаю два фиктивных процесса (в соответствии с соглашением, foo. c для создания дочерних процессов чтобы делать бесполезные вычисления, которые требуют времени) каждый из которых производит ребенка, почему я все еще могу запускать ps?
Технически, каждый из 2 доступных процессоров должен быть занят, выполняя правильный процесс двух пустышек?
Кроме того, я установил время создания как Приоритет, используя алгоритм, который я написал для Приоритетного планирования. Оказывается, после создания двух процессов я ничего не могу запустить, то есть оба процессора сейчас используются.