Lions' 本読み (137)

今朝のソレで出てきた宿題なソレを確認してみます。

ひとつめ

プロセスが生まれるときに ppda はどうやって作られるのか。newproc 手続きですね。結論的には

1896    a2 = malloc(coremap, n);

で領域が確保できた場合以下な形で初期設定してますね。簡単でした。

1913            rpp->p_addr = a2;
1914            while(n--)
1915                    copyseg(a1++, a2++);

a1 は親プロセスの p_addr 属性の値が格納されてます。p_addr 属性は ppda なアドレスが格納される場所です。

もひとつ

u_dirp とか u_pdir という属性について確認を。とりあえず定義なソレですが u_dirp が以下。

0430 char *u_dirp; /* current pointer to inode */

あるいは u_pdir が以下。

0435 int *u_pdir; /* inode of parent directory of dirp */

ええと、u_dirp は schar とか uchar の引数代わり (?) に使われている件。namei に渡す uchar 向け、と言った方が良いのかどうか。u.u_dirp は謎。もう少し確認します。
u_pdir 属性は例えば namei 手続きとかだと生成する場合に u.u_cdir なソレを代入してますね。なんとなく両方ともにテンポラリ的に inode なポインタを使う時のための領域、という位置付けで良いのかどうか。
む、u_pdir 属性は

  • wdir 手続き (7477)
  • maknode 手続き (7455)
  • link 手続き (5909)

で使われてますね。別途確認、てことで。今日は (も) へろへろなのでこれで終了。