操作系统实验五-文件系统

  • 格式:docx
  • 大小:1.50 MB
  • 文档页数:33

下载文档原格式

  / 33
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与技术学院

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 将某文件从已打开文件表中删除的流程图