当前位置:文档之家› 操作系统模拟unix文件系统实验报告

操作系统模拟unix文件系统实验报告

操作系统大型实验班级:学号:姓名:一实验介绍……………………………………………………………………1.实验名称2.实验目的3.实验内容及要求二实验环境……………………………………………………………………三实验设计……………………………………………………………………1.数据结构设计2.系统流程设计3.实现命令操作四模块详解……………………………………………………………………1 .文件操作2 .用户操作五实验演示……………………………………………………………………1 .初始化磁盘块2 .用户登录3 .目录操作4 .文件操作六源代码………………………………………………………………………七实验心得体会……………………………………………………………………1.调试中遇到的问题总结2.实验感悟一、实验介绍1.实验名称操作系统大型实验2.实验目的完成一个 UNIX/Linux文件系统的子集的模拟实现,了解Unix文件系统的实现机制。

3.实验内容及要求(1)文件卷结构设计0#块可省略I节点栈及空间为20项块大小为512字节卷盘块数大于100I节点盘块数大于10块(2)I节点结构设计文件大小文件联接计数文件地址文件拥有者文件所属组文件权限及类别文件最后修改时间其中文件地址为六项:四个直接块号,一个一次间址,一个两次间址(3)目录结构用16字节表示,其中14字节为文件名,2字节为I节点号(4)用户及组结构用户信息中包括用户名、口令,所属组,用户打开文件表(5)文件树结构除(4)要求外,适当考虑UNIX本身文件树结构(6)实现功能Ls 显示文件目录Chmod 改变文件权限Chown 改变文件拥有者Chgrp 改变文件所属组Pwd 显示当前目录Cd 改变当前目录Mkdir 创建子目录Rmdir 删除子目录Mv 改变文件名Cp 文件拷贝Rm 文件删除Ln 建立文件联接Cat 连接显示文件内容Vi 文件写入Mk 创建文件umask 查看用户屏蔽码Umask 文件创建屏蔽码Passwd 修改用户口令Ls-l 查看文件类型Login 用户注销Logout 退出系统Help 显示帮助信息二、实验环境实验设备:Microsoft Visual Studio 2010开发语言:c++三、实验设计1.数据结构设计磁盘文件结构设计:用一个名为disk.txt的文件模拟Unix系统磁盘,总共分为200块,每块514个字节(实际可用512个字节,还有2个字节是磁盘分割符‘\n’),使第一块(0#)盘块做为超级块,记录该系统磁盘的使用情况;第二块(1#)盘块——第十三块(12#)盘块作为存储I 结点使用,每个I结点74个字节,所以每个盘块可以存放6个I结点,总共有72个I结点,记录在超级块中;十三块(12#)以后的盘块作为存储文件内容使用,总共187个盘块,用成组连接法记录在超级块中。

对于I结点的具体设计如下:class INode //(74B){public:int fsize;//文件大小 setw(6)int fbnum;//文件盘块数 setw(6)int addr[4];//四个直接盘块号文件最大为4*512=2048=2KB setw(4)*4int addr1;//一个一次间址() 文件大于2KB,小于2KB+16*512=10KB setw(4)int addr2;//一个两次间址()文件大于10KB,小于10KB+16*16*512B=138KB setw(4) char owner[6];//文件拥有者 setw(6)char group[6];//文件所属组 setw(6)char mode[12];// 文件类别及存储权限 setw(12)char ctime[10];//最近修改时间 setw(10)int connect;//文件联接计数};对于超级块的具体设计如下:class superBlock{public:int FIStack[72];//空闲结点号栈 setw(3)*72 int FICount;//空闲i结点总数 setw(3)int FIPtr;//空闲结点栈指针 setw(3)int FBStack[10];//空闲盘块号栈 setw(4)*10 int FBCount;//空闲盘块总数 setw(4)int FBPtr;//空闲盘块栈指针 setw(3)};初始化磁盘示意图:除了超级块、I结点、磁盘文件的数据结构设计以外,为了系统操作方便,我还设计了用户类、文件目录类。

用户类具体设计:class USER//用户(24B){public:char name[6];//用户名 setw(6)char pass[6];//密码 setw(6)char group[6];//所属组 setw(6)int umask[3];//用户umask码 setw(6)};用户信息全部存放在一个user.txt的文件里面,所以对于user.txt文件也有一个设计,文件最开始是存放用户总数(setw(6)),随后跟着的是每一位用户名、密码、所属组、用户umask码。

文件目录类具体设计:class Catalog//目录项(18B){public:char fname[14];//文件名 setw(14)int index; //i结点号 setw(4)};目录信息全部都存放在disk磁盘里面,所以具体数据结构设计都在上面的磁盘文件设计中提及。

2. 程序流程设计◆系统主体流程图设计见图1◆用户注册流程图见图2◆登陆功能流程图见图3◆用户修改口令流程图见图4◆用户umask码修改流程图见图5◆显示所有子目录ls操作流程图见图6◆创建文件mk、目录mkdir流程图见图7◆删除文件rm流程图见图8◆删除目录文件rmdir流程图见图9◆改变当前路径cd操作流程图见图10◆查看文件内容cat操作流程图见图11◆拷贝文件、目录cp操作流程图见图12◆建立文件联接ln操作流程图见图13◆修改文件名称MV操作流程图见图14◆修改文件权限chmod操作流程图见图15◆修改文件拥有者chown、所属组chgrp操作流程图见图16◆写流程图vi见图17图1系统主体流程图图3 登陆功能流程图图7 创建文件mk、目录mkdir流程图10 改变当前路径cd操作流程图图11 查看文件内容cat操作流程图图13 建立文件联接ln操作流程图图15 修改文件权限chmod操作流程图图16 修改文件拥有者chown、所属组chgrp操作流程图图17 写文件vi操作流程图3.实现命令操作cd[enter] .[enter] 切换到当前目录cd[enter] /[enter] 切换到根目录cd[enter] ..[enter] 切换到父目录cd[enter] dir[enter] 切换到某一子目录,dir为子目录名cd[enter] string[enter] 切换到指定路径的目录,string为路径mkdir[enter] dir[enter] 当前目录下创建名为dir的子目录rmdir[enter] dir[enter] 删除当前目录下名为dir的子目录mk[enter] file[enter] 当前目录下创建名为file的文件rm[enter] file[enter] 删除当前目录下名为file的文件cp[enter] dirORfile[enter] string[enter] 拷贝当前目录下文件或子目录到指定路径下cat[enter] file[enter] 查看当前目录下名为file的文件内容vi[enter] file[enter] 向当前目录下名为file的文件写入一定内容pwd[enter] 显示当前目录ls[enter] 显示所有子目录chmod[enter] file[enter] 改变当前目录下名为file文件的权限chown[enter] file[enter] 改变当前目录下名为file文件的拥有者chgrp[enter] file[enter] 改变当前目录下名为file文件的所属组MV[enter] file[enter] 改变当前目录下名为file文件的文件名login[enter] 用户注销,可以重新登陆passwd[enter] 用户改变密码umask[enter] 查看用户umask码Umask[enter] code[enter] 修改用户umask码为codeln[enter] file1[enter] file2[enter]文件file1与file2建立连结ls-l[enter] file[enter] 查看文件file的类别help[enter] 提供帮助logout[enter] 退出系统四、模块详解1.文件操作◆mk创建文件模块,输入mk命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的数据文件。

在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。

具体流程图查看第二节,系统流程图设计部分。

◆rm删除文件模块,输入rm命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。

在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。

具体流程图查看第二节,系统流程图设计部分。

◆mkdir创建目录文件模块,输入mkdir命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。

在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。

具体流程图查看第二节,系统流程图设计部分。

◆rmdir删除目录文件模块,输入rmdir命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的目录文件。

在该删除过程中要判断该目录中是否存在该目录文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。

删除的时候要判断该目录是否为空,如果里面有内容,则要通过递归函数,将他们一并删除了。

具体流程图查看第二节,系统流程图设计部分。

◆cp拷贝文件模块,输入cp命令,回车,输入要拷贝文件的文件名,回车,输入要拷贝到哪个路径下面,即会在该路径下创建一个名为与被拷贝文件名相同的数据文件(目录文件),并且指向盘块里面的内容都相同的数据文件(目录文件)。

在该拷贝过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有拷贝文件的权限,有权限才可以拷贝。

相关主题