2023年6月29日木曜日

UNIX V7のブート 2

inodeブロックを見ていきます。inodeブロックは、ディスクイメージでは0x0400から始まっています。
inodeの構造は、/usr/sys/h/ino.h の dinode構造体で定義されています。この構造体のサイズは64バイトです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct dinode
{
    unsigned short  di_mode;/* mode and type of file */
    short   di_nlink;       /* number of links to file */
    short   di_uid;         /* owner's user id */
    short   di_gid;         /* owner's group id */
    off_t   di_size;        /* number of bytes in file */
    char    di_addr[40];    /* disk block addresses */
    time_t  di_atime;       /* time last accessed */
    time_t  di_mtime;       /* time last modified */
    time_t  di_ctime;       /* time created */
};
#define INOPB   8   /* 8 inodes per block */
/*
 * the 40 address bytes:
 *  39 used; 13 addresses
 *  of 3 bytes each.
 */
};
inode番号0は未使用で、ルートディレクトリのinode番号は2なので、ルートのinodeの位置は、ディスクイメージでは0x0440からです。


ルートディレクトリのファイルの位置は、0x044cからのdi_addr[]にブロック番号がリストされています。このアドレスは、下のコメントのように3バイトで表され、上位1バイト+下位2バイトで記録されています。最初の3バイトは0x0002d4で1ブロック512バイトなので、0x5a800からファイルのデータが保存されています。
アスキーダンプにunixの文字列が見られます。SIMHでルートを ls してみた結果が下で、対応していることがわかります。

0 件のコメント:

コメントを投稿