nachos Lab5实习报告Word文档格式.docx
- 文档编号:19807280
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:29
- 大小:1.37MB
nachos Lab5实习报告Word文档格式.docx
《nachos Lab5实习报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《nachos Lab5实习报告Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
阅读Nachos源代码中与文件系统相关的代码,理解Nachos文件系统的工作原理。
code/filesys/和code/filesys/
code/filesys/和code/filesys/
code/userprog/和code/userprog/
code/filesys/和code/filesys/定义文件系统FileSystem
Nachos实现了两套文件系统,它们对外接口是完全一致的。
一套是FILESYS_STUB,建立在UNIX文件系统之上,不使用Nachos的模拟磁盘,它主要用于先行实现其他依赖于文件系统的功能,另一套是Nachos的文件系统,实现在Nachos的虚拟磁盘之上
主要常量包括
#defineFreeMapSector0面的部分
修改filesys/,定义相关变量
chartype[4];
nachos-cpfile1创建文件
可以发现,通过文件创建过程,文件类型,创建时间,上次访问时间,上次修改时间符合实际
然后,执行命令./nachos-p访问文件
可以发现,通过文件读过程,文件上次访问时间符合实际
最后,执行命令./nachos-r删除文件,考察根目录文件
可以发现,通过文件写过程,文件上次访问时间,上次修改时间符合实际
扩展文件名长度
code/filesys/和code/filesys/定义目录文件Directory,主要常量包括
#defineFileNameMaxLen9
ame_length,table[i].name_position);
name_file->
ReadAt(...,
table[i].name_length,table[i].name_position);
测试结果同上
Exercise3扩展文件长度
改直接索引为间接索引,以突破文件长度不能超过4KB的限制。
基本思路:
当前,nachos文件头最多包含直接索引30项,最大文件大小30*128=3840
我选择将最后一项直接索引改为间接索引,因为磁盘扇区的最多包含直接索引32项,所以最大文件大小30*128+1*32*128=7808
nachos-cpfile3file3,创建文件file3
位图文件和根目录:
当前文件文件头:
当前文件文件内容(部分):
文件大小5400,需要43个扇区,根据我们的假设,直接索引引导29个扇区,剩下的14个扇区需要间接索引引导,所以文件占据的扇区是
直接索引引导扇区6,7,8,...,34(29个)
间接索引25
间接索引引导扇区36,37,38,...,49(14个)
结果符合实际
最后,执行命令./nachos-rfile3,删除文件file3
可以发现,文件顺利删除,相关空间全部释放,结果符合实际
Exercise4实现多级目录
记录文件路径,在创建文件,打开文件,删除文件时进行递归查找
修改filesys/的DirectoryEntry,增加变量
inttype;
nachos-cd,分别调用filesys/fstest的函数CreateDir,实现文件夹的创建
voidCreateDir(char*name){
fileSystem->
Create(name,-1);
}
执行命令./nachos-cdtest,在根目录创建文件夹test
执行命令./nachos-cpfile1test/file1,在文件夹test创建文件file1
执行命令./nachos-cpfile2test/file2,在文件夹test创建文件file2
根据输出的信息,根目录下有目录test,目录test下有文件file1和file2,文件的类型(file/directory)和文件的路径符合实际
扇区0:
位图文件文件头
扇区1:
根目录文件头
扇区2:
位图文件
扇区3、4、5、6:
根目录文件
扇区7:
test文件夹文件头
扇区8、9、10、11:
test文件夹文件
扇区12:
file1文件头
扇区13:
file1文件
扇区14:
file2文件头
扇区15:
file2文件
执行命令./nachos-rtest,删除文件夹test
可以发现,因为我们删除的是文件夹,并且文件夹非空,所以无法删除
执行命令./nachos-rtest/file1,删除文件夹test的文件file1
执行命令./nachos-rtest/file2,删除文件夹test的文件file2
执行命令./nachos-rtest,删除文件夹
可以发现,文件夹以及相关文件顺利删除
递归删除实现:
如果我们希望实现递归删除,需要修改,提供获得目录项的接口
intGetSize(){returntableSize;
DirectoryEntry*GetTable(){returntable;
修改的Remove函数,根据目录项递归删除文件夹文件
inttableSize=current_directory->
GetSize();
DirectoryEntry*table=newDirectoryEntry[tableSize];
table=current_directory->
GetTable();
for(inti=0;
i<
tableSize;
i++){
if(table[i].inUse)
Remove(table[i].path);
测试结果:
执行命令./nachos-cdtest,建立文件夹test
执行命令./nachos-cpfile1test/file1,建立文件file1
执行命令./nachos-cpfile2test/file2,建立文件file2
执行命令./nachos-rtest
可以发现,文件夹test以及文件夹下文件file1,file2全部删除,符合实际
Exercise5动态调整文件长度
对文件的创建操作和写入操作进行适当修改,以使其符合实习要求。
修改filesys/,实现函数Extend,基本功能是实现文件长度的增长,基本流程是修改文件长度,获得增长前扇区数量,计算增长后扇区数量,如果增长前扇区数量与增长后扇区数量相同,那么文件不需要额外空间,否则检查剩余空间,如果剩余空间不能满足需求,那么返回错误(false),如果剩余空间能够满足需求,那么进行相关空间的分配
修改filesys/的函数WriteAt,这个函数的主要功能是从文件特定位置读取特定长度的数据到特定位置,返回值是实际读出的字节数,修改前如果结束位置超过文件长度,那么取文件长度,修改后如果结束位置超过文件长度,那么进行文件长度的增长
利用测试文件filesys/,通过-t参数,可以调用PerformanceTest函数,基本流程是建立TestFile,向文件中循环写入特定的内容(90),从文件中循环读出特定的内容进行检查,删除文件,这里设置循环次数为20
可以发现,写入第0字节-第9字节的过程中和写入第120字节-129字节的过程中,文件申请额外的扇区,符合实际(扇区大小128字节)
通过测试程序的检查机制以及文件内容的输出,可以发现我们正确完成写入过程
Exercise6源代码阅读
(1)阅读Nachos源代码中与异步磁盘相关的代码,理解Nachos系统中异步访问模拟磁盘的工作原理。
filesys/和filesys/
(2)利用异步访问模拟磁盘的工作原理,在ClassConsole的基础上,实现ClassSynchConsole。
第一部分:
filesys/和filesys/定义nachos同步磁盘
Nachos模拟的磁盘是异步设备。
发出访问磁盘的请求后立刻返回,从磁盘读出或写入数据结束后,通过磁盘中断,说明磁盘访问真正结束。
然而Nachos是一个多线程的系统,如果多个线程同时访问磁盘,那么可能引起混乱,所以必须作出以下限制:
(1)同时只能有一个线程访问磁盘
(2)当发出磁盘访问请求后,必须等待访问的真正结束
这两个限制就是实现同步磁盘的目的
前者通过锁实现,只有获得锁的线程才能访问磁盘,后者通过信号量和磁盘中断实现,当前线程发出磁盘相关请求后执行P操作阻塞,直到磁盘相关请求完成后磁盘中断执行V操作唤醒线程
重要变量包括:
Disk*disk;
nachos-c,可以发现,Console正常运行
Exercise7实现文件系统的同步互斥访问机制,达到如下效果:
(1)一个文件可以同时被多个线程访问。
且每个线程独自打开文件,独自拥有一个当前文件访问位置,彼此间不会互相干扰。
(2)所有对文件系统的操作必须是原子操作和序列化的。
例如,当一个线程正在修改一个文件,而另一个线程正在读取该文件的内容时,读线程要么读出修改过的文件,要么读出原来的文件,不存在不可预计的中间状态。
(3)当某一线程欲删除一个文件,而另外一些线程正在访问该文件时,需保证所有线程关闭了这个文件,该文件才被删除。
也就是说,只要还有一个线程打开了这个文件,该文件就不能真正地被删除。
(1)按照已经实现的机制,不同的线程通过不同的OpenFile结构独自打开文件,独自拥有当前文件访问位置seekPosition,彼此不会互相干扰
(2)按照已经实现的机制,虽然特定扇区的访问是互斥的,但是仍然存在不可预测的情况,考虑文件存放在扇区8、9,线程1读文件,线程2写文件,如果按照序列线程1读扇区8——线程2写扇区8——线程2写扇区9——线程1写扇区8的顺序,那么读的结果是不可预测的
如果我们希望避免这样的情况,可以按照读者写者问题的思路,通过文件头识别特定的文件,针对特定的文件,特定时刻只允许1个写者或者多个读者。
具体实现时,1个文件对应1个信号量,对于写者,需要在写过程前对信号量进行P操作,写过程完成后对信号量进行V操作,对于读者,需要维护读者数量,只有读者数量从0到1时对信号量进行P操作,只有读者数量从1到0时对信号量进行V操作。
因为读者数量由所有读者访问和维护,所以需要用锁保证对读者数量的访问和修改是互斥的
修改filesys/,增加变量
Semaphore*mutex[NumSectors];
nachos-cpfile1file1建立文件file1,file1文件头占据扇区5,文件占据扇区6,执行命令./nachos-cpfile2file2建立文件file2,file2文件头占据扇区7,文件占据扇区8,执行命令./nachos-rfile1删除文件file1,至此,空间占用情况1、2、3、4、7、8
执行命令./nachos-cpfile4file4,file4需要5个扇区,文件头占据扇区5,如果按照原来的分配方法,文件占据扇区6、9、10、11、12,这样的分配方式不利于文件集中在特定磁道,如果按照现在的分配方式,文件占据扇区9、10、11、12、13,有更大概率集中在特定磁道
第二部分:
修改filesys/,定义cache表项
classCache{
public:
intvalid;
nachos-t,使用系统提供的文件系统测试程序filesys/,读/写循环次数20次
可以发现,第一次读操作直接从磁盘获得数据,第二次操作从cache获得数据
考察系统运行状态,可以发现cache减少磁盘访问次数
修改前
修改后
Challenge2实现pipe机制
重定向openfile的输入输出方式,使得前一进程从控制台读入数据并输出至管道,后一进程从管道读入数据并输出至控制台。
使用管道文件模拟管道的实现,管道文件的文件头固定在第2扇区
#definePipeSector2
修改文件filesys/的构造函数,实现管道文件的初始化
FileHeader*pipeHdr=newFileHeader;
freeMap->
Mark(PipeSector);
ASSERT(pipeHdr->
Allocate(freeMap,PipeFileSize));
pipeHdr->
WriteBack(PipeSector);
修改文件filesys/,实现函数ReadPipe和函数WritePipe,函数ReadPipe的功能是向管道写入数据,函数WritePipe的功能是从管道读取数据,需要说明的是,这里使用管道文件的长度标注管道的数据量,所以向管道写入数据时,需要根据管道的数据量修改管道文件的长度,从管道读取数据时,需要根据管道文件的长度获得管道的数据量
修改,增加命令./nachos-t1和./nachos-t2,分别调用filesys/fstest的函数PerformanceTest1和PerformanceTest2,函数PerformanceTest1的主要功能是从控制台对数据输出至管道,函数PerformanceTest2的主要功能是从管道读入数据输出至控制台
可以发现,相关功能顺利实现
内容三:
遇到的困难以及解决方法
困难:
文件系统基本操作
准备工作:
(1)修改userprog/Makefile,删除-DFILESYS_STUB标志
(使用nachos文件系统)
(2)修改threads/,注释#ifdefTHREAD和#endif中间部分
(进入后面判断)
(3)需要时添加-d选项输出调试信息
具体实验:
(1)文件系统初始化-f
根据调试信息,文件系统完成初始化
(2)文件系统详细信息-D
管理内存空间位图文件头
(便于启动初始化时寻找)
管理内存空间位图文件(已使用扇区0,1,2,3,4)
扇区3,扇区4:
根目录文件(根目录为空)
(3)从宿主机复制文件进入nachos-cp
建立文件
复制文件
查看文件系统详细信息
管理内存空间位图文件(已使用扇区0,1,2,3,4,5,6)
根目录文件(file1)
扇区5:
扇区6:
file1内容(sampleone)
(4)查看目录包含文件-l
(5)其他相关命令包括
查看特定文件例如./nachos-pfile1
删除特定文件例如./nachos-rfile1
内容四:
收获及感想
实习课程和理论课程相得益彰。
通过本次实习,我强化了对文件系统相关知识的理解,锻炼了编程能力。
经过一段时间的接触,感觉对nachos系统有了一定的了解,对课程有了一定的兴趣,期待在以后的实习中能够了解nachos更多的功能并且在此基础上进行更多的修改。
内容五:
对课程的意见和建议
我觉得课程形式好,互动强,使我受益匪浅。
助教认真负责,知识充分,为课程付出很多,助教辛苦了:
-D
内容六:
参考文献
[1]操作系统课件文件系统
[2]nachos中文教程
[3]05文件系统实习报告
[4]文件系统实习报告
[5]
Lab2
文件机制
实习报告
系统调用
[6]
文件系统的基本操作
(2)
[7]文件机制
文件访问的同步与互斥
[8]北大Nachos文件系统实习报告
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nachos Lab5实习报告 Lab5 实习 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)