山东大学操作系统课程设计实验四——文件系统扩充

实验四 扩展文件系统(lab4)

实验目的:

扩展Nachos的文件系统。Nachos的文件系统是一个简单并且能力有限的系统,限制之一就是文件的大小是不可扩展的。通过扩展,使得文件的大小是灵活可变的。

实验环境:

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

实验思路:

第一步

1.创建lab4,并将lab5拷贝进来,再把filesys文件夹下的拷贝进来
2.阅读源码,找主要任务

那我们先开始看文件:

根据实验指导书上面讲的,disk和synchdisk是文件系统的最底层,负责将指定数据写入指定扇区,在我们的任务中不需要修改。Bitmap储存磁盘状况,Directory储存文件头位置,也不需要修改。main.cc和fstest.cc也是完整的调试文件,不需要修改。
那么本次实验主要需要改动的就是openfile文件,fileHeader保存了文件的大小、数据扇区,所以也要被修改。

openfile

openfile.h

发现主要是打开文件的读写操作之类的

fileheader

.h

发现在这里对文件的长度有了定义,那么想要自由改变文件长度就要在这里修改

第二步 开始操作

1.添加文件长度拓展的接口,名命名为extend
2.在openfile内添加可以返回文件头位置的方法
3makefile修改


makefile.local

makefile

4.fstest修改
按照实验指导,在Append方法和NAppend方法中去掉openfile->WriteBack()一句的注释。

关键源代码注释以及程序说明:

长度拓展接口代码:

bool
FileHeader::Extend(int newSize)
{

    if(newSize<numBytes)return FALSE;   //if not a extend operation

    if(newSize==numBytes)return TRUE;   //if size not change

    int newNumSectors  = divRoundUp(newSize, SectorSize);   //the number of sectors the new size need to be allocated.
    if(newNumSectors == numSectors){
        numBytes = newSize; 
        return TRUE;    //if number of sectors new size need equals the 

    }

    int diffSector = newNumSectors - numSectors;    

    OpenFile *bitmapfile = new OpenFile(0);
    BitMap *freeMap;
    freeMap = new BitMap(NumSectors);
        freeMap->FetchFrom(bitmapfile);
printf("debug in fhdr extend where new Sector=%d \n",freeMap->NumClear());
    if(newNumSectors>NumDirect||freeMap->NumClear()< diffSector)return FALSE;   //if disk is full or file size is too big.

    //allocate the new sectors and store them into file header
    int i;
    for(i = numSectors; i<newNumSectors; i++)
    {
        dataSectors[i] = freeMap->Find();
    }
    numBytes = newSize;
    numSectors = newNumSectors;

    return TRUE;
}

WriteBack代码

void
OpenFile::WriteBack()
{
    hdr->WriteBack(headSector);
}

调试记录及实验结果:


make命令成功

创建磁盘命令

cp新文件

ap对文件进行加长

同上

同上

使用-d命令

empty文件和small文件大小都在

因为之前写的比较乱,因此重新写了一遍方便整理,对代码进行了重构

实验原理

为什么初始条件下不能增加文件长度

因为在fstest中,append是我们在main中调用的实际对文件进行操作的函数。
在append中我们使用的是openfile的writeat函数
但是write函数会进行一个判断,去看新写入后文件长度是否超过文件头规定的长度,如果超过了就放弃操作
那么我们就需要一步一步来
先去定义一个可以改变文件头记载的文件长度的函数
再重写write 函数,使得可以正常写入,这就是我们做这道题的思路。

添加文件头 header的变更长度的方法

命名为extend(size)
提供扩充文件大小的作用
再在openfile中对writeat进行修改,在写入之前调用一下extend
再去fstest中对writeback和前面打开writeat方法的注释


image.png

image.png

关于writeback方法也是需要实现在openfile里面的,在实验指导书里面已经给出了

调试记录

最坑的错误


openfile.cc

在这里第一个if判断中之前是判断当前文件大小和之后文件大小进行一个比较,需要修改他的判断条件,否则无法进入我们想要的第二个if判断拓展文件大小
被这里坑了很久

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容