mit6.s081 lab9 file system

这篇博客详细介绍了如何扩展xv6文件系统以支持更大的文件,通过增加间接索引的数量,将最大文件block数提升到11 + 256 + 256 * 256。同时,文章还阐述了实现软链接的步骤,包括在inode中增加新的类型T_SYMLINK,以及在open()函数中处理软链接的逻辑,以解决循环引用问题。操作涉及修改多个内核文件及系统调用。
摘要由CSDN通过智能技术生成
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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值