没有合适的资源?快使用搜索试试~ 我知道了~
操作系统模拟unix文件系统实验报告.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 2 浏览量
2021-10-06
09:54:09
上传
评论
收藏 1.62MB DOC 举报
温馨提示
试读
44页
操作系统模拟unix文件系统实验报告.doc
资源推荐
资源详情
资源评论
- -
操作系统大型实验
班级: 学号: :
一 实验介绍……………………………………………………………………
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 节点构造设计
- - word.zl-
- -
文件大小
文件联接计数
文件地址
文件拥有者
文件所属组
文件权限及类别
文件最后修改时间
其中文件地址为六项:四个直接块号,一个一次间址,一个两次间址
(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++
三、实验设计
- - word.zl-
- -
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)
};
初始化磁盘示意图:
- - word.zl-
- -
除了超级块、I 结点、磁盘文件的数据构造设计以外,为了系统操作方便,我还设计了
用户类、文件目录类。
用户类具体设计:
class USER//用户(24B)
{
public:
char name[6];//用户名 setw(6)
char pass[6];//密码 setw(6)
- - word.zl-
0# 块
。。。。。。。。
。
。
。
。
。
。
1# 块
12# 块
13# 块
14# 块
16# 块
15# 块
。。。。。。。。。。。。。。
。
空闲节
点号栈
空闲盘
块号栈
空闲节点总数 71
空闲节点指针 1
空闲盘块总数 186
空闲节点指针 1
72
。
。
。
。
。
。
。
。
22#
。
。
。
。
22#
。
。
。
。
1
2
72
用于文件具
体内容存放
1
2
13#
14#
- -
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
- - word.zl-
剩余43页未读,继续阅读
资源评论
gjmm89
- 粉丝: 14
- 资源: 19万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功