实验八_模拟文件系统.doc
文本预览下载声明
实验八 模拟文件系统
一、实验目的
建立文件系统需要管理磁盘空闲空间、维护目录结构、组织文件物理空间。本试验通过在一个模拟的磁盘上建立并维护文件系统,熟悉文件系统管理的内容。
二、实验题目
在给出的程序框架中实现以下功能:
建立一个固定大小的文件,模拟磁盘;
在其上模拟Unix文件系统结构,建立一个文件系统。
利用程序框架提供的操作界面,进行文件、目录操作,验证自己实现文件系统的有效性。
三、背景材料
随本实验指导提供了一个压缩文件exp08.tgz,请复制或下载该文件到个人工作目录,用如下命令解开:
tar xzf exp08.tgz
解开后形成两个子目录:minifs和minifat,前者是为本实验提供的程序框架,后者包含一个模仿FAT文件系统实现的miniFAT实现示例。
(一)程序框架
1、文件说明
在minifs目录下的是程序框架,其中包含的文件及其说明如下:
Makefile make命令配置文件;直接输入make命令生成minifs执行文件
disk.cpp 实现模拟磁盘扇区读写操作
disk.h disk.cpp对应的头文件
diskfile.cpp 实现模拟磁盘上的文件系统管理功能,包括空闲空间管理、目录管理、文件物理组织等
diskfile.h diskfile.cpp对应的头文件
file.cpp 实现文件系统功能的外部访问接口(类此于实际OS中文件操作相关系统调用)
file.h file.cpp对应的头文件
info.cpp 提供此程序的版本、命令行提示符等信息
info.h info.cpp对应的头文件
user.cpp 提供程序的命令行操作界面,主要通过调用file.cpp中实现接口完成文件操作
user.h user.cpp对应的头文件
上述文件中,disk.cpp、disk.h、info.cpp、info.h、user.cpp和user.h都可以不做改动;只要分别按照diskfile.h和file.h中规定的接口实现diskfile.cpp和file.cpp的编写,然后使用make命令即可生成可执行文件minifs。
2、需要实现接口
需要实现的接口分别在diskfile.h和file.h文件中定义,在实现中不应该改变接口定义,因为在其他源程序文件中包括按照头文件定义格式对这些功能的调用。此外,在文件中有一些数据结构定义,供实现中参考,可以根据自己设计的文件系统结构进行修改,但是如果在接口参数中用到的数据结构不应修改。
(1)diskfile.cpp和应实现的功能在diskfile.h中定义,接口函数原型声明及简要说明如下:
void ReadBlock(char *buf, short blk);
// usage: reads a block from disk to the buffer
void WriteBlock(char *buf, short blk);
// usage: writes a block to disk from the buffer
short GetBlockBuffer(short block, short noread=0);
// usage: gets a block buffer with content of specified block
// return: on success, returns buffer number; otherwise returns -1
void FlushBlock(short bbuffer);
// usage: flushs the specified block buffer to disk if modified
short GetBlock();
// usage: gets a free block
// return: on success, returns block number; otherwise returns -1
void PutBlock(short blk);
// usage: sets a block to free
short AttachBlock(struct MemInode mi);
// usage: attaches a new block to a i-node
// return: on success, returns new block number; otherwise returns -1
short GetFileBlock(const struct MemInode mi, short rblk);
// usage: gets physics block number from logical block of file
// retu
显示全部