山东大学操作系统课设lab5

  • 实验五 具有二级索引的文件系统(lab5)
    • 实验目的
    • 实验环境
    • 实验思路
    • 调试记录

实验五 具有二级索引的文件系统(lab5)

实验目的

Nachos系统原有的文件系统只支持单级索引,最大能存取NumDirect * SectorSize的大小的文件。本次试验将在理解原文件系统的组织结构基础上扩展原有的文件系统,设计并实现具有二级索引的文件系统。

实验环境

虚拟机下Ubuntu Linux 16.04 LTS系统,nachos-3.4内核管理模块和MIPS CPU软件模拟模块,文件系统模块,代码在lab5文件夹下面实现。

实验思路

有参考这个:https://wenku.baidu.com/view/049223482b160b4e767fcfd6.html
其实通过lab4就可以看出,思路是沿着fstest.cc里的Append()去扩展文件系统,具体是Append()里的openFile.Write(),更底层就到了Write()调用的WriteAt()。说到底,就是这一小段代码最终确定了如何分配,如何扩展,如何索引整个文件系统的扇区。所以在lab5实验里只用关注AllocateSpace()方法就好。(不对)

因为filesystem里Create()方法有创建文件头对象,且构造方法里也有调用到filehdr里的Allocate()等方法,所以filehdr.cc里的每个方法,只要涉及到数组保存,都要由一个数组写成两个数组,才能完成由一级索引到二级索引的转换。



之前lab4里的filehdr.cc里的Allocate(),文件是通过一个数组dataSectors来进行分配的。

Filehdr.h里最初的定义部分有:
#define NumDirect ((SectorSize - 2 * sizeof(int)) / sizeof(int))

这是在filehdr.h里private定义dataSectors[]的大小
之前在lab4实验报告里有说,


所以一个sector里128个字节,sectorSize = 128,sizeof(int) = 4,则NumDirect = 30,即有存储文件消耗30个sector,30*128 = 3840,即文件可占字节为3840
想要扩展文件系统,还是从存储文件字节的数组下手。
建立一个dataSectors2数组,
定义大小
==#define NumDirect2 (SectorSize/sizeof(int)) == 大小为128/4 = 32
修改
==#define MaxFileSize ((NumDirect+NumDirect2)*SectorSize) ==

之前单级索引是用数组的最后1位作为索引号,dataSectors[0]-dataSectors[28]作为存取数据的块号;如果dataSectors[29]=-1,则表明没有没有二级索引块,如果dataSectors[29]为任意正值,则与二级索引块相应块号对应,即dataSectors2[]值。文件超过dataSectors[]可存放大小,则放到dataSector2[]中,dataSectors2[]返回的Sector号对应着dataSectors[-1]的值。
文件读取还是依照之前的方法,openFile里WriteAt()添加的AllocateSpace(),其中AllocateSpace()添加了filehdr的ExpandSpace()。只是需要修改读数组dataSectors[]的方法,在读到最后一位时,需要跳到dataSectors2里去继续读二级索引的数据内容。
关键源代码注释以及程序说明:
这是lab4里filehdr.cc里的Allocate():

但是现在需要判断一些先需加入的扇区内容是否有超过文件大小范围。如果没超过,还是一级索引可以承受的;如果超过了,则需要用到二级索引。
如果没超过文件内容,则和lab4基本一致, 将dataSectors[-1]设置为-1;超过文件内容则使用二级索引,先将dataSectors[-1]设置为,并设置dataSectors2的大小,把其他放不下的数据块放到二级索引数组里。并把相应块号设为一级索引的值。

Filehdr里的deallocate原来是这样:

相应的deallocate需要修改:如果只有一级索引,则与之前无异;若有二级索引,则将dataSector[]数组内容清除,再清楚dataSectors2[]数组内容。

Lab4的ExpandSpace()是这样的。

相应的加上dataSectors2的修改内容。


ByteToSector()和Print()也相应地添加上关于dataSectors2[]的内容。

调试记录

./nachos -f
./nachos -D
./nachos -cp test/big big
./nachos -ap test/big big *5

但是当我继续 ./nachos -ap test/big big 时就报错了。

我也许是没有真正实现二级索引,所以才会这样。
发现之前一直没有make,而且在makefile和makefile.local里面是filesys而不是lab5,因为filesys和lab5是同级文件,而且内部都有filesys.cc,所以会调用错。需要修改成lab5。


发现其实在lab4里面也是调用的filesys,修改之后make再执行,如下。

Lab5修改后make再执行如下:

修改了输出格式,想把一级索引对应的二级索引也写出来。


做到现在,感觉对二级索引终于有了一点了解,对linux系统的debug也有了一点了解。
虽然现在最多可以扩展到68,但是还有个很诡异的事情,就是中间会报一次错,但是之后又可以继续扩展。很奇怪,待解决。

操作系统课设--具有二级索引的文件系统相关推荐

  1. 广工操作系统课设--多用户多级目录的文件系统

    广东工业大学课程设计任务书 一.课程设计的内容 本课程设计要求设计一个模拟的多用户多级目录的文件系统.通过具体的文件存储空间的管理.文件的物理结构.目录结构和文件操作的实现,加深对文件系统内部功能和实 ...

  2. 操作系统课设--多用户多级目录的文件系统

    一.课程设计的内容 本课程设计要求设计一个模拟的多用户多级目录的文件系统.通过具体的文件存储空间的管理.文件的物理结构.目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解. 二.课程设计 ...

  3. 操作系统课设--扩展文件系统

    山东大学操作系统课设lab4 实验四 扩展文件系统(lab4) 概念欠缺 实验目的 实验环境: 实验思路: 关键源代码注释以及程序说明: 调试记录: 实验四 扩展文件系统(lab4) 概念欠缺 ifd ...

  4. 华南农业大学操作系统课设(模拟磁盘文件系统实现)(JavaFX)(单人课设)

    文章目录 展示效果的视频 题目要求+代码+报告+展示视频的下载地址 实验报告 一.需求分析 (1)输入的形式和输入值的范围: 1.输入的形式 2.输入值的范围 (2)输出的形式: (3)程序所能达到的 ...

  5. 多级文件系统(操作系统课设)

    FileManagementSystem 这个项目来自于广东工业大学的操作系统课程设计题目(多级文件系统-2)的实现 Github仓库地址 -> 传送门 介绍 以下是该课设的题目要求: 题目 多 ...

  6. 操作系统课设--虚拟内存

    山东大学操作系统课设lab7 实验七 虚拟内存(lab7) 实验目的 实验环境 实验思路 关键源代码注释以及程序说明 调试记录 实验七 虚拟内存(lab7) 实验目的 在未实现虚拟内存管理之前,Nac ...

  7. 操作系统课设之虚拟内存页面置换算法的模拟与实现

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  8. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  9. 操作系统课设--系统调用

    山东大学操作系统课设lab6 实验六 系统调用(lab6) 实验目的 实验环境 实验思路 调试记录 实验六 系统调用(lab6) 实验目的 扩展现有的class AddrSpace的实现,使得Nach ...

最新文章

  1. 美丽的公告:小(qing)编(wa)回来啦,带来了专属于AI程序猿的问候哦!
  2. fastq质量值_微生物组16S rRNA数据分析小结:从fastq测序数据到OTU table
  3. oracle Hash Join及三种连接方式
  4. python的类的super()
  5. Cortex-A、Cortex-R、Cortex-M处理器的性能比较
  6. 【爬坑】Vim 文档加密 解密
  7. windows系统OLLVM + NDK 混淆编译环境搭建
  8. 价格要大涨,新5G iPhone可能不会带来换机热?
  9. CVE-2021-1675: Windows Print Spooler远程代码执行漏洞
  10. 计算机对身体有哪些危害,经常玩电脑的危害 经常玩电脑对身体有哪些伤害
  11. js基础——function类型
  12. 北斗高精度卫星接收机的分类
  13. React Native组件之Switch和Picker和Slide
  14. win7共享计算机打不开,windows7共享文件夹打不开怎么办
  15. MySQL Key的含义
  16. Swift - 微信聊天群头像实现 (群聊的组合头像)
  17. 西门子PPI协议的工控通信控件
  18. 手机OTG 我的世界_怎么用手机把小说下载到mp3
  19. 霍营到北土城时间记录
  20. 金蝶系统服务器链接设置,金蝶如何设置连接服务器

热门文章

  1. 怎么打公式_迫真公式部~注入之里技
  2. java 重构 if else_java中繁杂的if/else怎么重构
  3. 数据中心主机房的加湿量和除湿量如何计算
  4. 机房空调清理杨柳絮操作
  5. 医院无线网络系统设计
  6. 数据中心的运维管理原则(二)
  7. 数据中心冷热空气流控制优化方案
  8. python有什么好玩的库_你知道Python很火!那你知道它有哪些好玩的库吗?
  9. java+@api_Java 常用的api
  10. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略