1 // on-disk file system format 2 3 #define BSIZE 512 // block size 4 5 // sector 1 (2nd sector) 6 struct superblock{ 7 uint size; 8 uint nblocks; 9 uint ninodes; 10 }; 11 12 #define NADDRS (NDIRECT+1) 13 #define NDIRECT 12 14 #define INDIRECT 12 15 #define NINDIRECT (BSIZE / sizeof(uint)) 16 #define MAXFILE (NDIRECT + NINDIRECT) 17 18 struct dinode { 19 short type; 20 short major; 21 short minor; 22 short nlink; 23 uint size; 24 uint addrs[NADDRS]; 25 }; 26 27 #define T_DIR 1 28 #define T_FILE 2 29 #define T_DEV 3 30 31 // sector 0 is unused, sector 1 is superblock, inodes start at sector 2 32 #define IPB (BSIZE / sizeof(struct dinode)) 33 #define IBLOCK(inum) (inum / IPB + 2) // start of inode 34 #define BPB (BSIZE*8) 35 #define BBLOCK(b,ninodes) (b/BPB + (ninodes/IPB) + 3) // start of bitmap 36 37 #define DIRSIZ 14 38 39 struct dirent { 40 ushort inum; 41 char name[DIRSIZ]; 42 }; 43 44 45