资源描述:
《模拟linux文件系统》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、设计五:设计任务:模拟Linux文件系统。在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。1.在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。2.编写一管理程序对此空间进行管理,以模拟Linux文件系统,具体要求如下:(1)要求盘块大小1k正规文件(2)i结点文件类型目录文件(共1byte)块设备管道文件。物理地址(索引表)共有13个表项,每表项2byte。文件长度4byte。联结计数1byte(3)0号块超级块栈长度50空闲盘块的管理:成组链接(UNIX)位示图法(Linux)(4)每建一个目录,分配4个物理块文件名14byt
2、e(5)目录项信息i结点号2byte(6)结构:0#:超级块1#-20#号为i结点区20#-30#号为根目录区3.该管理程序的功能要求如下:(1)能够显示整个系统信息,源文件可以进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。(2)改变目录:改变当前工作目录,目录不存在时给出出错信息。(3)显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。(4)创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。(1)删除目录:删除指定目录下所有文件和子目录。要删目录
3、不空时,要给出提示是否要删除。(2)建立文件(需给出文件名,文件长度)。(3)打开文件(显示文件所占的盘块)。(4)删除文件:删除指定文件,不存在时给出出错信息。2.程序的总体流程为:(1)初始化文件目录;(2)输出提示符,等待接受命令,分析键入的命令;(3)对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。一程序清单头文件block.h,command.h,disk.h,fd.h,inode.h,shell.hc文件block.c,command.c,disk.c,fd.c,inode.c,shell.c具体程序清单见源代码,在此不一一
4、列出。二概要设计2.1文件系统组织结构superinodesDatablocks1024B30*1024B磁盘块以组的形式链接起来(1)第一个磁盘块:写入超级块(2)从第二个磁盘块开始:用30个磁盘块记inodes(3)剩下的磁盘块作为数据块DatablocksDatablocks是由多个磁盘块组构成,每个栈的开始磁盘块用于记录空闲块栈,因为本实验是采用UNIX的空闲盘块管理方法,即成组链接法。每一组用一个栈表示,里面存放空闲块的磁盘块号。剩下的磁盘块都作为文件的数据块,记录文件或目录的内容。2.2系统流程图2.2.1系统框架------------------main()创建大小
5、20M的文件作盘并格式化文件系统创建根目录,初始化文件系统运行shell,接受命令并执行相关动作2.2.2格式化文件系统流程------------------intfs_format(FILE*fp)链接空闲磁盘块,生成空闲磁盘块栈初始化超级块的数据,包括空闲inode栈开辟inodes空间开辟Datablocks空间2.2.3shell运行流程------------------------------------voidshell(FILE*fp,int*pd_ind_no)找印帮助信息转到当前目录用户输入命令解析命令,并转去执行相应函数是否退出退出程序是否echo回应功能h
6、elp帮助功能mkfile创建文件mkdir创建目录ls显示目录内容Date显示日期cd改变目录status显示状态rm删除文件/目录rn文件重命名psw显示当前路径open打开文件2.2.4相关功能实现流程(1)创建目录intcreate_fd(FILE*fp,intdir_ind_no,constchar*file,constchargiven_type,constchar*f_size)这里given_type==”d”表示目录,f_size默认为0.分配inode号找到当前目录所在的inode结点,把(文件名,inode号)表项加入该目录记录的inode索引表,并修改目录大
7、小更新inode内容。在新建的目录下建”.”和”..”目录,初始化新目录下的inode索引表(2)创建文件intcreate_fd(FILE*fp,intdir_ind_no,constchar*file,constchargiven_type,constchar*f_size)这里given_type==”f”表示目录,f_size默认为0,也可以是用户输入的创建文件大小分配inode号找到当前目录所在的inode结点,把(文件名,inode号)表项加入该目录记录的