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 なマニュアル等で確認してみます。