ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:65.84KB ,
资源ID:717745      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/717745.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计 简单文件系统的实现.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计 简单文件系统的实现.docx

1、操作系统课程设计 简单文件系统的实现操作系统课程设计报告小组编号: 小组成员:一、课程设计概述:1、题目:简单文件系统的实现2、实现内容(1)在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。(2)文件存储空间的分配可采用显式链接分配或其他的办法。(3)空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。(4)文件目录结

2、构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。(5)要求提供以下操作命令:my_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。my_mkdir:用于创建子目录。my_rmdir:用于删除子目录。my_ls:用于显示目录中的内容。my_cd:用于更改当前目录。my_create:用于创建文件。my_open:用于打开文件。my_close:用于关闭文件。my_write:用于写文件。my_read:用于读

3、文件。my_rm:用于删除文件。my_exitsys:用于退出文件系统。二、设计思路(主要算法描述、程序流程图等):1系统主函数main()(1)对应命令:无(2)命令调用格式:无(3)函数设计格式:void main()(4)功能:系统主函数(5)输入:无(6)输出:无(7)函数需完成的工作: 对前面定义的全局变量进行初始化; 调用startsys()进入文件系统; 列出文件系统提供的各项功能及命令调用格式; 显示命令行提示符,等待用户输入命令; 将用户输入的命令保存到一个buf中; 对buf中的内容进行命令解析,并调用相应的函数执行用户键入的命令; 如果命令不是“my_exitsys”,则

4、命令执行完毕后转。2. 进入文件系统函数startsys()(1)对应命令:无(2)命令调用格式:无(3)函数设计格式:void startsys()(4)功能:由main()函数调用,进入并初始化我们所建立的文件系统,以供用户使用。(5)输入:无 (6)输出:无。(7)函数需完成的工作: 申请虚拟磁盘空间; 使用c语言的库函数fopen()打开myfsys文件:若文件存在,则转;若文件不存在,则创建之,转 使用c语言的库函数fread()读入myfsys文件内容到用户空间中的一个缓冲区中,并判断其开始的8个字节内容是否为“10101010”(文件系统魔数),如果是,则转;否则转; 将上述缓冲

5、区中的内容复制到内存中的虚拟磁盘空间中;转 在屏幕上显示“myfsys文件系统不存在,现在开始创建文件系统”信息,并调用my_format()对中申请到的虚拟磁盘空间进行格式化操作。转; 将虚拟磁盘中的内容保存到myfsys文件中;转 使用c语言的库函数fclose()关闭myfsys文件; 初始化用户打开文件表,将表项0分配给根目录文件使用,并填写根目录文件的相关信息,由于根目录没有上级目录,所以表项中的dirno和diroff分别置为5(根目录所在起始块号)和0;并将ptrcurdir指针指向该用户打开文件表项。 将当前目录设置为根目录。3磁盘格式化函数my_format()(1)对应命令

6、:my_format(2)命令调用格式:my_format(3)函数设计格式:void my_format()(4)功能:对虚拟磁盘进行格式化,布局虚拟磁盘,建立根目录文件(或根目录区)。(5)输入:无 (6)输出:无。(7)函数需完成的工作: 将虚拟磁盘第一个块作为引导块,开始的8个字节是文件系统的魔数,记为“10101010”;在之后写入文件系统的描述信息,如FAT表大小及位置、根目录大小及位置、盘块大小、盘块数量、数据区开始位置等信息; 在引导块后建立两张完全一样的FAT表,用于记录文件所占据的磁盘块及管理虚拟磁盘块的分配,每个FAT占据两个磁盘块;对于每个FAT中,前面5个块设置为已分

7、配,后面995个块设置为空闲; 在第二张FAT后创建根目录文件root,将数据区的第1块(即虚拟磁盘的第6块)分配给根目录文件,在该磁盘上创建两个特殊的目录项:“.”和“.”,其内容除了文件名不同之外,其他字段完全相同。 4更改当前目录函数my_cd() (1)对应命令:my_cd (2)命令调用格式:my_cd dirname(3)函数设计格式:void my_cd(char *dirname)(4)功能:改变当前目录到指定的名为dirname的目录。(5)输入:dirname:新的当前目录的目录名; (6)输出:无(7)函数需完成的工作: 调用my_open()打开指定目录名的父目录文件,

8、并调用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的子目

9、录。(5)输入:dirname:新建目录的目录名。 (6)输出:无。(7)函数需完成的工作: 调用do_read()读入当前目录文件内容到内存,检查当前目录下新建目录文件是否重名,若重名则返回,并显示错误信息; 为新建子目录文件分配一个空闲打开文件表项,如果没有空闲表项则返回-1,并显示错误信息; 检查FAT是否有空闲的盘块,如有则为新建目录文件分配一个盘块,否则释放中分配的打开文件表项,返回,并显示错误信息; 在当前目录中为新建目录文件寻找一个空闲的目录项或为其追加一个新的目录项;需修改当前目录文件的长度信息,并将当前目录文件的用户打开文件表项中的fcbstate置为1; 准备好新建目录文件

10、的FCB的内容,文件的属性为目录文件,以覆盖写方式调用do_write()将其填写到对应的空目录项中; 在新建目录文件所分配到的磁盘块中建立两个特殊的目录项“.”和“.”目录项,方法是:首先在用户空间中准备好内容,然后以截断写或者覆盖写方式调用do_write()将其写到中分配到的磁盘块中; 返回。6删除子目录函数rmdir()(1)对应命令:my_ rmdir(2)命令调用格式:my_ rmdir dirname(1)函数设计格式:void my_rmdir(char *dirname)(2)功能:在当前目录下删除名为dirname的子目录。(3)输入:dirname:欲删除目录的目录名。

11、(4)输出:无。(5)函数需完成的工作: 调用do_read()读入当前目录文件内容到内存,检查当前目录下欲删除目录文件是否存在,若不存在则返回,并显示错误信息; 检查欲删除目录文件是否为空(除了“.”和“.”外没有其他子目录和文件),可根据其目录项中记录的文件长度来判断,若不为空则返回,并显示错误信息; 检查该目录文件是否已经打开,若已打开则调用my_close()关闭掉; 回收该目录文件所占据的磁盘块,修改FAT; 从当前目录文件中清空该目录文件的目录项,且free字段置为0:以覆盖写方式调用do_write()来实现; 修改当前目录文件的用户打开表项中的长度信息,并将表项中的fcbsta

12、te置为1; 返回。7显示目录函数my_ls()(1)对应命令:my_ls(2)命令调用格式:my_ls(3)函数设计格式:void my_ls(void)(4)功能:显示当前目录的内容(子目录和文件信息)。(5)输入:无 (6)输出:无(7)函数需完成的工作: 调用do_read()读出当前目录文件内容到内存; 将读出的目录文件的信息按照一定的格式显示到屏幕上; 返回。 8创建文件函数my_create() (1)对应命令:my_create(2)命令调用格式:my_create filename(3)函数设计格式:int my_create (char *filename)(4)功能:创建

13、名为filename的新文件。(5)输入:filename:新建文件的文件名,可能包含路径。 (6)输出:若创建成功,返回该文件的文件描述符(文件打开表中的数组下标);否则返回-1。(7)函数需完成的工作: 为新文件分配一个空闲打开文件表项,如果没有空闲表项则返回-1,并显示错误信息; 若新文件的父目录文件还没有打开,则调用my_open()打开;若打开失败,则释放中为新建文件分配的空闲文件打开表项,返回-1,并显示错误信息; 调用do_read()读出该父目录文件内容到内存,检查该目录下新文件是否重名,若重名则释放中分配的打开文件表项,并调用my_close()关闭中打开的目录文件;然后返回

14、-1,并显示错误信息; 检查FAT是否有空闲的盘块,如有则为新文件分配一个盘块,否则释放中分配的打开文件表项,并调用my_close()关闭中打开的目录文件;返回-1,并显示错误信息; 在父目录中为新文件寻找一个空闲的目录项或为其追加一个新的目录项;需修改该目录文件的长度信息,并将该目录文件的用户打开文件表项中的fcbstate置为1; 准备好新文件的FCB的内容,文件的属性为数据文件,长度为0,以覆盖写方式调用do_write()将其填写到中分配到的空目录项中; 为新文件填写中分配到的空闲打开文件表项,fcbstate字段值为0,读写指针值为0; 调用my_close()关闭中打开的父目录文

15、件; 将新文件的打开文件表项序号作为其文件描述符返回。9删除文件函数my_rm()(1)对应命令:my_rm(2)命令调用格式:my_rm filename(3)函数设计格式:void my_rm(char *filename)(4)功能:删除名为filename的文件。(5)输入:filename:欲删除文件的文件名,可能还包含路径。 (6)输出:无。(7)函数需完成的工作: 若欲删除文件的父目录文件还没有打开,则调用my_open()打开;若打开失败,则返回,并显示错误信息; 调用do_read()读出该父目录文件内容到内存,检查该目录下欲删除文件是否存在,若不存在则返回,并显示错误信息; 检查该文件是否已经打开,若已打开则关闭掉; 回收该文件所占据的磁盘块,修改FAT; 从文件的父目录文件中清空该文件的目录项,且free字段置为0:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1