您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > nachos-Lab5实习报告
文件系统实习报告2目录内容一:总体概述...................................................................................................................3内容二:任务完成情况...........................................................................................................3任务完成列表(Y/N)....................................................................................................3具体Exercise的完成情况...............................................................................................3内容三:遇到的困难以及解决方法.....................................................................................39内容四:收获及感想.............................................................................................................41内容五:对课程的意见和建议.............................................................................................41内容六:参考文献.................................................................................................................423内容一:总体概述本次实习的主要内容是在nachos文件系统的基础上进行相关的优化。目前,nachos的文件系统不甚完善,比如说文件属性的缺失,文件长度的限制,目录结构的缺失(只有根目录)以及同步互斥机制的缺失。第一部分,我们关心文件系统基础功能,我们需要了解nachos的文件系统并实现文件属性的完善,文件长度的扩展,多级目录以及文件长度的动态调整。第二部分,我们关心文件访问的同步互斥,我们需要了解nachos磁盘工作原理并实现文件系统的同步互斥访问机制。Challenge部分,我们关心文件系统的优化,我们需要实现文件位置的合理分布,cache机制以及pipe机制。内容二:任务完成情况任务完成列表(Y/N)Exercise1Exercise2Exercise3Exercise4Exercise5Exercise6Exercise7YYYYYYYChallenge1Challenge2YY具体Exercise的完成情况一、文件系统的基本操作Exercise1源代码阅读阅读Nachos源代码中与文件系统相关的代码,理解Nachos文件系统的工作原理。code/filesys/filesys.h和code/filesys/filesys.cccode/filesys/filehdr.h和code/filesys/filehdr.cccode/filesys/directory.h和code/filesys/directory.cccode/filesys/openfile.h和code/filesys/openfile.cccode/userprog/bitmap.h和code/userprog/bitmap.cccode/filesys/filesys.h和code/filesys/filesys.cc定义文件系统FileSystemNachos实现了两套文件系统,它们对外接口是完全一致的。一套是FILESYS_STUB,建立在UNIX文件系统之上,不使用Nachos的模拟磁盘,它主要用于先行实现其他依赖于文件系统的功能,另一套是Nachos的文件系统,实现在Nachos的虚拟磁盘之上4主要常量包括#defineFreeMapSector0//管理内存空间位图文件文件头扇区#defineDirectorySector1//根目录文件文件头扇区#defineFreeMapFileSize(NumSectors/BitsInByte)//管理内存空间位图文件大小#defineNumDirEntries10//根目录最多包含10个目录项#defineDirectoryFileSize(sizeof(DirectoryEntry)*NumDirEntries)//根目录文件大小主要变量包括OpenFile*freeMapFile;//管理内存空间位图文件OpenFile*directoryFile;//根目录文件(nachos运行过程保持打开状态)主要函数包括FileSystem(boolformat)//构造函数基本功能是建立文件系统,如果format标志设置,那么建立新的文件系统,基本流程是生成位图文件和根目录文件文件头,分配位图文件和根目录文件空间,向磁盘写入位图文件和根目录文件文件头,打开位图文件和根目录文件,向磁盘写入位图文件和根目录文件。否则使用原来的文件系统,基本流程是打开位图文件和根目录文件boolCreate(char*name,intinitialSize)//创建文件基本功能是创建文件,基本流程是生成文件头,分配文件空间,修正位图文件和根目录文件。返回值标注是否创建成功,如果存在同名文件/文件头空间不足/文件空间不足/目录容量不足,那么创建失败OpenFile*Open(char*name)//打开文件基本功能是打开文件,基本流程是返回打开文件数据结构,如果不存在相关文件,那么返回NULLboolRemove(char*name)//删除文件基本功能是删除文件,基本流程是删除文件相关内容,删除文件头相关内容,修正位图文件和根目录文件,如果不存在相关文件,那么返回falsevoidList()//输出文件系统文件voidPrint()//输出文件系统信息code/filesys/filehdr.h和code/filesys/filehdr.cc定义文件头FileHeader主要常量包括5#defineNumDirect((SectorSize-2*sizeof(int))/sizeof(int))//直接索引数量(=(128-2*4)/4=30)#defineMaxFileSize(NumDirect*SectorSize)//最大文件大小(=30*128=3840)主要变量包括intnumBytes;//文件字节数intnumSectors;//文件扇区数intdataSectors[NumDirect];//文件内容扇区主要函数包括boolAllocate(BitMap*freeMap,intfileSize)主要功能是初始化文件头,分配文件空间voidDeallocate(BitMap*bitMap)主要功能是回收文件空间voidFetchFrom(intsectorNumber)主要功能是从磁盘获得文件头,输入是扇区号voidWriteBack(intsectorNumber)主要功能是向磁盘写回文件头,输入是扇区号intByteToSector(intoffset)主要功能是根据偏移获得磁盘扇区intFileLength()主要功能是获得文件长度voidPrint()主要功能是输出文件相关信息(文件头,文件内容)code/filesys/directory.h和code/filesys/directory.cc定义目录文件Directory主要常量包括#defineFileNameMaxLen9//文件名最大长度主要变量包括//目录项classDirectoryEntry{public:boolinUse;//目录项是否使用intsector;//文件头扇区charname[FileNameMaxLen+1];//文件名6};inttableSize;//目录项数量DirectoryEntry*table;//目录项主要函数包括Directory(intsize)//构造函数主要功能是建立指定大小的目录~Directory()//析构函数主要功能是释放相关空间voidFetchFrom(OpenFile*file)主要功能是从磁盘获得目录文件,输入是打开文件voidWriteBack(OpenFile*file)主要功能是向磁盘写回目录文件,输入是打开文件intFind(char*name)主要功能是寻找特定文件boolAdd(char*name,intnewSector)主要功能是增加目录项boolRemove(char*name)主要功能是删除目录项voidList()主要功能是输出目录文件目录项voidPrint()主要功能是输出目录文件详细信息code/filesys/openfile.h和code/filesys/openfile.cc定义打开文件OpenFile主要变量包括FileHeader*hdr;//文件头intseekPosition;//读/写位置主要函数包括OpenFile(intsector)//构造函数主要功能是打开文件(指定文件头扇区)~OpenFile()//析构函数主要功能是关闭文件voidSeek(intposition)主要功能是设置读/写位置7intRead(char*into,intnumBytes)主要功能是从文件读/写位置读取特定长度的数据到特定位置,返回值是实际读出的字节数,基于ReadAt函数实现intWrite(char*from,intnumBytes)主要功能是从特定位置向文件读/写位置写入特定长度的数据,返回值是实际写入的字节数,基于WriteAt函数实现intReadAt(char*into,intnumBytes,intposition)主要功能是从文件特定位置读取特定长度的数据到特定位置,返回值是实际读出的字节数,主要流程是检查请求(numBytes0,position文件长度),确定起始位置(如果结束位置超过文件长度,那么取文件长度),从磁盘取出需要的扇区,读出需要的内容intWriteAt(char*from,intnumBytes,intposition)主要功能是从文件特定位置读取特定长度的数据到特定位置,返回值是实际读出的字节数,主要流程是检查请求(numBytes0,position文件长度),确定起始位置(如果结束位置超过文件长度,那么取文件长度),从磁盘取出需要的扇区,写入需要的内容,向磁盘写入相关的扇区intLength()主要功能是返回文件长度code/userprog/bitmap.h和code/userprog/bitmap.cc定义位图模块BitMap主要常量包括#defineBitsInByte8//1byte=8bit#defineBitsInWord32//1word=32bit主要变量包括intnumBits;//位图大小(bit为单位)intnumWords;//位图大小(word为单位,向上取整)unsignedint*map;//位图主要函数包括BitMap(intnitems)//构造函数主要功能是建立位图(指定bit)~BitMap()//析构函数主要功能是释放位图voidMark(intwhich)主要功能是标注特定的位voidClear(intwhich)主要功能是清除特定的位boolTest(intwhich)主要功能是测试特定的位是否标注8in
本文标题:nachos-Lab5实习报告
链接地址:https://www.777doc.com/doc-5094738 .html