编辑: 施信荣 | 2019-07-16 |
一、设计目标: ????? 在内存中开辟一个虚拟的磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统.
在退出这个文件系统时应将该文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中.
二、要求提供以下操作: ?format:?对文件存储器进行格式化 ?mkdir:?用于创建子目录 ?ls?:??用于显示目录 ?cd?:??更改当前目录 ?craete:?创建文件 ?open:??打开文件 ?close:?关闭文件 ?write:?写文件 ?read:??读文件 ?rm: ??删除文件
三、准备知识:
1、与文件系统相关的基本概念: (1)文件系统: 文件系统是操作系统的五大功能模块之一,主要实现操作系统对程序、数据、设备等 的管理.文件系统的主要功能:完成文件存储空间管理,实现文件名到物理地址的映射,实现文件和目录的操作管理,提供文件共享能力和安全措施等功能. (2)文件 文件是信息的一种组织形式,是存储在外存上的带有标识号的一组相关信息的集合,而这个集合既可以由相关联的字符流组成,也可以由相关联的记录组成. 文件的构成:文件控制块(FCB)、数据.FCB是系统在管理文件时所需信息的数据结构,是文件存在的惟一标志.包括了文件的基本属性,大致有文件名、地址、存取控制信息(如文件所有者、同组用户、访问权限)以及使用信息(如创建日期、修改日期). (3)文件目录 文件控制块的有序集合称为文件目录.文件目录的基本功能是实现文件名与其存放位置的映射. (4)文件的物理结构 常用的结构有顺序结构、链接结构、文件分配表结构FAT、索引结构、多级索引结构. (5)文件操作 文件的操作就是创建/删除文件、打开/关闭文件、读/写文件等 (6)目录操作 目录操作包括创建目录、删除目录、改变目录、文件检索等.
2、磁盘空间管理 文件系统的一个重要任务是对磁盘空间进行管理. 磁盘空间管理的关键问题是磁盘空闲空间的管理. 常用的空闲块管理方法有:空闲文件目录法、空闲块链法、位示图法、空闲块成组链接法.
四、设计思想 实验中并不是对真的磁盘进行操作,而是以一个二进制文件模拟磁盘,也就是对一个二进制文件的读写.因此创建磁盘也就是创建一个二进制文件. 这个简单的文件系统以盘块为基本分配单位,每个盘块(BLOCK_SIZE)大小为512字节.最开始的第0块为引导块.接下来的是两张FAT表(这两张FAT表的内容应该是一样的,FAT2是FAT1的备份,可以不实现,只用FAT1),每个FAT表项长度为8位,即最大的磁盘容量为256*BLOCK_SIZE字节.每张FAT表共有256个表项,因此两张FAT表刚好是512字节,也即一个BLOCK_SIZE.接下来的第2块就是根目录了,在格式化的时候,根目录中已经被增入两个目录项: . 和 .. ,分别表示当前目录和上层目录.
五、主要数据结构
1、FAT表: FAT表项中的内容表示了文件的下一个盘块号,如果文件已经没有下一个盘块了,则相应的表项内容为0xFF(END_OF_FILE),表示文件结束.如果FAT表项的内容为0(NOT_USED),则表示该表项对应的块尚未被使用.
2、文件控制块(dir_entry): ?? 每个文件都有一个文件控制块,大小为16字节. struct dir_entry { ?char name[MAX_NAME];
?//文件名?#define MAX_NAME?
10 ?unsigned char attr;
??//文件属性 ?unsigned char fstblk;
?//文件所在的第一个块的块号 ?int? filesize;