操作系统文件管理实验报告

实 验 报 告

课程名称 计算机操作系统 实验名称 班 级 学 号

姓 名 成 绩 指导教师 赵安科 实验日期 2015年6月18日

一.实验题目:文件管理

二.实验内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实 施空间分配。 三.实验说明:

文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。

(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。

空白文件目录表(初始)

空白文件目录(中间)

已使用区域表(中间)

上述两张表的数据在系统运行中是发生变化的。

文件空闲区分配和释放算法如下图所示:

图一 文件空闲区分配算法

图二 文件空闲区回收算法

(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(占用区),其结构如下:

struct SPACE//空白区 { };

struct OCCUPY//占用区 { };

分别用来描述空白区和占用区的相关属性,再定义它们的结构数组OCCUPY o[20]和SPACE s[20]用来表示两个表(存储相关数据),定义变量smax和omax分别用来初始空白区文件数目和初始占用区文件数目,函数spaceprint和函数occupyprit分别用来显示空白区和占用区的情况,函数fenpei和函数shanchu分别用来分配文件和删除文件,随用户的选择可动态的分配和删除文件,并且将每次执行的结果显示出来(即空白区情况和占用区情况),用户根据两个表的情况可实时观察到操作所执行的结果及过程,最终比较实验结果可进一步加深和理解空白目录法的过程和本质。 六.程序清单及描述: #include #include

int smax=1;//初始空白区文件数目 int omax=0;//初始占用区文件数目 struct SPACE//空白区 { };

int id;//空白文件序号 int num;//空白块个数 int block[30];//物理块号 int first;//首空白块号

char filename[20];//文件名 int firstf;//首块号 int numf;//文件块个数 int blockf[30];//物理块号 int id;//空白文件序号 int num;//空白块个数 int block[30];//物理块号 int first;//首空白块号

struct OCCUPY//占用区 { }; //初始化 OCCUPY o[20];

SPACE s[20]={{1,0,100,{0,1,2,3,98,99}}};

void bubble(int a[],int n)//冒泡法排序 { }

//空白区输出显示 void spaceprint()

int i,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;

char filename[20];//文件名 int firstf;//首块号 int numf;//文件块个数 int blockf[30];//物理块号

int a[20];

for(int j=0;j

cout

cout

for(int i=0;i

}

cout

if(a[z]==s[i].first)//按首块号从小到大顺序输出 {

a[j]=s[j].first;

bubble(a,smax); \n";

cout

cout

//占用区输出显示 void occupyprint() {

cout

}

void fenpei()//分配文件 {

char filen[20]; //文件名 int size;//申请块数

int firsti=0;//中间过渡临时变量 cout>filen; cout>size; for(int i=0;i

for(int j=0;j

if(size

if(i>=smax) {

cout

if(!strcmp(filen,o[j].filename)) { }

cout

cout

cout

cout

}

}

}

if(s[i].num==size)//空白块个数等于申请块个数 { }

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

firsti=s[i].first;//修改空白区 for(i;i

strcpy(o[omax].filename,filen);//修改占用区 o[omax].firstf=firsti; o[omax].numf=size; omax++;

cout

s[i].first=s[i+1].first; s[i].num=s[i+1].num;

spaceprint(); occupyprint();

void shanchu()//删除文件

{

char filen[20];//文件名 int f;//文件首块号 int n;//文件所占的块数 cout>filen; int exits=1;//标记,判断文件是否存在 for(int i=0;i

} } } } //四种情况 if(f1&&!f2)//有上临无下临 { } if(!f1&&f2)//无上临有下临 { } if(f1&&f2)//既有上临又有下临 { } if(!f1&&!f2)//既无上临也无下临 { } s[smax].id=smax+1; s[smax].first=f; s[smax].num=n; smax++; s[p1].num=s[p1].num+n+s[p2].num; for(p2;p2

}

} spaceprint(); occupyprint();

int main()

{

}

spaceprint(); occupyprint(); while(1) { char ch; cout>ch; { } if(ch=='2') { } if(ch!='1'&&ch!='2') { } cout

七.执行结果:

实验结果分析:对比实验运行结果,文件的分配过程和文件的删除过程与人工分析的结果一致,实验基本达到预期的目标。

八.总结与体会:

在本次试验的过程中,由于前期的理论准备不足和对课本知识的掌握的不足,在编写程序的过程中,考虑的情况不全面,所写的程序结构较混乱而且可读性不强,错误较多,尤其是文件分配过程中修改空白区和占用区,文件删除过程中上下临的合并等问题,最后通过对课本的研读和画图的分析才找到错误之处进行修改得到正确结果。通过本次实验,使我对空白文件目录法有了一个深入的了解和应用,空白文件目录法是文件管理最基本的方法,其在早期的文件管理中被使用到,但这种方法仅当有少量空白文件时才有较好的效果,如果存储空间中有大量的小的空白文件,则使该目录变得很大,因而效率大为降低。其次,这种管理技术仅适用于连续文件,有一定的局限性。最后,通过本次实验,锻炼了自己的编程能力,发现了自己编程知识上的不足,和专业知识的不足,希望在以后的学习中,能注重基本知识和基本能力的培养,以使自己有一个长足的发展。

实 验 报 告

课程名称 计算机操作系统 实验名称 班 级 学 号

姓 名 成 绩 指导教师 赵安科 实验日期 2015年6月18日

一.实验题目:文件管理

二.实验内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实 施空间分配。 三.实验说明:

文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。

(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。

空白文件目录表(初始)

空白文件目录(中间)

已使用区域表(中间)

上述两张表的数据在系统运行中是发生变化的。

文件空闲区分配和释放算法如下图所示:

图一 文件空闲区分配算法

图二 文件空闲区回收算法

(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(占用区),其结构如下:

struct SPACE//空白区 { };

struct OCCUPY//占用区 { };

分别用来描述空白区和占用区的相关属性,再定义它们的结构数组OCCUPY o[20]和SPACE s[20]用来表示两个表(存储相关数据),定义变量smax和omax分别用来初始空白区文件数目和初始占用区文件数目,函数spaceprint和函数occupyprit分别用来显示空白区和占用区的情况,函数fenpei和函数shanchu分别用来分配文件和删除文件,随用户的选择可动态的分配和删除文件,并且将每次执行的结果显示出来(即空白区情况和占用区情况),用户根据两个表的情况可实时观察到操作所执行的结果及过程,最终比较实验结果可进一步加深和理解空白目录法的过程和本质。 六.程序清单及描述: #include #include

int smax=1;//初始空白区文件数目 int omax=0;//初始占用区文件数目 struct SPACE//空白区 { };

int id;//空白文件序号 int num;//空白块个数 int block[30];//物理块号 int first;//首空白块号

char filename[20];//文件名 int firstf;//首块号 int numf;//文件块个数 int blockf[30];//物理块号 int id;//空白文件序号 int num;//空白块个数 int block[30];//物理块号 int first;//首空白块号

struct OCCUPY//占用区 { }; //初始化 OCCUPY o[20];

SPACE s[20]={{1,0,100,{0,1,2,3,98,99}}};

void bubble(int a[],int n)//冒泡法排序 { }

//空白区输出显示 void spaceprint()

int i,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;

char filename[20];//文件名 int firstf;//首块号 int numf;//文件块个数 int blockf[30];//物理块号

int a[20];

for(int j=0;j

cout

cout

for(int i=0;i

}

cout

if(a[z]==s[i].first)//按首块号从小到大顺序输出 {

a[j]=s[j].first;

bubble(a,smax); \n";

cout

cout

//占用区输出显示 void occupyprint() {

cout

}

void fenpei()//分配文件 {

char filen[20]; //文件名 int size;//申请块数

int firsti=0;//中间过渡临时变量 cout>filen; cout>size; for(int i=0;i

for(int j=0;j

if(size

if(i>=smax) {

cout

if(!strcmp(filen,o[j].filename)) { }

cout

cout

cout

cout

}

}

}

if(s[i].num==size)//空白块个数等于申请块个数 { }

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

firsti=s[i].first;//修改空白区 for(i;i

strcpy(o[omax].filename,filen);//修改占用区 o[omax].firstf=firsti; o[omax].numf=size; omax++;

cout

s[i].first=s[i+1].first; s[i].num=s[i+1].num;

spaceprint(); occupyprint();

void shanchu()//删除文件

{

char filen[20];//文件名 int f;//文件首块号 int n;//文件所占的块数 cout>filen; int exits=1;//标记,判断文件是否存在 for(int i=0;i

} } } } //四种情况 if(f1&&!f2)//有上临无下临 { } if(!f1&&f2)//无上临有下临 { } if(f1&&f2)//既有上临又有下临 { } if(!f1&&!f2)//既无上临也无下临 { } s[smax].id=smax+1; s[smax].first=f; s[smax].num=n; smax++; s[p1].num=s[p1].num+n+s[p2].num; for(p2;p2

}

} spaceprint(); occupyprint();

int main()

{

}

spaceprint(); occupyprint(); while(1) { char ch; cout>ch; { } if(ch=='2') { } if(ch!='1'&&ch!='2') { } cout

七.执行结果:

实验结果分析:对比实验运行结果,文件的分配过程和文件的删除过程与人工分析的结果一致,实验基本达到预期的目标。

八.总结与体会:

在本次试验的过程中,由于前期的理论准备不足和对课本知识的掌握的不足,在编写程序的过程中,考虑的情况不全面,所写的程序结构较混乱而且可读性不强,错误较多,尤其是文件分配过程中修改空白区和占用区,文件删除过程中上下临的合并等问题,最后通过对课本的研读和画图的分析才找到错误之处进行修改得到正确结果。通过本次实验,使我对空白文件目录法有了一个深入的了解和应用,空白文件目录法是文件管理最基本的方法,其在早期的文件管理中被使用到,但这种方法仅当有少量空白文件时才有较好的效果,如果存储空间中有大量的小的空白文件,则使该目录变得很大,因而效率大为降低。其次,这种管理技术仅适用于连续文件,有一定的局限性。最后,通过本次实验,锻炼了自己的编程能力,发现了自己编程知识上的不足,和专业知识的不足,希望在以后的学习中,能注重基本知识和基本能力的培养,以使自己有一个长足的发展。


相关文章

  • 计量标准管理制度(8项管理制度)
  • 石楼县质量技术监督检验测试所管理制度 SJZD001-2016 计量标准实验室管理制度 2016-05-10发布 2016-06-10实施 批准:梁红丽 编审:刘建军 闫磊 校对:刘建军 前 言 本制度包括了计量实验室的岗位管理制度.计量标 ...查看


  • [某医院各科室质量管理手册]47页
  • 本手册依据CNACL201-99"实验室认可准则"的规定而制定的,它阐述了 XXXXXXXXX(单位名称)的质量方针,并对XXXXXXXXX(单位名称)的质量体系提出了具 体的要求,适用于XXXXXXXXX(单位名称)工 ...查看


  • 产品质量检验机构计量认证
  • 产品质量检验机构计量认证/审查认可(验收) 评审准则(试行)宣贯参考材料 陈 华 康 1 总则 1.1 本准则为统一产品质量检验机构计量认证/审查认可(验收)工作,依据<中华人民共和国计量法>.<中华人民共和国标准化法&g ...查看


  • 需要的文件和记录
  • 合同与订单管理程序 五.相关文件 <过程设计开发管理程序> <工程更改管理程序> <产品质量管理程序> <出货检验指导书> 六.相关记录 与顾客沟通的来往邮件.传真或网上订单 <销售合同 ...查看


  • CNAS相关知识
  • CNAS 相关知识 中国合格评定国家认可委员会实验室认可(CNAS ) 中国合格评定国家认可委员会(英文名称为:China National Accreditation Service for Conformity Assessment 英 ...查看


  • 实验室测试员上岗考试质量管理体系部分试题(带答案)
  • 实验室质量管理体系考核试题 姓 名: 部 门: 岗 位: 考核时间: 年 月 日 阅卷人: 满分100分, 90分合格 成 绩: 第一部分:填空题(每题2分,共20题) 1. 国家工程实验室质量管理体系依据如下标准:..(1.1质量手册范围 ...查看


  • snawso计量认证评审准则
  • -+ 懒惰是很奇怪的东西,它使你以为那是安逸,是休息,是福气:但实际上它所给你的是无聊,是倦怠,是消沉;它剥夺你对前途的希望,割断你和别人之间的友情,使你心胸日渐狭窄,对人生也越来越怀疑. - 关于印发<实验室资质认定评审准则> ...查看


  • 实验室质量监督员质量监督报告
  • 实验室质量监督员质量监督报告 按照实验室认证要求根据质量手册和程序文件的规定年度对实验室进行了以下几方面的质量监督工作 一 月对试验室检测岗位进行监督抽查,抽查了主要材料的检测方法,---个全部为现行有效标准,查看了收样登记,样品流转记录, ...查看


  • 检验科岗位职责 1
  • 4.1 组织和管理 4.1.1 概述 检验科是为医院诊断.预防.治疗人体疾病或评估人体健康提供信息为目的,对来自人体的材料进行临床生物化学.临床免疫学.临床微生物.临床血液室.临床输血学.临床细胞学等检验的实验室.为保证实验室质量方针和目标 ...查看


热门内容