操作系统文件管理实验报告Word下载.doc

上传人:b****1 文档编号:13181220 上传时间:2022-10-07 格式:DOC 页数:20 大小:1.18MB
下载 相关 举报
操作系统文件管理实验报告Word下载.doc_第1页
第1页 / 共20页
操作系统文件管理实验报告Word下载.doc_第2页
第2页 / 共20页
操作系统文件管理实验报告Word下载.doc_第3页
第3页 / 共20页
操作系统文件管理实验报告Word下载.doc_第4页
第4页 / 共20页
操作系统文件管理实验报告Word下载.doc_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统文件管理实验报告Word下载.doc

《操作系统文件管理实验报告Word下载.doc》由会员分享,可在线阅读,更多相关《操作系统文件管理实验报告Word下载.doc(20页珍藏版)》请在冰豆网上搜索。

操作系统文件管理实验报告Word下载.doc

备注

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+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1