第八章--主存空间的分配与回收--可变分区管理算法
更新时间:2023-06-07 09:36:01 阅读量: 实用文档 文档下载
- 主存空间的分配和回收推荐度:
- 相关推荐
操作系统实验教程及linux和windows系统调用编程----张丽芬--清华大学出版社--部分程序源代码--第八章--主存空间的分配与回收--可变分区管理算法
// f.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
/*可变式分区的分配与回收主程序 f.cpp*/
#include "stdio.h"
#define N 5
struct freearea
{int startaddress;
int size;
int state;
}freeblock[N]={{20,20,1},{80,50,1},{150,100,1},{300,30,0},{600,100,1}};
int sumsize=0;
int applyarea;
int sumsize1;
/*定义为作业分配主存空间的函数alloc()*/
int alloc(int applyarea)
{
int i,tag=0;
for(i=0;i<N;i++)
{
sumsize+=freeblock[i].size;
sumsize1+=freeblock[i-1].size;
freeblock[i-1].state=0;
if(freeblock[i].state==1&&sumsize>=applyarea)
{
break;
}
}
freeblock[i].startaddress=freeblock[i].startaddress+(applyarea-sumsize1);
freeblock[i].size=freeblock[i].size-(applyarea-sumsize1);
return 1;
}
////////////////////////////////////////////
void setfree()
{ int s,l,tag1=0,tag2=0,tag3=0,i,j;
printf("input free area startaddress:\n");
scanf("%d",&s);
printf("input free area size:\n");
scanf("%d",&l);
for(i=0;i<N;i++)//////////////////
{
sumsize+=freeblock[i].size;
if(freeblock[i].state==1&&sumsize>=applyarea)
//break;
//}
//{
if(freeblock[i].startaddress==s+l&&freeblock[i].state==1)
{l=l+sumsize;///////////
tag1=1;
for(j=0;j<N;j++)
if(freeblock[j].startaddress+freeblock[j].size==s&&freeblock[j].state==1)
{freeblock[i].state=0;
freeblock[j].size=freeblock[j].size+l;//////
tag2=1;
break;
}
if(tag2==0)
{ freeblock[i].startaddress=s;
freeblock[i].size=l;//////////////////
break;
}
}
}
if(tag1==0)
{ for(i=0;i<N;i++)
if(freeblock[i].startaddress+freeblock[i].size==s&&freeblock[i].state==1)
{ freeblock[i].size=freeblock[i].size+l;///////
tag3=1;
break;
}
if(tag3==0)
for(j=0;j<N;j++)
if(freeblock[j].state==0)
{ freeblock[j].startaddress=s;
freeblock[j].size=l;//////////
freeblock[j].state=1;
break;
}
}
}
//////////////////////////////////////////////////////////
void adjust()
{
int i,j;
struct freearea middata;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(freeblock[j].startaddress>freeblock[j+1].startaddress){
middata.startaddress=freeblock[j].startaddress;
middata.size=freeblock[j].size;
middata.state=freeblock[j].state;
freeblock[j].startaddress=freeblock[j+1].startaddress;
freeblock[j].size=freeblock[j+1].size;
freeblock[j].state=freeblock[j+1].state;
freeblock[j+1].startaddress=middata.startaddress;
freeblock[j+1].size=middata.size;
freeblock[j+1].state=middata.state;
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(freeblock[j].state==0 && freeblock[j+1].state==1){
middata.startaddress=freeblock[j].startaddress;
middata.size=freeblock[j].size;
middata.state=freeblock[j].st
ate;
freeblock[j].startaddress=freeblock[j+1].startaddress;
freeblock[j].size=freeblock[j+1].size;
freeblock[j].state=freeblock[j+1].state;
操作系统实验教程及linux和windows系统调用编程----张丽芬--清华大学出版社--部分程序源代码--第八章--主存空间的分配与回收--可变分区管理算法
freeblock[j+1].startaddress=middata.startaddress;
freeblock[j+1].size=middata.size;
freeblock[j+1].state=middata.state;
}
}
/////////////////////////////////////////////////////////////////
void print()
{
int i;
printf(" |................................|\n");
printf(" |address size state|\n");
printf(" |................................|\n");
for(i=0;i<N;i++)
{
printf(" |%3d %3d %3d |\n",
freeblock[i].startaddress,freeblock[i].size,freeblock[i].state);
printf(" |................................|\n");
}
}
void main()
{
int applyarea,start,i;
char end;
printf("\n is there any job request memory? y or n:");
while((end=getchar())=='y')
{
printf("at first the free memory is this:\n:");
adjust();
print();
printf("inpur request memory is this:\n");
scanf("%d",&applyarea);
start=alloc( applyarea);
adjust();
printf("after allocation, the free memory is this:\n:");
print();
if(start==-1)
printf("there is no fit memory ,please wait!\n:");
else
printf("job's memory start address is:%d\n:",start);
printf(" job size is:%d\n:",applyarea);
printf("job is running.\n:" );
printf("job is terminated.\n:" );
for(i=1;i<1000;i++);
setfr
ee();
adjust();
print();
printf("is there any job that is waiting?y\n:" );
end=getchar();
}
//}
}
正在阅读:
第八章--主存空间的分配与回收--可变分区管理算法06-07
物理竞赛专题训练(光学)03-30
2016-2017学年江苏省泰州市姜堰区七年级(下)期末数学试卷03-31
电度表部颁DL645-07规约说明08-31
(水)地暖自检记录单(模板)05-30
网络信息资源与检索测试题及答案01-09
提高水泥混凝土路面平整度的修筑技术01-29
《网络营销》练习测试题库及答案01-29
发改委鼓励项目11-04
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 主存
- 可变
- 分区
- 算法
- 回收
- 分配
- 管理
- 空间
- 无油润滑压缩机活塞环的设计及计算
- 护理心理学教案4
- 2014年韶关一模英语答案
- 九年级上册语文课本课后生字词拼音及解释
- 最新初中生评语200例
- 中考常考成语总汇
- PADS9.3图文安装方法(WIN7 XP)
- 2009年4月自学考试当代中国政治制度试题及答案
- 部编版语文六年级上册 北京的春节 课时设计
- 上海交通大学材料科学与工程学院(含塑性研究院)2019年硕士研究生招生复试名单公示
- 期末复习方法主题班会
- 大学生兼职教师暑期社会实践报告范文
- 反硝化细菌产品详细简介
- 2011年自考《金融理论与实务》复习笔记汇总
- Basic Management Accounting and Control Concepts管理会
- 2021年人美版三年级美术下册第1课 我们的社区教案
- 液压升降平台螺栓类型选择及紧固方法
- 小学美术教学随笔
- 2017年朝阳区高三年级一模英语试题
- 曾经感动我们的经典电影对白(英语)