资源描述
操作系统实验六文件系统设计试验
9
2020年4月19日
文档仅供参考,不当之处,请联系改正。
宁德师范学院计算机系
实验报告
( — 第二学期)
课程名称 操作系统
实验名称 实验六 文件系统设计试验
专 业 计算机科学与技术(非师)
年 级 级
学号 B 102147 姓名 王 秋
指导教师 王远帆
实验日期 -06-20
实验目的与要求:
经过设计一个基于索引结构的文件系统,加深对文件系统的基本知识理解。了解文件系统设计的基本概念。
(1)熟悉文件系统的物理结构;
(2)熟悉文件系统的目录管理;
(3)掌握文件系统空闲空间管理的基本方法;
(4)进一步理解现代操作系统文件管理知识。
实验设备(环境):
(1)一台安装有Cygwin Terminal的计算机
(2) Windows XP操作系统
(3)VC++6.0
实验内容:
(1)熟悉文件系统的物理结构;
(2)熟悉文件系统的目录管理;
(3)掌握文件系统空闲空间管理的基本方法;
(4)进一步理解现代操作系统文件管理知识。
实验步骤、实验结果及分析:
(1) 设计一个文件系统的索引结构,描述逻辑结构与物理索引结构之间的关系;
(2) 设计文件目录,描述文件名与文件物理结构之中的映射关系;
(3) 定义作业;
(4) 设计文件建立;
(5)设计文件系统的其它功能;
实验结论:
试验运行结果:
图1程序运行结果
4、思考
该试验中,从功能能上讲,根据所学的文件系统管理方面知识,你所设计的(模拟)文件还有那些没有实现:
对以后设计的修改建议:
当前所做的修改及实际结果如下:
程序清单:
#include "stdio.h"
#include "stdlib.h"
//文件索引表的定义
struct index{
int lr[32];
int pr[32];
char st[32];
}*wq;
#define JOBN 20
//文件目录的定义
struct list{
char names[32];
int size[32];
struct index*p[32];//文件的索引表地址
}*HEAD;
//作业序列
struct que{
char name;
int size;
}job[JOBN];
int i,j,ly,li;
char bb;
int NFile=0;//系统的总文件数,模拟开始时为0;
int N=0;//工作变量,标记当前分配文件
int M=32;//系统中空闲磁盘物理块数,开始为32块
int J[4][8];//用位图表示这些磁盘物理块,J[j][i]为0时标记第j*8+i块空闲,为1标记该块已分配出去
FILE *e;//记录模拟中的相关数据
int jobs=0;//作业数
void run(){
int x1,y,z;
//如果当前空闲磁盘物理块数能够满足需要,则进行分配
if(job[N].size<=M){
ly=0;
N=NFile;//标记当前分配文件
NFile++;//标记下次分配处理文件
M-=job[N].size;
HEAD->names[N]=job[N].name;
//将文件名以及大小,索引地址填写到文件目录
HEAD->size[N]=job[N].size;
wq=(struct index *)malloc(sizeof(struct index));
HEAD->p[N]=wq;
//对分配文件的索引表初始化
for(z=0;z<32;z++){
wq->lr[z]=z;//逻辑块号
wq->pr[z]=0;////物理块地址
wq->st[z]='N';}
//从位图中分配,分配出去的块其状态为1。一直到分配完成
for(j=0;j<4&&(ly<job[N].size);j++)
for(i=0;i<8&&(ly<job[N].size);i++)
{
if(J[j][i]==0){li=j*8+i;wq->pr[ly]=li;wq->st[ly]='Y';ly++;J[j][i]=1;}//找到一个空闲块,就分配出去
}
}//如果当前空闲磁盘物理块数不能够满足需要,则出错处理
else{ fprintf(e,"\n There are no free blocks in the memory now! \n");fprintf(e,"File %c must wait!\n",job[N].name);}
//报告当前为止的分配情况,首先报告文件目录的部分信息
fprintf(e,"...This time ,the file directory: ----\n");
fprintf(e,"NAME INDEX_ADDRESS\n");
for(x1=0;x1<N+1;x1++)fprintf(e," %c %x\n",HEAD->names[x1],HEAD->p[x1]);
//其次报告文件索引表的部分信息
for(x1=0;x1<N+1;x1++){
fprintf(e," //////////The index of FILE%c://///////\n",HEAD->names[x1]);
fprintf(e," LOGIC_NUMBER PHYSICAL_NUMBER FLAG\n");
for(y=0;y<HEAD->size[x1];y++)fprintf(e," %d %d %c\n",HEAD->p[x1]->lr[y],HEAD->p[x1]->pr[y],HEAD->p[x1]->st[y]);
}
//第三,报告位图信息
fprintf(e," This time the bit mapping graph: \n");
for(j=0;j<4;j++){
fprintf(e, " ");
for(i=0;i<8;i++)fprintf(e,"%d",J[j][i]);
fprintf(e,"\n");
}
}
void main(){
int k;
e=fopen("results.txt","w");//打开保存结果的文件
for(j=0;j<4;j++)
for(i=0;i<8;i++)
J[j][i]=0;//初始化位图
HEAD=(struct list*)malloc(sizeof(struct list));
for(i=0;i<32;i++){HEAD->names[i]=' '; HEAD->size[i]=0;HEAD->p[i]=NULL;}//初始化文件目录
printf("Please input number of jobs:");
scanf("%d",&jobs);
scanf("%c",&bb);
int kk=0;
//以下输入建立的文件数以及文件名字,并将这些信息保存在job数组之中
while(kk<jobs){
fprintf(e,"FILE %d: \n",kk);
printf("FILE %d: \n",kk);
printf("Name and Size");
scanf("%c,%d",&(job[kk].name),&(job[kk].size));
scanf("%c",&bb);
fprintf(e,"%c,%d",job[kk].name,job[kk].size);kk++;}
for(k=1;k<=jobs;k++)run();//每个文件进行一次分配
//回收资源
fclose(e);
for(i=0;i<32;i++){free(HEAD->p[i]);HEAD->p[i]=NULL;}
free(HEAD);
HEAD=NULL;
}
文件系统模拟程序
1.索引结构和文件目录
1
2
…
…
N
文件名
等
块
块
块
2.文件目录模拟
struct list{
char names[32];
int size[32];
struct index*p[32];//文件的索引表地址
}*HEAD;
该模拟文件最多只能模拟32个文件,HEAD 指针指向了该模拟目录。
3.文件索引表模拟
文件索引表的定义
struct index{
int lr[32];
int pr[32];
char st[32];}*wq;
4.位图
int J[4][8]。位图J表示这些磁盘物理块的情况。J[j][i]为0时标记块空闲,为1标记该块已分配出去。各块号按行存储。因此,J[j][i] 表示j*8+i(块号)块的分配情况
5.run函数
6.Main函数
实验分析:
程序要为每个文件建立一张索引表,索引表中用数组指出文件信息所在的逻辑块号和与之对应的物理块号。程序中int J[j][i]表示这些磁盘物理块的情况。J[j][i]为0时标记块空闲,为1标记该块已分配出去。各块号按行存储。
实验总结(包括过程总结、心得体会及实验改进意见等):
1. 在命令提示符中运行应用程序时要先转到应用程序所在的盘符下,要把应用程序所在目录位置输入正确,才能找到相应的程序运行。
2. 文件的物理结构和组织是指逻辑文件在物理存储空间中存放方法和组织关系;使用多级目录能够解决文件重名问题与缩短搜索时间;现代操作系统文件管理就是对块空间的管理,包括空闲块的分配、回收和组织;索引文件结构中的索引表是用来指示逻辑记录和物理块之间对应关系的。
3. 经过本次实验我了解了文件系统的基本概念,物理文件结构有三种结构,连续文件、链接文件、索引文件。用户能直接处理其中的结构与数据的是逻辑结构,文件在外存上的存储组织形式是物理结构。只有合理的进行存储空间的管理,才能保证多用户共享外存和快速的实现文件的按名存取。
指导教师评语:
完成所有规定的实验内容,实验步骤正确,结果正确;以后需要进一步改进或注意的是:
(1)实验目的与要求、实验设备、实验内容格式要对齐。
(2)源代码要进行命名以便区分。
(3)标题文字首行缩进。
(4)实验总结要分点讲述,并与分析、心得体会分开。
成绩评定 A(优秀)
教师签字 王远帆
年 6 月 22 日
备注:
注:1、报告内的项目或设置,可根据实际情况加以补充和调整
2、教师批改学生实验报告应在学生提交实验报告10日内
展开阅读全文