多用户多级目录文件系统的实现-操作系统 第2页
1.设计思想说明
本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
2.系统结构说明
2.1在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2.2文件物理结构可采用显式链接或其他方法。
2.3磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
2.4文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
2.5设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:
2.5.1具有login (用户登录)
2.5.2系统初始化(建文件卷、提供登录模块)
2.5.3文件的创建: create
2.5.4文件的打开:open
2.5.5文件的读:read
2.5.6文件的写:write
2.5.7文件关闭:close
2.5.8删除文件:delete
2.5.9创建目录(建立子目录):mkdir
2.5.10改变当前目录:cd
2.5.11列出文件目录:dir
2.5.12退出:logout
3.数据结构说明
3.1开发环境
Visual C++6.0下的win32控制台程序,C语言。
3.2数据存储
在内存中申请1M的空间来模拟存取设备,空间划分为三部分,第一部分用来存放位示图,用于标识数据块的使用情况,第二部分放置一个文件索引的数据,用于快速的查找数据,第三部分放置数据信息,第三部分划分为512块,每块512B,其256K,放置在1M空间的最末端,由第三部分的大小可知,第一部分只需64B即可,中间的部分用来存放文件索引。其他用到的存储单元由系统分配。
3.3数据结构
3.3.1数据块在内存中的物理结构
typedef struct fb
{
unsigned FileBlockId; //文件块编号
unsigned BLOCK_SIZE; //文件块的容量
char *FileBlockAddr; //文件块地址
struct fb *next; //下一个文件块的地址
} FileBlock;
3.3.2文件索引结构
typedef struct
{
unsigned Index; //文件元素索引编号
char FileName[NAME_LEN]; //文件元素名
char ParentName[NAME_LEN]; //父节点名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileLevel; //文件元素所在层次,层+文件元素
名为一个文件元素逻辑位置
unsigned effect; //是否有效,0-无效,1-有效
} FileIndexElement;
3.3.3文件系统中文件元素的结构(含文件夹和文件)
typedef struct fse
{
struct fse *parent; //指向自己的父亲节点
unsigned FileLevel; //文件元素所在层次,层+文件元素名
为一个文件元素的逻辑位置
char FileName[NAME_LEN]; //文件元素名
unsigned FileBlockId; //文件元素所在物理块编号
unsigned FileElemLen; //文件元素的长度
FileType Type; //文件元素类型
FileAccess Access; //文件元素可供操作的权限
User Creator; //文件创建者
char CreateTime[18]; //创建时间,日期格式:MM/DD/YY HH:MI:SS
char LastModTime[18]; //最后一次修改时间
char *FileData; //一个文件的数据开始地址,文件夹时该值为NULL
FileStatus fileStu; //如果是一个文件表示文件当前的状态
} FSElement;
3.3.4文件系统结构
typedef struct
{
char *FSStart; //文件系统的起始地址
unsigned SuperBlockSize; //文件系统的容量
BitMap bm; //文件系统中的位示图
unsigned BLOCK_COUNT; //文件系统中文件块的数量
FileBlock *head; //文件系统中文件块首地址
FileIndex FI; //文件系统中的文件索引
} SuperBlock;
3.3.5文件系统的当前运行状态
typedef struct
{
User CurrentUser; //当前用户
unsigned FileLevel; //用户所在文件系统层
FSElement *CurrParent; //当前层的父节点
char *CurrentPath; //当前路径
} CurrentStatus;
上一页 [1] [2] [3] [4] [5] [6] 下一页