08539060 汪 课程设计Word格式.docx
- 文档编号:16682078
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:16
- 大小:257.96KB
08539060 汪 课程设计Word格式.docx
《08539060 汪 课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《08539060 汪 课程设计Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
3.3实验说明:
3.3.1最先适应分配模拟算法流程图
3.3.2主存回收算法流程图
4设计过程与程序代码
4.1设计过程:
4.1.1假设某系统的主存被分成大小相等的64块,则位示图可用8个字节来构成,另用一单元记录当前空闲块数。
如果已有第0,1,4,5,6,9,11,13,24,31,共10个主存块被占用了,那么位示图情况如下:
字位
节数
号
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
4.1.2当要装入一个作业时,根据作业对主存的需要量,先查当前空闲块数是否能满足作业要求,若不能满足则输出分配不成功。
若能满足,则查位示图,找出为“0”的一些位,置上占用标志“1”,从“当前空闲块数”中减去本次占用块数。
按找到的计算出对应的块号,其计算公式为:
块号=j8+i
其中,j表示找到的是第n个字节,I表示对应的是第n位。
根据分配给作业的块号,为作业建立一张页表,页表格式:
页号
块号
N
4.1.3当一个作业执行结束,归还主存时,根据该作业的页表可以知道应归还的块号,由块号可计算出在位示图中的对应位置,把对应位的占用标志清成“0”,表示对应的块已成为空闲块。
归还的块数加入到当前空闲块数中。
由块号计算在位示图中的位置的公式如下:
字节号j=[块号/8]([]表示取整)
位数i={块号/8}({}表示取余)
4.1.4设计实现主存分配和回收的程序。
假定位示图的初始状态如
(2)所述,现有一信息量为5页的作业要装入,运行你所设计的分配程序,为作业分配主存且建立页表(格式如(3)所述)。
然后假定有另一作业执行结束,它占用的块号为第4,5,6和31块,运行你所设计的回收程序,收回作业归还的主存块。
4.2程序代码
#include<
stdio.h>
#defineN64//物理块数
#defineM100000//最多输入文件数
structfile//文件结构体,包含文件号,文件页长,页号,几页号对应的块号
{
intfilenum;
intyechang;
intyenum;
intkuainum;
};
structfilefl[N];
//文件结构体数组
voidput(inta[8][8])//输出位示图
inti,j;
for(i=0;
i<
8;
i++)
{
for(j=0;
j<
j++)
printf("
\t%d"
a[i][j]);
printf("
\n"
);
}
}
voidhuishou(inta[8][8],intb)//回收规定的页面
intc[4]={4,5,6,31};
inti,j,k,empty;
inth[4];
for(k=0;
k<
4;
k++)
h[k]=c[k];
i=c[k]/8;
j=c[k]%8;
a[i][j]=0;
printf("
\n需要回收的页号和块号分别为:
页号\t块号\n"
%d\t%d\n"
k,h[k]);
回收后的页表位示图为:
put(a);
empty=0;
{
if(a[i][j]==1)
empty+=1;
}
empty=64-empty;
剩余的块数:
%d\n"
empty);
voidshixian(inta[8][8],intb)//实现存储空间的分配与回收
inti,j,k,x,y,m,empty,full,fileshu,kuainum,h[N],g[N][N];
intcishu=0,hang=0,lie=0,filenum=0,wenjianshu=0;
intp[M]={-1};
intjian=0;
empty=b;
beg:
请输入需要装入的文件的页数:
"
scanf("
%d"
&
m);
cishu=0;
if(empty<
m)
需要装入的页数大于页表中的空闲页数,分配失败\n"
else
wenjianshu+=1;
for(i=1;
=wenjianshu;
if(fl[i].yechang==0)
filenum=i;
else
filenum+=1;
h[filenum]=m;
fl[filenum].filenum=filenum;
m;
fl[filenum].yenum=i;
for(i=0;
{
if(a[i][j]==0)
{
a[i][j]=1;
kuainum=i*8+j;
cishu+=1;
fl[filenum].yenum=cishu;
fl[filenum].kuainum=kuainum;
g[filenum][cishu]=kuainum;
}
if(cishu>
=m)
break;
}
if(cishu>
break;
fl[filenum].yechang=m;
文件号:
%d\t文件页长:
fl[filenum].filenum,
fl[filenum].yechang);
%d\t"
fl[filenum].yenum-m+i);
g[filenum][i+1]);
full=0;
full+=1;
}
empty=64-full;
分配后的页表位示图为:
put(a);
继续装入文件请输入1,回收页面请输入2,输入其他键结束:
scanf("
y);
if(y==1)
gotobeg;
elseif(y==2)
gotoaeg;
gotoend;
aeg:
请输入需要回收的文件号大于0且不在下列数集中的数---\t"
for(i=1;
=jian;
if(p[jian]!
=-1)
p[jian]);
\n输入的需要回收的页数为:
fileshu);
if(wenjianshu<
fileshu)
你输入的文件号不存在!
if(fileshu<
=0)
k=g[fileshu][1];
filenum=fileshu;
for(x=0;
x<
h[fileshu];
x++)
k=g[fileshu][x+1];
i=k/8;
j=k%8;
a[i][j]=0;
回收页面后的页表位示图为:
empty=0;
//显示空闲页数
empty=64-empty;
fl[fileshu].yechang=0;
jian+=1;
p[jian]=fileshu;
继续装入页面请输入1,回收页面请输入2,输入其他键结束:
if(y==1)
elseif(y==2)
gotoaeg;
end:
huishou(a,empty);
voidmain()
inti,j,b,m,n;
intc[N]={0,1,4,5,6,9,11,13,24,31};
inta[8][8]={0};
for(m=0;
m<
10;
m++)
i=c[m]/8;
j=c[m]%8;
a[i][j]=1;
初始化的位示图是:
b=0;
b=b+1;
n=64-b;
n);
shixian(a,n);
5个人遇到的困难与获得的主要成果
5.1实验过程中遇到的困难:
5.1.1在实验书写程序的过程中发现对于C语言面的知识已经开始生疏,特别是函数调用方面的知识。
通过对以前知识的回顾,熟悉了数组作为实参是的参数传递,只是对于二维数组作为返回参数时的返回过程仍没理解透彻,所以在函数的设计过程中没有使用二维数组作为返回值传递。
5.1.2在设计程序的过程中,应该使得在回收相应的文件的页号对应的物理块号以后,回收的文件号不能再被输入作为回收文件号,但是没想好解决的方法,也就没有实现相应的功能。
5.2实验的主要成果
5.2.1在程序设计的过程中使我更深刻的认识了页面管理方式下利用位示图对存储器的管理。
位示图的存储管理方式适用于小型机和微型机等存储器容量较小的计算机,而不是用于存储容量大的大型机,因为位示图管理存储器时,对物理块的分配和回收需要不断地进行查找空闲块和相应的文件存放的物理块,需要消耗大量的时间,使得存储器的存储效率随这容量的增大而降低。
6设计结果与分析
6.1实验结果
6.2分析
在存储器划分成与页面大小相等的块,并为每个块分配相应的块号。
删除时找到相应文件中的页号对应的块号,将其对应位上的状态由1置为0,以完成存储空间的释放。
7设计体会与建议
7.1体会
位示图管理存储器能详细简单的表示,使用也比较方便。
但是每次实行分配物理块和回收物理块时需要频繁的对位示图进行查找,从而浪费了大量的时间,也就是用位示图法管理存储器时存储器的存取效率比较低,特别是对存储空间比较大的计算机系统,表现更为严重。
7.2建议
由于位示图在管理存储器是存在此种比弊端,可以先将大的物理空间采用成组连接法分成许多容量较小的物理块,在这些小的物理块上使用位示图对物理块进行管理可以相对提高存储效率。
8参考文献
《C语言程序设计》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08539060 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)