操作系统实验可变分区存储管理Word文档格式.docx
- 文档编号:17398420
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:17.89KB
操作系统实验可变分区存储管理Word文档格式.docx
《操作系统实验可变分区存储管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验可变分区存储管理Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
typedefstructnode
{
intstart;
//起始地址
intlength;
//长度
chartag[20];
//标志
}job;
⑵可变分区的三种算法就是为作业分配主存空间的方法。
●首次适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入第一个满足条件的空间中去。
●最佳适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入满足条件的空闲空间中最小的一个空间中去。
●最坏适应算法:
在空闲区间中查询满足作业需要的空间,并将作业装入满足条件的空闲空间中最大的一个空间中去。
从三种算法的说明可以看出,分配空间的过程主要可以分两步:
●查询所有满足作业需求的空间块。
●按照指定的算法将作业装入空间块中。
⑶在操作的最初主存空间实际就是一个大的空闲区,不涉及到如何分配的问题。
为直接模拟运行一段时间后主存中出现了多个空闲块的状态,题目要求从一个文件读入空闲区表。
在这里我们可以设计一个空闲区表文件的结构为如表2所示:
表2空闲区表
…
这样也可以方便地将空闲表一次读入程序中,而不必再一个个的输入。
⑷主要变量及函数说明如表3所示。
表3变量与函数说明表
typedefstructnode
内存块结构
jobfrees
空闲区表
joboccupys
已分配区表
free_quantity
空闲区数量
occupy_quantity
已分配区数量
voidinitial()
初始化函数
intreadData()
从文件读入空闲表函数
voidsort()
排序空闲表
voidview()
显示分区信息
voidearliest()
最先适应分配算法
voidexcellent()
最优适应分配算法
voidworst()
最坏适应算法
mem.txt
空闲表文件
5.实验案例
//动态分区算法memory.c
//运行环境Redhad9.0gcc4.0
#include<
stdio.h>
stdlib.h>
string.h>
#defineMAXJOB200//定义存储数据最大值
typedefstructnode//内存块结构
jobfrees[MAXJOB];
//定义空闲区表
intfree_quantity;
//空闲区块数
joboccupys[MAXJOB];
//定义已分配区表
intoccupy_quantity;
//已分配区块数
//初始化函数
inti;
for(i=0;
i<
MAXJOB;
i++){
frees[i].start=-1;
frees[i].length=0;
strcpy(frees[i].tag,"
free"
);
//定义所有块为空闲块
occupys[i].start=-1;
occupys[i].length=0;
strcpy(occupys[i].tag,"
"
//已分配块为0
}
free_quantity=0;
occupy_quantity=0;
//读数据函数,从文件中读入空闲表的设置
FILE*fp;
charfname[20];
printf("
请输入初始空闲表文件名:
//输入空闲表文件的文件名
scanf("
%s"
&
fname);
if((fp=fopen(fname,"
r"
))==NULL){
错误,文件打不开,请检查文件名\n"
else{
while(!
feof(fp)){//打开文件读入空闲表信息
fscanf(fp,"
%d%d"
frees[free_quantity].start,&
frees[free_quantity].length);
free_quantity++;
}
return1;
return0;
//排序空闲表
inti,j,p;
free_quantity-1;
p=i;
for(j=i+1;
j<
free_quantity;
j++){
if(frees[j].start<
frees[p].start){
p=j;
if(p!
=i){
frees[free_quantity]=frees[i];
frees[i]=frees[p];
frees[p]=frees[free_quantity];
//显示函数
\n---------------------------\n"
当前空闲表:
\n"
//显示空闲表
起始地址\t长度\t状态\n"
printf("
%8d\t%4d\t%s\n"
frees[i].start,frees[i].length,frees[i].tag);
\n----------------------------\n"
当前已分配表:
起始地址\t长度\t占用作业名\n"
occupy_quantity;
i++){//显示已分配表
occupys[i].start,occupys[i].length,occupys[i].tag);
getchar();
//最先适应分配算法
charjob_name[10];
intjob_length;
inti,j,flag,t;
请输入新申请内存空间的作业名:
job_name);
请输入新申请内存空间的大小:
%d"
job_length);
flag=0;
i++){//顺序查找满足条件的空间
if(frees[i].length>
=job_length){
flag=1;
if(flag==0){//没找到满足的空间
\n当前没有能满足你申请长度的空闲内存,请稍候再试\n"
else{//找到了满足的空间
t=0;
i=0;
while(t==0){
t=1;
i++;
i--;
occupys[occupy_quantity].start=frees[i].start;
//分配满足条件的空间
strcpy(occupys[occupy_quantity].tag,job_name);
occupys[occupy_quantity].length=job_length;
occupy_quantity++;
job_length){
frees[i].start+=job_length;
frees[i].length-=job_length;
else{
for(j=i;
frees[j]=frees[j+1];
free_quantity--;
内存空间成功!
//最优适应分配算法
charjob_name[20];
if(frees[i].length>
if(flag==0){
t=1;
for(j=0;
j++){//找到满足条件的最小空闲空间
if((frees[j].length>
=job_length)&
&
(frees[j].length<
frees[i].length)){
i=j;
//分配空闲空间
//最坏适应算法
flag=1;
}
t=0;
i=0;
while(t==0){
t=1;
j++){//找到满足条件的最大空闲空间
(frees[j].length>
i=j;
frees[i].start+=job_length;
frees[i].length-=job_length;
//主函数
intmain()
intflag=0;
intt=1;
intchioce=0;
initial();
//初始化
flag=readData();
//读空闲表文件
while(flag==1){
sort();
//排序
//显示菜单
\n=====================================\n"
动态分区算法"
1.显示空闲表和分配表\n2.最先适应法\n3.最优适应法\n4.最坏适应法\n0.退出\n============="
请选择:
chioce);
//输入选择的菜单项
switch(chioce){
case1:
//显示空闲表和分配表
view();
break;
case2:
//调用最先适应法
earliest();
case3:
//最优适应法
excellent();
case4:
//最坏适应法
worst();
case0:
//退出
flag=0;
default:
\n选择错误!
运行结果:
[root@redlinuxys]#gccmemory.c–omemory.o
[root@redlinuxys]#./memory.o
mem.txt↙
=====================================
动态分区算法
1.显示空闲表和分配表
2.最先适应法
3.最优适应法
4.最坏适应法
0.退出
=============请选择:
1↙
---------------------------
起始地址长度状态
2032free
528free
60120free
180331free
----------------------------
起始地址长度占用作业名
选择2后,情况如下:
(由于篇幅有限,简化了运行过程)
2↙
a↙
32↙
b↙
24↙
6096free
2032a
6024b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统实验 可变分区存储管理 操作系统 实验 可变 分区 存储 管理