私は話している:
struct {
struct spinlock lock;
struct proc proc[NPROC];
} ptable;
これは proc.c ファイルにあります。
誰かが初期化されている場所を説明できますか? なぜなら、proc.c に何か (プロセス) が追加されているのを見たことがないからです。
より正確に言うと、スケジューラ コードを見ているとしましょう。
void
scheduler(void)
{
struct proc *p;
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++){
if(p−>state != RUNNABLE)
continue;
// Switch to chosen process. It is the process’s job
// to release ptable.lock and then reacquire it
// before jumping back to us.
proc = p;
switchuvm(p);
p−>state = RUNNING;
swtch(&cpu−>scheduler, proc−>context);
switchkvm();
// Process is done running for now.
// It should have changed its p−>state before coming back.
proc = 0;
}
release(&ptable.lock);
}
}
の:
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
ptable の各プロセスをループ処理していることがわかります。私の質問は、どうやってそこにたどり着いたのですか? ありがとう!