Nachos操作系统实验五:具有二级索引的文件系统

注意

所有单独修改部分均在其后方注释add here
整体修改部分均在其上下注释add here
实验提供的makefile文件应该是支持在原代码上直接修改的,所以如果要移动代码到新的文件夹,请自行修改makefile文件。

实验目的

实验目的:
Nachos系统原有的文件系统只支持单级索引,最大能存取NumDirect * SectorSize = 30 * 128 = 3840字节大小的文件。本实验将在理解原文件系统的组织结构基础上扩展原有的文件系统,设计并实现具有二级索引的文件系统。
在这里插入图片描述

二级索引文件头i-node设计:
如上图所示,构建具有二级索引的i-node,原先的前NumDirect-1项还是直接索引,最后一项(数组下标为NumDirect-1)指向一个二级索引块,这个块存放新的索引条目,共NumDirect+2项(数组下标为0~NumDirect+1)。扩大后的文件最大长度为(29 + 32)* 128 = 7808字节。
二级索引块是动态产生的,当文件大小不需要它时,一级索引块的最后一项设置为-1,此时不存在二级索引块。当文件大小增长到一级索引无法支持时,再分配一个新的块存二级索引,并将其扇区号存入一级索引块的最后一项,形成上图所示的结构。

实验思路

本次实验修改在code/filesys中。修改部分仅为fileheader(filehdr),通过修改该部分将原本的一级索引改为二级索引。注意,这需要在实验四的基础上才能实现,请先去实现实验四,出于实现的考虑,将给ExtendSpace的参数中原本的(position+numBytes)修改为(position+numBytes-fileLength)才可以,切记切记。实验思路是利用一级索引最后一个扇区存储二级索引的索引号。dataSectors[i]里面存储的是扇区号(0-1023),通过这个扇区号可以找到一个128字节的扇区。使用WriteSector()方法将索引号写入dataSectors[29]所存储的那个扇区,用ReadSector()方法从dataSectors[29]所存储的那个扇区中读出索引号。两个方法的第一个参数都是扇区号,第二个参数是一个data*对象,用来读写扇区。

实验过程

1,Allocate

在这里插入图片描述

2,Deallocate

在这里插入图片描述

3,ByteToSector

在这里插入图片描述

4,Print

在这里插入图片描述这是两张图片,上下有交合的部分,请注意//isprint(data[j])的位置
在这里插入图片描述

5,ExtendSpace

修改情况:再次提醒,请将openfile中WriteAt方法中调用该方法时所给的参数(position+numBytes)修改为(position+numBytes-fileLength)
在这里插入图片描述

6,编译,查看结果。

截图依旧很长,所以就不截了。题外话,如果实现过程中你出现了disk.cc 121处的错误,请尝试其他方法。

7,一个或许应该修改的地方,在filehdr.h中

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值