dinode.addr[]
)。这个索引方式就是混合索引方式struct superblock {
uint size; // Size of file system image (blocks) 文件系统大小,也就是一共多少块
uint nblocks; // Number of data blocks 数据块数量
uint ninodes; // Number of inodes. //i结点数量
uint nlog; // Number of log blocks //日志块数量
uint logstart; // Block number of first log block //第一个日志块块号
uint inodestart; // Block number of first inode block //第一个i结点所在块号
uint bmapstart; // Block number of first free map block //第一个位图块块号
};
每个目录都包含相同的两个「文件」.
..
// On-disk inode structure
struct dinode {
short type; // File type 文件类型,用于区分目录、磁盘文件和设备
short major; // Major device number (T_DEV only) 如果 type 为设备,major 和 minor 用于区分设备号
short minor; // Minor device number (T_DEV only)
short nlink; // Number of links to inode in file system 有多少个目录项指向该 inode 节点
uint size; // Size of file (bytes) 磁盘文件大小
uint addrs[NDIRECT+1]; // Data block addresses 文件磁盘盘块所在位置,前 n 项是直接块,最后一项是间接索引快
};
struct dirent { //目录项结构
ushort inum; //inode编号
char name[DIRSIZ]; //文件名
};