2023年7月2日日曜日

UNIX V7のブート 3

ディレクトリは、/usr/sys/h/dir.hで定義されているdirect構造体のリストです。


#ifndef	DIRSIZ
#define	DIRSIZ	14
#endif
struct	direct
{
	ino_t	d_ino;
	char	d_name[DIRSIZ];
};

direct構造体のサイズは16バイトで,、最初の2バイトはinode番号です。続く14バイトがファイル名です。


ルートディレクトリのファイルを見てみると、rl2tunixだとinode番号は0x007dだとわかります。i-node番号からディスクイメージでのアドレスへの変換は、次の式になります。

 (inode番号 - 1)×dinod構造体のサイズ (64バイト)+ inodeブロックの先頭アドレス(0x400)

計算すると、rl2tunixのi-nodeのアドレスは0x2300になります。


di_addr[0]~di_addr[9]は直接参照で、ブロック番号0x000da5, 0x000da8, .... , 0x000dc0となっています。di_addr[10]は間接参照で、ブロック番号0x0dc3にブロック番号のリストがあります。こちらは3バイトではなく、4バイト単位でブロック番号が書き込まれています。

92ブロックの間接参照のブロック番号が書かれています。直接参照と合わせると、102ブロックに渡ってrl2unixが書き込まれていることがわかります。

これでUNIXカーネルのファイルまでたどり着くことができました。次は、ブートプログラムを見ていきます。



0 件のコメント:

コメントを投稿