模拟Linux文件系统

上传人:鲁** 文档编号:431206665 上传时间:2023-06-11 格式:DOC 页数:18 大小:461.03KB
返回 下载 相关 举报
模拟Linux文件系统_第1页
第1页 / 共18页
模拟Linux文件系统_第2页
第2页 / 共18页
模拟Linux文件系统_第3页
第3页 / 共18页
模拟Linux文件系统_第4页
第4页 / 共18页
模拟Linux文件系统_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《模拟Linux文件系统》由会员分享,可在线阅读,更多相关《模拟Linux文件系统(18页珍藏版)》请在金锄头文库上搜索。

1、设计五:设计任务:模拟Linux文件系统。在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟Linux文件系统 。1. 在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。2. 编写一管理程序对此空间进行管理,以模拟Linux文件系统,具体要求如下:(1) 要求盘块大小1k 正规文件 (2) i 结点文件类型 目录文件 (共1byte) 块设备 管道文件 。物理地址(索引表) 共有13个表项,每表项2byte 。文件长度 4byte 。联结计数 1byte (3)0号块 超级块 栈长度50 空闲盘块的管理:成组链接 ( UNIX) 位示图法 (Linux) (4)

2、每建一个目录,分配4个物理块 文件名 14byte (5)目录项信息 i 结点号 2byte(6)结构: 0#: 超级块 1#20#号为 i 结点区 20#30#号为根目录区3. 该管理程序的功能要求如下:(1) 能够显示整个系统信息,源文件可以进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。(2) 改变目录:改变当前工作目录,目录不存在时给出出错信息。(3) 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。(4) 创建目录:在指定路径或当前路径下创建指定目录。重名时给出错

3、信息。(5) 删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。(6) 建立文件(需给出文件名,文件长度)。(7) 打开文件(显示文件所占的盘块)。(8) 删除文件:删除指定文件,不存在时给出出错信息。4. 程序的总体流程为:(1) 初始化文件目录;(2) 输出提示符,等待接受命令,分析键入的命令;(3) 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。一 程序清单头文件block.h, command.h, disk.h, fd.h, inode.h, shell.hc文件block.c, command.c, di

4、sk.c, fd.c, inode.c, shell.c具体程序清单见源代码,在此不一一列出。二 概要设计 2.1 文件系统组织结构super inodesData blocks 1024B30*1024B磁盘块以组的形式链接起来(1)第一个磁盘块:写入超级块(2)从第二个磁盘块开始:用30个磁盘块记inodes(3)剩下的磁盘块作为数据块Data blocksData blocks是由多个磁盘块组构成,每个栈的开始磁盘块用于记录空闲块栈,因为本实验是采用UNIX的空闲盘块管理方法,即成组链接法。每一组用一个栈表示,里面存放空闲块的磁盘块号。剩下的磁盘块都作为文件的数据块,记录文件或目录的内容

5、。2.2 系统流程图2.2.1 系统框架-main()创建大小20M的文件作盘并格式化文件系统创建根目录,初始化文件系统运行shell,接受命令并执行相关动作2.2.2 格式化文件系统流程-int fs_format(FILE *fp)链接空闲磁盘块,生成空闲磁盘块栈初始化超级块的数据,包括空闲inode栈开辟inodes空间开辟Data blocks空间2.2.3 shell运行流程-void shell( FILE *fp, int *pd_ind_no)找印帮助信息转到当前目录用户输入命令解析命令,并转去执行相应函数是否退出退出程序是否echo回应功能help帮助功能mkfile创建文件

6、mkdir创建目录ls显示目录内容Date显示日期cd改变目录status显示状态 rm删除文件/目录 rn文件重命名psw显示当前路径open打开文件2.2.4 相关功能实现流程(1)创建目录int create_fd( FILE *fp, int dir_ind_no, const char *file, const char given_type, const char *f_size)这里given_type =”d”表示目录,f_size默认为0.分配inode号找到当前目录所在的inode结点,把(文件名,inode号)表项加入该目录记录的inode索引表,并修改目录大小更新ino

7、de内容。在新建的目录下建”.”和”.”目录,初始化新目录下的inode索引表(2)创建文件int create_fd( FILE *fp, int dir_ind_no, const char *file, const char given_type, const char *f_size)这里given_type =”f”表示目录,f_size默认为0,也可以是用户输入的创建文件大小分配inode号找到当前目录所在的inode结点,把(文件名,inode号)表项加入该目录记录的inode索引表,并修改目录大小更新inode内容。按照文件大小分配磁盘块,在inode里的磁盘地址记录磁盘块号(

8、3)显示目录内容- void list_dir( FILE *fp, int dir_ind_no)找到当前目录的inode,读取该目录下的inode索引表根据索引表的表项找到相应inode,读取inode内容,并显示。列出文件/目录所占的磁盘块表结束?否是退出(4) 改变目录-int cd_path( FILE *fp, int *pd_ind_no, char *given_path)以/分隔路径每次打开一级目录,如果不是目录则出错路径结束?否是退出(5)显示状态-void status( FILE *fp)读取超级块信息罗列超级块信息读取当前空闲块栈里未分配的空闲块号,并逐个输出(6)删

9、除文件/目录-int remove_fd( FILE *fp, int dir_ind_no, const char *file)在当前目录的inode索引表中找到文件/目录名相同的项,删去更新当前目录的inode信息释放文件/目录占用的磁盘块有子目录/文件?如果是目录退出否是对该目录下的所有子目录和文件(7)文件重命名-void re_name( FILE *fp, int dir_ind_no, char *f1, char *f2)在当前目录的inode索引表中找到文件/目录名相同的项修改该表项中的文件/目录名字写回该inode索引表项(8)显示当前路径-void pwd( FILE *

10、fp, int *pd_ind_no, char *path)找到上一级目录记录已扩展的路径名否是退出是根目录?(9)打开文件-void open_file(FILE*fp,int dir_ind_no,char* file)找到文件所在inode读取inode记录的文件大小列出文件所占的磁盘块三 详细设计3.1 系统定义#define DISK_SIZE 1024*1024*20/磁盘大小为20M#define BLOCK_SIZE 1024/每个磁盘块1024B#define INODE_TABLE_BLOCKS 30/用30个磁盘块来存储inodes#define STACK_MAX 5

11、0/inode空闲栈和空闲磁盘块栈的大小均为50/寻找磁盘块号对应的磁盘块在文件系统中的地址#define SEEK_BLK(blk_no) BLOCK_SIZE*(INODE_TABLE_BLOCKS + 1 + blk_no)/寻找inode号为x的inode在文件系统中的地址#define INODE_OFFSET(x) (BLOCK_SIZE + (x)*sizeof(struct fs_inode)#define NAME_LEN 14 /文件名最大长度#define PATH_LEN 100 /路径名最大长度3.2 主要数据结构/超级块结构struct fs_super int t

12、otal_block_count;/* total block count */ int free_block_stackSTACK_MAX+1; /* free block stack */ int free_block_count;/* current free block quantity */ int free_inode_stackSTACK_MAX+1; /* free inode stack */ int free_inode_count;/* current free inode quantity */ int remembered_inode;/* the last unregister inode pos */;/inode结构struct fs_inode char user15;/用户名 char type;/文件类型,分为一般文件和目录文件 unsigned links;/文件联结数 int size;/文件大小 int addr13;/磁盘块索引;/表示i-node表中的一项struct fd_entry char

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号