没有合适的资源?快使用搜索试试~ 我知道了~
操作系统课程设计简单文件系统的实现.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 78 浏览量
2022-07-13
10:22:34
上传
评论 1
收藏 127KB DOC 举报
温馨提示
试读
65页
操作系统课程设计简单文件系统的实现.doc
资源推荐
资源详情
资源评论
.
1 / 65
操作系统课程设计报告
小组编号: 小组成员:
一、课程设计概述:
1、题目:简单文件系统的实现
2、实现容
(1) 在存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级
目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统
以一个 Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到存的虚拟磁盘空间
中。
(2) 文件存储空间的分配可采用显式分配或其他的办法。
(3) 空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储
空间,并采用显式分配方式,那么可以将位示图合并到 FAT 中。
(4) 文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每
个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的
保护。
(5) 要求提供以下操作命令:
my_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空
间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
my_mkdir:用于创建子目录。
my_rmdir:用于删除子目录。
my_ls:用于显示目录中的容。
.
2 / 65
my_cd:用于更改当前目录。
my_create:用于创建文件。
my_open:用于打开文件。
my_close:用于关闭文件。
my_write:用于写文件。
my_read:用于读文件。
my_rm:用于删除文件。
my_exitsys:用于退出文件系统。
二、设计思路(主要算法描述、程序流程图等):
1.系统主函数 main()
(1)对应命令:无
(2)命令调用格式:无
(3)函数设计格式:void main()
(4)功能:系统主函数
(5)输入:无
(6)输出:无
(7)函数需完成的工作:
① 对前面定义的全局变量进行初始化;
② 调用 startsys()进入文件系统;
③ 列出文件系统提供的各项功能及命令调用格式;
④ 显示命令行提示符,等待用户输入命令;
.
3 / 65
⑤ 将用户输入的命令保存到一个 buf 中;
⑥ 对 buf 中的容进行命令解析,并调用相应的函数执行用户键入的命令;
⑦ 如果命令不是“my_exitsys”,则命令执行完毕后转④。
2. 进入文件系统函数 startsys()
(1)对应命令:无
(2)命令调用格式:无
(3)函数设计格式:void startsys()
(4)功能:由 main()函数调用,进入并初始化我们所建立的文件系统,以供用户使用。
(5)输入:无
(6)输出:无。
(7)函数需完成的工作:
① 申请虚拟磁盘空间;
② 使用 c 语言的库函数 fopen()打开 myfsys 文件:若文件存在,则转③;若文件不存在,
则创建之,转⑤
③ 使用 c 语言的库函数 fread()读入 myfsys 文件容到用户空间中的一个缓冲区中,并判断
其开始的 8 个字节容是否为“10101010”(文件系统魔数),如果是,则转④;否则转⑤;
④ 将上述缓冲区中的容复制到存中的虚拟磁盘空间中;转⑦
⑤ 在屏幕上显示“myfsys 文件系统不存在,现在开始创建文件系统”信息,并调用 my_format()
对①中申请到的虚拟磁盘空间进行格式化操作。转⑥;
⑥ 将虚拟磁盘中的容保存到 myfsys 文件中;转⑦
⑦ 使用 c 语言的库函数 fclose()关闭 myfsys 文件;
⑧ 初始化用户打开文件表,将表项 0 分配给根目录文件使用,并填写根目录文件的相关信
.
4 / 65
息,由于根目录没有上级目录,所以表项中的 dirno 和 diroff 分别置为 5(根目录所在起始
块号)和 0;并将 ptrcurdir 指针指向该用户打开文件表项。
⑨ 将当前目录设置为根目录。
3.磁盘格式化函数 my_format()
(1)对应命令:my_format
(2)命令调用格式:my_format
(3)函数设计格式:void my_format()
(4)功能:对虚拟磁盘进行格式化,布局虚拟磁盘,建立根目录文件(或根目录区)。
(5)输入:无
(6)输出:无。
(7)函数需完成的工作:
① 将虚拟磁盘第一个块作为引导块,开始的 8 个字节是文件系统的魔数,记为“10101010”;
在之后写入文件系统的描述信息,如 FAT 表大小及位置、根目录大小及位置、盘块大小、
盘块数量、数据区开始位置等信息;
② 在引导块后建立两完全一样的 FAT 表,用于记录文件所占据的磁盘块及管理虚拟磁盘块
的分配,每个 FAT 占据两个磁盘块;对于每个 FAT 中,前面 5 个块设置为已分配,后面 995
个块设置为空闲;
③ 在第二 FAT 后创建根目录文件 root,将数据区的第 1 块(即虚拟磁盘的第 6 块)分配给
根目录文件,在该磁盘上创建两个特殊的目录项:“.”和“..”,其容除了文件名不同之外,其他
字段完全相同。
4.更改当前目录函数 my_cd()
(1)对应命令:my_cd
.
5 / 65
(2)命令调用格式:my_cd dirname
(3)函数设计格式:void my_cd(char *dirname)
(4)功能:改变当前目录到指定的名为 dirname 的目录。
(5)输入:
dirname:新的当前目录的目录名;
(6)输出:无
(7)函数需完成的工作:
① 调用 my_open()打开指定目录名的父目录文件,并调用 do_read()读入该父目录文件容到
存中;
② 在父目录文件中检查新的当前目录名是否存在,如果存在则转③,否则返回,并显示出
错信息;
③ 调用 my_close()关闭①中打开的父目录文件;
④ 调用 my_close()关闭原当前目录文件;
⑤ 如果新的当前目录文件没有打开,则打开该目录文件;并将 ptrcurdir 指向该打开文件表
项;
⑥ 设置当前目录为该目录。
5.创建子目录函数 my_mkdir()
(1)对应命令:my_mkdir
(2)命令调用格式:my_ mkdir dirname
(3)函数设计格式:void my_mkdir(char *dirname)
(4)功能:在当前目录下创建名为 dirname 的子目录。
(5)输入:
剩余64页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3669
- 资源: 59万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功