基本概念

Untitled

磁盘布局用超级块表示

Untitled

Untitled

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  //第一个位图块块号
};

目录树形结构

索引节点(inode 或 dinode)

// 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 项是直接块,最后一项是间接索引快
};

Untitled

目录项

struct dirent {        //目录项结构
  ushort inum;         //inode编号
  char name[DIRSIZ];   //文件名
};

Untitled

盘块操作

块缓存