操作系统实验五-文件系统
- 格式:docx
- 大小:1.50 MB
- 文档页数:33
计算机科学与技术学院
2018-2019学年第一学期
《操作系统》实验报告
班级: XXXXXXX
学号: XXXXXXXXX
姓名: XXX
教师: XXX
成绩:
1. 题目分析
1.1 设计目的
深入了解磁盘文件系统的实现。
1.2 设计内容
(1)设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现:
(2)支持多级目录结构,支持文件的绝对读路径;
(3)文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;(4)采用文件分配表;
(5)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性。
(6)最后编写主函数对所做工作进行测试。
1.3 相关知识概述
(1)文件的操作:①创建文件;②删除文件;③读文件;④写文件;⑤设置文件读/写位置。
(2)文件的逻辑结构:从用户的观点出发所能观察到的文件组织形式,即问价是由一系列的逻辑记录组成的,是用户可以直接处理的数据及其结构。
文件的物理结构:系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。
(3)磁盘空间的管理:采取合理的文件分配方式,为每个文件分配必要的存储空间,使每个文件都能“各得其所”,并能有效减少磁盘碎片。
(4)磁盘目录结构
2. 实验设计
2.1基本设计思路
用一个文件模拟磁盘:
FAT 根
目
录目
录
1
目
录
2
目
录
3
目
录
4
…文
件
1
文
件
2
…
文件分配表FAT(128B):
第几项0 1 2 3 4 5 6 7 8 9 …内容-1 -1 -1 4 9 0 7 8 -1 12 …
根目录(64B)
目录1(64B)
目录6(64B)目录
……….
实验中,模拟的磁盘有128块,每块64B,故文件分配表有128项,每项3一个字节,共占磁盘的前两块,盘块编号0、1;根目录紧邻在文件分配表后面,占编号为2的盘块。
8B8B8B8B8B8B8B8B
文件管理系统要实现的功能包括:
(1)磁盘操作:
①磁盘分配
(2)目录操作:
①建立目录
②显示目录内容
③删除空目录
(3)文件操作:
①建立文件
②打开文件
③关闭文件
④读文件
⑤写文件
⑥删除文件(磁盘回收)
⑦显示文件内容
⑧改变文件属性
⑨使用绝对路径名查找文件
(4)对数据结构——已打开文件表的操作:
①在已打开文件表中查找某文件
②将文件从已打开文件表中删除
③将某文件插入已打开文件表
2.2 主要数据结构描述
1、每个目录项的数据结构(8B):
typedef struct
{
char name[3]; // 文件/目录名
char type[2]; //文件类型目录未使用字节(填充空格)int attribute;//属性
int startnum; //起始盘块号
int length;//文件长度目录未使用字节(填充0)
}DF_item;
2、已打开文件表项类型:
typedef struct {
char name[20]; //文件绝对路径名
char attribute; //文件的属性,用1个字节表示,所以采用char类型
int number; //文件起始盘块号
int length; //文件长度,文件占用的字节数
int flag; //操作类型,用“0”表示以读操作方式开文件,用“1”表示写操作方式打开文件
pointer read; //读文件的位置,文件打开时dnum为文件起始盘块号,bnum为“0”
pointer write; //写文件的位置,文件刚建立时dnum为文件起始盘块号,bnum 为“0”,打开文件时dnum和bnum为文件的末尾位置
}OFILE;
3、已打开文件登记表:
struct{
OFILE file[n]; //已打开文件登记表
int length; //已打开文件登记表中登记的文件数量
}openfile;
2.3 主要算法描述
(1)磁盘分配:
(2)对已打开文件表的操作: ①在已打开文件表中查找某文件:
开始
找到文件分配表第 x 项, i=x
第 i 项值是否为
第 i 项是否为最后 一项?
磁盘满,分配失败
结束
i=i+1
分配第 i 块
N
Y
N
Y
图 2-10 分配一个磁盘块的流程图
②将某文件从已打开文件表中删除
结束 查找路径名为 pname 的文件
i=0
i 为已打开文件 表一栏?
查找成功 结束
查找失败
i=i+1
文件路径名相
符?
N
N
Y
Y
开始
删除路径名为 n ame 的文件 在已打开文件表中查找路
径名为 n ame 的登记项
i 找到该文件登记
项?
删除第 i 项:
openfile.file[i]=openfile[openfile.length-1]
openfile.length=openfile.length-1
结束
文件没有打开, 删除失败
N
Y 图2-13 在已打开文件表中查找某文件
图2-14 将某文件从已打开文件表中删除的流程图