实验九
原网址 Lab: file system
Large files
这个实验的目标是增加一个文件的最大容量,原来的字节数是(256+12)* 1024,有12个直接引用块
1个1级间接引用块,这一个间接引用块有256个直接引用块。将12个直接引用腾出一个位置,作为一个2级
间接引用,所以,腾出来后,有(256*256 + 256 + 11)个块。
-
修改宏定义NDIRECT、最大文件MAXFIEL以及相关结构体,增加新宏定义DOUBLE_INDIRECT。修改NDIRECT为11后,结构体dinode和inode的成员addrs的大小并没有变,还是13。前几次实验,我没有改宏定义NDIRECT,而是在相关的函数中直接使用addrs的下标,前11个块是0-10,11是一级引用,12是二级引用,结果能通过bigfile,不能通过usertests的测试。
#define NDIRECT 11 #define DOUBLE_INDIRECT (NINDIRECT * NINDIRECT) #define MAXFILE (NDIRECT + NINDIRECT + DOUBLE_INDIRECT) // On-disk inode structure struct dinode { short type; // File type short major; // Major device number (T_DEVICE only) short minor; // Minor device number (T_DEVICE only) short nlink; // Number of links to inode in file system uint size; // Size of file (bytes) uint addrs[NDIRECT+2]; // Data block addresses }; // in-memory copy of an inode struct inode { uint dev; // Device number uint inum; // Inode number int ref; // Reference count struct sleeplock lock; // protects everything below here int valid; // inode has been read from disk? short type; // copy of disk inode short major; short minor; short nlink; uint size; uint addrs[NDIRECT+2]; };
-
修改bmap
static uint bmap(struct inode *ip, uint bn) { uint addr, *a; struct buf *bp; if(bn < NDIRECT){ //... } bn -= NDIRECT; if