欢迎来到天天文库
浏览记录
ID:32501746
大小:122.00 KB
页数:33页
时间:2019-02-09
《操作系统课程设计简单文件系统的实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、.操作系统课程设计报告小组编号:小组成员:一、课程设计概述:1、题目:简单文件系统的实现2、实现内容(1)在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。(2)文件存储空间的分配可采用显式链接分配或其他的办法。(3)空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到
2、FAT中。(4)文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。(5)要求提供以下操作命令:lmy_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。lmy_mkdir:用于创建子目录。lmy_rmdir:用于删除子目录。lmy_ls:用于显示目录中的内容。lmy_cd:用于更改当前目录。lmy_create:用于创建文件。lmy_op
3、en:用于打开文件。lmy_close:用于关闭文件。lmy_write:用于写文件。lmy_read:用于读文件。lmy_rm:用于删除文件。lmy_exitsys:用于退出文件系统。二、设计思路(主要算法描述、程序流程图等):1.系统主函数main()(1)对应命令:无(2)命令调用格式:无(3)函数设计格式:voidmain()(4)功能:系统主函数(5)输入:无(6)输出:无(7)函数需完成的工作:①对前面定义的全局变量进行初始化;②调用startsys()进入文件系统;...③列出文件系统提供的各项功能及命令调用格式;④
4、显示命令行提示符,等待用户输入命令;⑤将用户输入的命令保存到一个buf中;⑥对buf中的内容进行命令解析,并调用相应的函数执行用户键入的命令;⑦如果命令不是“my_exitsys”,则命令执行完毕后转④。2.进入文件系统函数startsys()(1)对应命令:无(2)命令调用格式:无(3)函数设计格式:voidstartsys()(4)功能:由main()函数调用,进入并初始化我们所建立的文件系统,以供用户使用。(5)输入:无(6)输出:无。(7)函数需完成的工作:①申请虚拟磁盘空间;②使用c语言的库函数fopen()打开myfs
5、ys文件:若文件存在,则转③;若文件不存在,则创建之,转⑤③使用c语言的库函数fread()读入myfsys文件内容到用户空间中的一个缓冲区中,并判断其开始的8个字节内容是否为“10101010”(文件系统魔数),如果是,则转④;否则转⑤;④将上述缓冲区中的内容复制到内存中的虚拟磁盘空间中;转⑦⑤在屏幕上显示“myfsys文件系统不存在,现在开始创建文件系统”信息,并调用my_format()对①中申请到的虚拟磁盘空间进行格式化操作。转⑥;⑥将虚拟磁盘中的内容保存到myfsys文件中;转⑦⑦使用c语言的库函数fclose()关闭m
6、yfsys文件;⑧初始化用户打开文件表,将表项0分配给根目录文件使用,并填写根目录文件的相关信息,由于根目录没有上级目录,所以表项中的dirno和diroff分别置为5(根目录所在起始块号)和0;并将ptrcurdir指针指向该用户打开文件表项。⑨将当前目录设置为根目录。3.磁盘格式化函数my_format()(1)对应命令:my_format(2)命令调用格式:my_format(3)函数设计格式:voidmy_format()(4)功能:对虚拟磁盘进行格式化,布局虚拟磁盘,建立根目录文件(或根目录区)。(5)输入:无(6)输出
7、:无。(7)函数需完成的工作:①将虚拟磁盘第一个块作为引导块,开始的8个字节是文件系统的魔数,记为“10101010”;在之后写入文件系统的描述信息,如FAT表大小及位置、根目录大小及位置、盘块大小、盘块数量、数据区开始位置等信息;②在引导块后建立两张完全一样的FAT表,用于记录文件所占据的磁盘块及管理虚拟磁盘块的分配,每个FAT占据两个磁盘块;对于每个FAT中,前面5个块设置为已分配,后面995个块设置为空闲;③在第二张FAT后创建根目录文件root,将数据区的第1块(即虚拟磁盘的第6块)分配给根目录文件,在该磁盘上创建两个特殊
8、的目录项:“.”和“..”...,其内容除了文件名不同之外,其他字段完全相同。4.更改当前目录函数my_cd()(1)对应命令:my_cd(2)命令调用格式:my_cddirname(3)函数设计格式:voidmy_cd(char*dirname)
此文档下载收益归作者所有