操作系统模拟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. 程序流程设计