Lions' 本読み (69)

週末は怪しい Lions' 読み会が企画されてて楽しみ。
現状の継続が不明だったんですが 12 章のシステムコールあたりから確認再開。

exec 手続き

やっぱキツい。namei はスルーにしても xalloc がキツい。おそらくこのあたりはスルーしなさい、という方向で readi 手続き確認。
手続き定義の中に u.u_base が出てこない、と思ったら iomove 手続きで、らしい。手続き定義なコメントを引用しておきます。

6350 /* u.base から始まるユーザー/カーネル (u.segflg)
6351  * 領域へ、または領域から (flag)&bp->b_addr[o] の
6352  * バイト位置から始まる 'an' バイトを転送する。

これはこれは的グローバル変数の使い方ですね。
このあたりは別途確認ということで呼び出しなシーケンスを備忘まで控えておきます。なんとなく以前投入したエントリでも控えてありそうですがご容赦頂ければと。

3085    u.u_base = &u.u_arg[0];
3086    u.u_count = 8;
3087    u.u_offset[1] = 0;
3088    u.u_offset[0] = 0;
3089    u.u_segflg = 1;
3090    readi(ip);

u.u_arg な領域に 8 bytes ということなので u.u_arg[0] から u.u_arg[3] までなナニに情報が入ってきます。詳細は手続き定義のコメント参照願います。

明日は

朝練の日なんですが xalloc なあたりとかデータセグメントを読み出すあたりとかを再確認 (?) したみたいと思います。

よく考えてみるに

exec は fork ありきの、という事なのかな。