SSブログ

UNIX V6: プロセス切り替えのところを読む

プロセス切り替えの肝、swtch()を読みつつ、 UNIX V6のプロセス管理の仕組みの理解を整理しつつ。

まず一般的に考えてみて、
あるプロセスから別のプロセスに切り替わる作業は、
 ・今のプロセスのコンテクストを保存しておく
 ・切り替え先プロセスのコンテクストに戻す
を行う。
コンテクストはプログラムが走っている途中の状態を指すが、実際は、
 ・PC
 ・SP
 ・作業中のレジスタ情報
の情報になる。(これらが復帰すれば、いったん中断された状態に戻れる)
もちろん、そのプロセスが使っているスタック、変数領域は全部、破壊されずに保存されているのが前提。

で、UNIXの場合、
   関数(サブルーチン)呼び出しの時は、戻り先PCとレジスタ群はスタックに積まれる。

コンテクストを戻す際は、スタックの状態が安全に保存されている前提であれば、
最低限戻すべき情報は
  SP
だけで良いはず。

しかし、実際はUNIXというかCは、関数内ローカル変数のアクセスに
r5 (フレームポインタ)を使っているので、この情報も戻さないと動きがおかしくなる。
UNIX V6のCはr5をフレームポインタに使っているが、pdp-11版gccのも同じ役割でr5を使っていた。

スタックの処理が肝になるのだが、まだよくわからない点:
・システムコール時のSPはどこを指しているの?
 ・PDP-11のSPは、割り込み(カーネルモード)用とユーザ用とがあるが、切り替えはどこ?
 ・プロセスごとにカーネル作業用スタック領域があるがこれは何?
 ・プロセスごとのスタックは、制御がプロセスに戻るときに使われるんだろうな、


とりあえず、以上。



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。