Large files
这个exercise的工作是提高xv6支持的最大文件大小,现在的inode结构如下图所示
原始的xv6 inode结构中有12个直接索引,1个一级间接索引,所以当前xv6中文件的支持的最大block数为12 + 256 (每个block可以存储256个block num,一个sector为512 bytes,一个block为1024 bytes,一个block num为4 bytes)。
现在要将inode结构修改为11个间接索引,1个一级间接索引,1个二级间接索引,可以支持的最大文件block数量为11 + 256 + 256 * 256
1.修改NDIRECT数量为11,修改NINDIRECT为一级间接索引和二级间接索引的数量之和
#define NDIRECT 11
#define SINGLY_NUM (BSIZE / sizeof(uint)) // 一级索引支持的最大block数
#define DOUBLY_NUM SINGLY_NUM * SINGLY_NUM // 二级索引支持的最大block数
#define NINDIRECT SINGLY_NUM + DOUBLY_NUM // 间接索引支持的最大block数
#define MAXFILE (NDIRECT + NINDIRECT)
2.修改inode和dinode中的addrs
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];
};
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
};
3.在bmap函数中增加对二级索引查找和分配的逻辑
// Return the disk block address of the nth block in inode ip.
// If there is no