2021 MIT6.S081 LAB9 file system Large files Symbolic links

实验九

原网址 Lab: file system


Large files

这个实验的目标是增加一个文件的最大容量,原来的字节数是(256+12* 1024,有12个直接引用块
11级间接引用块,这一个间接引用块有256个直接引用块。将12个直接引用腾出一个位置,作为一个2级
间接引用,所以,腾出来后,有(256*256 + 256 + 11)个块。
  1. 修改宏定义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];
    }; 
    
  2. 修改bmap

    static uint
    bmap(struct inode *ip, uint bn)
    {
         
      uint addr, *a;
      struct buf *bp;
    
      if(bn < NDIRECT){
         
      //...
      }
      bn -= NDIRECT;
    
      if
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值