Lions' 本読み (73)

朝練メモ。struct text の x_count および x_ccount 属性について確認。

x_count 属性

ほぼ Sheet 44 に閉じてますね。

  • xalloc 手続きにおいて struct text な配列の x_iptr 属性と i-node オブジェクトな引数が同じ値の場合、x_count が増分される
  • xalloc 手続きにおいて上記条件が真とならない場合、x_count には 1 が設定される
  • xfree 手続きにおいて (基本的に) 減分される
    • 値が 0 になった場合、sticky bit が立ってなければ swap から削除する

ということは基本的に xalloc 手続きで 1 増えて、xfree 手続きで 1 減るのか。そして xfree で 0 になったら swap から削除される。

newproc でこんなことしてるな。

1879    if((rpp=up->p_textp) != NULL) {
1880            rpp->x_count++;
1881            rpp->x_ccount++;
1882    }

この後始末は誰がどこでするんだろ。ちなみに up は親プロセス (?) のプロセス構造体オブジェクトを指してるはずです。
と思ったらやはり exec で始末してますね。良かった。

3128    xfree();
3129    expand(USIZE);
3130    xalloc(ip);

ちなみに xfree の呼び出し元ですが

  • exec
  • exit

の二箇所となっている模様。

x_ccount 属性

こちらは xccdec 手続きによると 0 になったらコアから解放されてますね。この属性の値を見てテキストがコアにあるかどうかを判断している模様。
この属性が増分されるのは

  • sched でスワップインする時
  • xalloc でテキストが既にコアにある場合

になるのかどうか。減らされるのは xccdec でのみになるのかな。ちょっと時間無い。xccdec が呼び出されるのは

  • xswap
  • xfree

から、な模様。x_ccount のアタマの c は core の c なカンジですね。