模拟实现用位示图法管理文件存储空间的分派与回收1_第1页
模拟实现用位示图法管理文件存储空间的分派与回收1_第2页
模拟实现用位示图法管理文件存储空间的分派与回收1_第3页
模拟实现用位示图法管理文件存储空间的分派与回收1_第4页
模拟实现用位示图法管理文件存储空间的分派与回收1_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——模拟实现用位示图法管理文件存储空间的分派与回收1

计算机科学与技术学院

《操作系统》综合试验报告

(2023/2023学年第一学期)

学生姓名:

学生专业:网络工程学生班级:网络班学生学号:2指导教师:

2023年12月12日

计算机科学与技术学院

综合试验任务书

课程设计名称课程设计题目学生姓名《操作系统》课程设计模拟实现用位示图法管理文件存储空间的分派与回收专业班级网学号2综合试验任务内容[问题描述]设计实现一个综合的应用程序。内容如下:(1)首先对位示图算法原理进行深刻的理解和把握;(2)程序首先要给出位示图初态。分派时,参数为文件名及需要分派的块数。回收时,参数为文件名。(3)回复信息:分派时,能够分派时,给出文件名和分派的具体块号。否则,给出无法分派的信息。显示位示图。(4)回收时:给出回收的具体块号。显示位示图。[基本要求](1)理解文件存储空间的分派与回收的基本概念,把握产生文件存储空间的分派与回收的几种方法,体会位示图算法是管理文件存储空间的分派与回收的一种行之有效的方法。(2)通过编写程序实现位示图算法,进一步理解位示图算法的原理和执行过程,把握位示图算法的描述和应用,进一步熟练把握文件存储空间的分派与回收的方法。[测试要求]对每一个模块的功能进行黑盒测试,保证各个模块功能的正确性。指导教师:时间:年月5日

目录

第一章功能需求描述1

1.1功能列表与说明1

1.2操作界面11.3界面操作1

其次章系统设计描述2

2.1任务分讲解明22.2主要数据结构设计说明22.3主要函数接口说明2

第三章算法设计描述5

3.1主要函数和函数的流程图5

3.1.1.盘块的分派算法流程图5

3.2.2.盘块的回收算法流程图6

第四章开发过程描述7

4.1程序源码7

4.2程序中遇到的错误及错误原因74.3测试程序功能所用的数据和测试方法7

第五章设计心得体会8附录1程序源代码9

第一章功能需求描述

1.1功能列表与说明

功能名称分派文件回收文件退出功能描述文件分派回收文件退出程序1.2操作界面

文件的存取和回收1.分派文件2.回收文件3.退出请输入选项:

1.3界面操作

如图可以很明白的看到可以输入123三个数分别对应分派文件、回收文件、退出三种操作。

1

其次章系统设计描述

2.1任务分讲解明

1.位示图法系统初始化。2.位示图法分派与回收算法。

2.2主要数据结构设计说明

1.空闲区结构体定义

typedefstructnode{

intstart_location;//空闲区对象变量的开始位置intfree_number;//空闲区块数目

structnode*next;//指向下一个空闲区的指针}free_link;

2.申请空间作业结构体定义

typedefstructlink{

charoffice[20];//作业名

intbegin_location;//作业申请空间后的开始位置intoffice_number;structlink*next;}office;

3.相关位示图操作的结构体定义

typedefstruct{

free_link*p;//空间区链表指针office*q;}work;

//作业申请空间区的数目

//指向下一个申请空闲区的作业指针

//作业链表指针

2.3主要函数接口说明

2

1.显示菜单函数

2.置空位示图进行初始化

voidzero_wst(){inti;

for(i=0;i>flag;switch(flag){

case1:w=request(w,WST);break;case2:w=delect(w,WST);break;case3:exit(0);

default:printf(\输入错误,请重新输入!\\n\}

4

第三章算法设计描述

3.1主要函数和函数的流程图

3.1.1.盘块的分派算法流程图

Request()分派输入文件名,和块数.strcmp(s->office,u->office)==0该文件是否已存在是

r->free_number>=s->office_number能否查找到一个足够的空闲区域是

当前空盘区块数是否分派完将该作业结点插入作业链表表尾,,从该区域分派出对应大小空间,修改位示图否是

图3-1盘块的分派

返回释放该空闲区结点,把修改work里面两个首地址

5

3.2.2.盘块的回收算法流程图

能否找到对应文件输入要查找的文件名,查找Delect()回收

是否把该单元块数参与前一个空闲区结点要回收的单元后为要回收的单元前为空

是否

要回收的单元前后都空把空闲区起始地址该为当前开始盘块空闲区盘块增加

结点空盘起始地址改为前一个,空闲区盘块增加否要回收的单元自成空盘区结点

返回图3-2盘块的回收算法流程图

6

修改位示图对应盘块的的内容,删除该文件结点.修改work里面两个首地址把该结点插入空闲区链表第四章开发过程描述

4.1程序源码

由于源码较长,单独附加在后面,见附录1-程序源码

4.2程序中遇到的错误及错误原因

编程中几乎没有遇到什么大的问题,只有一些语法中的小错误,编译器就解决完毕。

4.3测试程序功能所用的数据和测试方法

此次测试使用黑盒测试方法,目的是测试功能是否跟预期一样

预期输出输出请输入文件名和块数实际输出输出请输入文件名和块数输入文件名和块数输入2选择回收

显示已有文件名:块数输出请输入文件名显示已有文件名:块数输出请输入文件名测试用例输入1选择分派功能7

第五章设计心得体会

1.准备越充分,试验越顺利。古人云,磨刀不误砍柴工。前期的知识储存、文献储存、材料准备、方法准备可以避免手忙脚乱,充分的预试验使你充满信心。一步一个脚印,就不必“从头再来〞。最不能容忍的是在开始的几步偷懒,造成后面总有一些无法排除的障碍。

2.交流是最好的老师做试验遇到困难是家常便饭。你的第一反应是什么?反复尝试?放弃?看书?这些做法都有道理,但首先应当想到的是交流。对有身份的人,私下的请教表达你对他的尊重;对同年资的人,公开的探讨可以使大家畅所欲言,而且出言提防。千万不能闭门造车。一个试验折腾半年,后来别人告诉你那是死路,岂不冤大头?

3.一半时间做试验,一半时间看文献。

千万不能把时间全部消耗在试验台上。看文献、看书、看别人的操作、听别人的经验、研究别人的思路,边做边思考。要学会比较,不要盲从。否则,会被一些小小的问题困扰许久。

8

附录1程序源代码

#include\#include\#include\#include\///#include\#includeusingnamespacestd;intWST[256];

/*************************************空闲区结构体定义

start_location空闲区对象变量的开始位置free_number空闲区块数目next指向下一个空闲区的指针

**************************************/

typedefstructnode{

/*************************************申请空间作业结构体定义office[]作业名

begin_location作业申请空间后的开始位置office_number作业申请空间区的数目next指向下一个申请空闲区的作业指针**************************************/

9

intstart_location;intfree_number;structnode*next;}free_link;

typedefstructlink{

/**************************************相关位示图操作的结构体定义p空间区链表指针q作业链表指针

***************************************/typedefstruct{

free_link*p;office*q;charoffice[20];intbegin_location;intoffice_number;structlink*next;}office;

}work;

/***************************************程序菜单

****************************************/voidmenu(){}

/***************************************置空位示图进行初始化

****************************************/voidzero_wst(){

10

printf(\文件的存取和回收\\n\printf(\分派文件\\n\printf(\回收文件\\n\printf(\退出\\n\\t\printf(\请输入选项:\

}

inti;

for(i=0;iq;q=q->next;if(q!=NULL){

printf(\已有文件:\\n\

while(q!=NULL){

printf(\fice_number-1);}

/*************************************位示图操作的初始化包括:空闲区链表的初始化

作业链表的初始化}

}

q=q->next;

**************************************/work*start(){

free_link*p;office*q;work*w;

w=(work*)malloc(sizeof(work));

p=(free_link*)malloc(sizeof(free_link));p->start_location=0;p->free_number=256;p->next=NULL;

q=(office*)malloc(sizeof(office));q->next=NULL;w->p=p;w->q=q;returnw;

12

}

/**************************************申请空间操作

***************************************/work*request(work*w,intWST[256]){

inti,m,n,flag=0;

free_link*p,*r,*e;//r->free_number用于查找空闲区的块数

office*q,*s,*t,*u;//s创立新节点,存储新建文件的信息,n用于查找是否有

重复节点

p=w->p;r=p;q=w->q;t=q;u=q->next;

printf(\请输入文件名和块数:\s=(office*)malloc(sizeof(office));s->next=NULL;while(t->next!=NULL)

t=t->next;

scanf(\while(u!=NULL){

if(strcmp(s->office,u->office)==0){}

flag=1;

printf(\对不起,该文件已存在!\\n\free(s);break;

u=u->next;}

if(flag==0){

13

while(r!=NULL){

if((r->free_number)>=(s->office_number))//用于查找空闲区中空闲

块数是否大于欲分派的块数

}

if(r==NULL){}else{

t->next=s;

m=r->start_location;//空闲区的起始地址

s->begin_location=r->start_location;//作业从空闲区的起始地址开printf(\对不起,没有足够的空间分派失败!\\n\free(s);

break;

r=r->next;

始分派

r->start_location=r->start_location+s->office_number;//改变空

闲区空闲块数的起始地址

r->free_number=r->free_number-s->office_number;//改变空间区块

数的大小

n=(r->start_location-1);//新的空间区的起始地址-1for(i=m;ifree_number==0){

if(p==r){//p==r说明内存中只有一个整块的空闲区}else{

e=p;

while(e!=NULL){

14

free(r);p=NULL;

}

}

}

}

}

}

if(e->next==r)

break;

e=e->next;

e->next=r->next;free(r);

w->p=p;w->q=q;returnw;

/*********************************************回收空间操作

**********************************************/work*delect(work*w,intWET[]){

charname[20];inti;

free_link*p,*r,*t;office*q,*s,*e;p=w->p;r=p;t=p;q=w->q;s=q;e=q;s=s->next;if(s==NULL){

15

}

printf(\没有可以回收的文件!\\n\

else{

printf(\请输入文件名:\cin>>name;while(s!=NULL){}

if(s==NULL){}else{

coutoffice,name)==0)

break;

s=s->next;

if((WST[s->begin_location-1]==0

break;

r=r->next;

if((WST[s->begin_location-1]==1r->free_number=r->free_number+s->office_number;

break;

r=r->next;

}if(WST[s->begin_location-1]==0

t=r;break;

r->free_number=r->free_number+s->office_number+t->free_number;

}

free(t);

if((WST[s->begin_location-1]==1t->next=NULL;

17

t->start_location=s->begin_location;t->free_number=s->office_number;if(r==NULL)

p=t;

if(r!=NULL

else{}

t->next=r;p=t;

if((r->start_locationbegin_location)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论