操作系统模拟unix文件系统实验报告要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统大型实验
班级:学号:姓名:
一实验介绍……………………………………………………………………
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字节
卷盘块数大于100
I节点盘块数大于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)*4
int 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