Lions' 本読み (80)

課題が以下らしい。

  • xalloc 確認
  • データセグメント読み出し部分の確認
  • つまりは estabur の確認だったりする件
  • xalloc した後にデータセグメント読み出しなナニの理解

列挙してあるナニにある通り、estabur 手続きの確認かな。
何が微妙か、というと以下のあたり。

3138    estabur(0, ds, 0, 0);
3139    u.u_base = 0;
3140    u.u_offset[1] = 020+u.u_arg[1];
3141    u.u_count = u.u_arg[2];
3142    readi(ip);

ええと readi 手続きの定義な記述にあるコメントですが以下な記述があります。

6214  * 実際の読み出し引数は次の
6215  * 変数に存在する。
6216  * u_base      転送先のコアアドレス
6217  * u_offset    ファイル中のバイトオフセット
6218  * u_count     読み出すべきバイト数
6219  * u_segflg    カーネル/ユーザへの読み出し
6220  */

u_segflg がどこで使われているのか謎。と思ったら iomove という手続きの中か。exec 手続きの中の指定によれば「ユーザ領域の 0 番地に (データセグメントを) 読み出し」という事になる、という理解で良いのかどうか。

思いだした

xalloc 手続き確認して色々類推したのでした。以下な部分が材料です。

4459    expand(USIZE+ts);
4460    estabur(0, ts, 0, 0);
4461    u.u_count = u.u_arg[1];
4462    u.u_offset[1] = 020;
4463    u.u_base = 0;
4464    readi(ip);
4465    rp = u.u_procp;
4466    rp->p_flag =| SLOCK;
4467    swap(xp->x_daddr, rp->p_addr+USIZE, ts, 0);

データセグメント 0 番地に読み込んだソレを swap する時、ユーザ構造体アドレスに USIZE を加えた番地から、という形な記述になってるので、というのが根拠になってるんですが、これって根拠ではないなorz

とりあえず

根拠のようなもの、を pdp11 なマニュアル等で確認してみます。