proc.c struct proc* myproc(void)

トップページ
jupiteroak.hatenablog.com


proc.c
https://github.com/mit-pdos/xv6-public/blob/master/proc.c#L57

struct proc* myproc(void) {
  struct cpu *c;
  struct proc *p;
  pushcli();
  c = mycpu();
  p = c->proc;
  popcli();
  return p;
}

myproc関数は、プロセッサが現在実行しているプロセスのプロセスディスクリプタを取得します。


処理の内容

pushcli();

pushcli関数を呼び出して、ハードウェア割り込みを無効化(マスク)します。
これから取得するプロセスディスクリプタに関連しているプロセスがスケジューリングされないようにします。

c = mycpu();

mycpu関数を呼び出して、mycpu関数を現在実行しているプロセッサに対応したcpu構造体を取得します。

p = c->proc;

プロセッサが現在実行しているプロセスに関連しているプロセスディスクリプタを取得します。

popcli();

popcli関数を呼び出して、ハードウェア割り込みを有効化します。

return p

プロセッサが現在実行しているプロセスに関連しているプロセスディスクリプタを戻り値としてリターンします。