操作系统文件管理实验报告.doc
- 文档编号:251087
- 上传时间:2022-10-07
- 格式:DOC
- 页数:20
- 大小:1.18MB
操作系统文件管理实验报告.doc
《操作系统文件管理实验报告.doc》由会员分享,可在线阅读,更多相关《操作系统文件管理实验报告.doc(20页珍藏版)》请在冰豆网上搜索。
实验报告
课程名称计算机操作系统
实验名称文件管理
班级
学号
姓名
成绩
指导教师赵安科
实验日期2015年6月18日
一.实验题目:
文件管理
二.实验内容:
模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。
三.实验说明:
文件存储空间管理是文件系统的重要内容。
常用的管理思想有空白文件目录法、空白块链法和位示图法。
本实验采用前两种方法进行空间分配。
(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。
当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。
为此需建立两张表格,分别记录相关数据。
空白文件目录表(初始)
序号
首空白块号
空白快个数
物理块号
备注
1
0
100
0,1,2,……,98,99
空白文件目录(中间)
序号
首空白块号
空白块个数
物理块号
标志
1
2
4
2,3,4,5
未分配
2
9
3
9,10,11
未分配
3
25
5
25,26,27,28,29
未分配
4
39
2
39,40
未分配
5
……
……
……
未分配
文件标识
首块号
文件块个数
状态
备注
beta
0
2
占用
Alpha
6
3
占用
Toyota
12
13
占用
Sony
30
9
占用
Ford
50
4
占用
……
……
……
……
已使用区域表(中间)
上述两张表的数据在系统运行中是发生变化的。
文件空闲区分配和释放算法如下图所示:
图一文件空闲区分配算法
图二文件空闲区回收算法
(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
文件标识
首块号
备注
beta
0
Alpha
6
Toyota
12
Sony
30
Ford
50
……
……
四.实验要求:
(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
#include
intsmax=1;//初始空白区文件数目
intomax=0;//初始占用区文件数目
structSPACE//空白区
{
intid;//空白文件序号
intfirst;//首空白块号
intnum;//空白块个数
intblock[30];//物理块号
};
structOCCUPY//占用区
{
charfilename[20];//文件名
intfirstf;//首块号
intnumf;//文件块个数
intblockf[30];//物理块号
};
//初始化
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 { flag=0; for(j=0;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;j { a[j]=s[j].first; } bubble(a,smax); cout<<"空白文件序号\t"<<"首空白块号\t"<<"空白块个数\t"<<"物理块号\n"; for(intz=0;z { for(inti=0;i { if(a[z]==s[i].first)//按首块号从小到大顺序输出 { cout< cout< cout< } } } cout<<"当前空白文件数目为="< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; } //占用区输出显示 voidoccupyprint() { cout<<"文件名\t首块号\t文件块个数\t物理块号\n"; for(inti=0;i { cout< cout< cout< } cout<<"当前文件数目为="< } voidfenpei()//分配文件 { charfilen[20];//文件名 intsize;//申请块数 intfirsti=0;//中间过渡临时变量 cout<<"您执行的操作为: 文件分配\n"; cout<<"请输入分配文件名: ";cin>>filen; cout<<"请输入申请块数: ";cin>>size; for(inti=0;i { for(intj=0;j { if(! strcmp(filen,o[j].filename)) { cout<<"文件已分配过! \n"; return; } } if(size<=0) { cout<<"申请块数错误! \n"; return; } if(i>=smax) { cout<<"此次分配失败! \n"; return; } if(s[i].num==size)//空白块个数等于申请块个数 { firsti=s[i].first;//修改空白区 for(i;i { 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++; cout<<"文件分配成功! \n"; smax--; break; } if(s[i].num>size)//空白块个数大于申请块个数 { firsti=s[i].first;//修改空白区 s[i].first+=size; s[i].num-=size; strcpy(o[omax].filename,filen);//修改占用区 o[omax].firstf=firsti; o[omax].numf=size; omax++; cout<<"文件分配成功! \n"; break; } } spaceprint(); occupyprint(); } voidshanchu()//删除文件 { charfilen[20];//文件名 intf;//文件首块号 intn;//文件所占的块数 cout<<"您执行的操作为: 文件删除\n"; cout<<"请输入删除文件名: ";cin>>filen; intexits=1;//标记,判断文件是否存在 for(inti=0;i { if(! strcmp(o[i].filename,filen))//文件存在 { exits=0; intf1=0;//标记上临 intf2=0;//标记下临 intp1,p2;//存储上临、下临的序号 f=o[i].firstf; n=o[i].numf; for(i;i { o[i]=o[i+1]; } omax--; for(intj=0;j { if(s[j].first+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件 管理 实验 报告