操作系统文件管理实验报告Word下载.doc
- 文档编号:13181220
- 上传时间:2022-10-07
- 格式:DOC
- 页数:20
- 大小:1.18MB
操作系统文件管理实验报告Word下载.doc
《操作系统文件管理实验报告Word下载.doc》由会员分享,可在线阅读,更多相关《操作系统文件管理实验报告Word下载.doc(20页珍藏版)》请在冰豆网上搜索。
备注
1
100
0,1,2,……,98,99
空白文件目录(中间)
空白块个数
标志
2
4
2,3,4,5
未分配
9
3
9,10,11
25
5
25,26,27,28,29
39
39,40
……
文件标识
首块号
文件块个数
状态
beta
占用
Alpha
6
Toyota
12
13
Sony
30
Ford
50
已使用区域表(中间)
上述两张表的数据在系统运行中是发生变化的。
文件空闲区分配和释放算法如下图所示:
图一文件空闲区分配算法
图二文件空闲区回收算法
(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
四.实验要求:
(1)自拟模拟数据演示运行结果(假定系统可用空闲块数为100)。
为便于检查,建立和删除文件顺序如下:
分配文件:
F1,3
F2,5
F3,3
F4,8
F5,4
F6,2
删除文件:
F1
F2
F7,6
F3
F8,4
F5
F9,4
每完成一个文件的分配和删除后,显示空白文件目录当前内容。
(2)空白文件目录法必须完成,空白块链法选做。
五.程序中所用数据结构及说明:
实验中,定义了两个结构体类型—SPACE(空白区)和OCCUPY(占用区),其结构如下:
structSPACE//空白区
{
intid;
//空白文件序号
intfirst;
//首空白块号
intnum;
//空白块个数
intblock[30];
//物理块号
};
structOCCUPY//占用区
charfilename[20];
//文件名
intfirstf;
//首块号
intnumf;
//文件块个数
intblockf[30];
分别用来描述空白区和占用区的相关属性,再定义它们的结构数组OCCUPYo[20]和SPACEs[20]用来表示两个表(存储相关数据),定义变量smax和omax分别用来初始空白区文件数目和初始占用区文件数目,函数spaceprint和函数occupyprit分别用来显示空白区和占用区的情况,函数fenpei和函数shanchu分别用来分配文件和删除文件,随用户的选择可动态的分配和删除文件,并且将每次执行的结果显示出来(即空白区情况和占用区情况),用户根据两个表的情况可实时观察到操作所执行的结果及过程,最终比较实验结果可进一步加深和理解空白目录法的过程和本质。
六.程序清单及描述:
#include<
iostream.h>
string.h>
intsmax=1;
//初始空白区文件数目
intomax=0;
//初始占用区文件数目
//初始化
OCCUPYo[20];
SPACEs[20]={{1,0,100,{0,1,2,3,98,99}}};
voidbubble(inta[],intn)//冒泡法排序
inti,j,t,flag=1;
for(i=1;
i<
n&
&
flag==1;
i++)
{
flag=0;
for(j=0;
j<
n-1;
j++)
{
if(a[j]>
a[j+1])
{
flag=1;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
//空白区输出显示
voidspaceprint()
inta[20];
for(intj=0;
smax;
j++)//将首块号排序
a[j]=s[j].first;
bubble(a,smax);
cout<
<
"
空白文件序号\t"
首空白块号\t"
空白块个数\t"
物理块号\n"
;
for(intz=0;
z<
z++)
for(inti=0;
if(a[z]==s[i].first)//按首块号从小到大顺序输出
cout<
z+1<
\t\t"
s[i].first<
s[i].num<
—"
s[i].first+s[i].num-1;
endl;
当前空白文件数目为="
smax<
cout<
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
//占用区输出显示
voidoccupyprint()
文件名\t首块号\t文件块个数\t物理块号\n"
for(inti=0;
omax;
cout<
o[i].filename<
\t"
o[i].firstf<
o[i].numf<
o[i].firstf+o[i].numf-1;
当前文件数目为="
omax<
voidfenpei()//分配文件
charfilen[20];
//文件名
intsize;
//申请块数
intfirsti=0;
//中间过渡临时变量
您执行的操作为:
文件分配\n"
请输入分配文件名:
cin>
>
filen;
请输入申请块数:
size;
for(intj=0;
if(!
strcmp(filen,o[j].filename))
文件已分配过!
\n"
return;
if(size<
=0)
cout<
申请块数错误!
return;
if(i>
=smax)
此次分配失败!
if(s[i].num==size)//空白块个数等于申请块个数
firsti=s[i].first;
//修改空白区
for(i;
smax-1;
s[i].first=s[i+1].first;
s[i].num=s[i+1].num;
strcpy(o[omax].filename,filen);
//修改占用区
o[omax].firstf=firsti;
o[omax].numf=size;
omax++;
文件分配成功!
smax--;
break;
if(s[i].num>
size)//空白块个数大于申请块个数
s[i].first+=size;
s[i].num-=size;
spaceprint();
occupyprint();
voidshanchu()//删除文件
intf;
//文件首块号
intn;
//文件所占的块数
文件删除\n"
请输入删除文件名:
intexits=1;
//标记,判断文件是否存在
if(!
strcmp(o[i].filename,filen))//文件存在
exits=0;
intf1=0;
//标记上临
intf2=0;
//标记下临
intp1,p2;
//存储上临、下临的序号
f=o[i].firstf;
n=o[i].numf;
omax-1;
i++)//修改占用区
o[i]=o[i+1];
omax--;
for(intj=0;
j++)//修改空白区
if(s[j].first+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件 管理 实验 报告