操作系统实验报告实验四-动态分区分配算法有运行图
更新时间:2023-08-27 15:46:01 阅读量: 教育文库 文档下载
- 操作系统推荐度:
- 相关推荐
配程序执行之后的结果图
实验目的
通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。
【实验内容】
问题描述:
设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。 程序要求如下:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。
4)输出:最终内存空闲分区的分配情况。
实现提示:
配程序执行之后的结果图
用C++语言实现提示:
1)程序中变量定义参考(根据需要可添加)如下:
const int MaxNumber=100; int FreePartition[MaxNumber]; int FirstPartition[MaxNumber]; int CycleFirstPartition[MaxNumber]; int BestPartition[MaxNumber]; int WorstPartition[MaxNumber]; int ProcessNeed[MaxNumber]; int PartitionNum,ProcessNum;
2)页面置换的实现过程如下:
变量初始化;
空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法;
根据用户选择的算法进行动态分区分配;
输出所有进程分配后的空闲分区分配情况。
实验要求:
1) 上机前认真复习动态分区分配算法,熟悉首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的计算过程;
2) 上机时独立编程、调试程序;
3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源
配程序执行之后的结果图
程序、实例运行结果截图)。
【源程序】
头文件First.h
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
#define Proprintf printf("|-----+-----+-----+-----+-----+-----+-----+-----+-----|\n")
#define Myprintf printf("|++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|\n") #define MaxNum 100
typedef struct ProcessPartition_struct{
int FreePartition[MaxNum]; //空闲分区大小
char ProcessName[MaxNum]; //作业名称
int ProcessNeed[MaxNum]; //作业需求空间大小
int state[MaxNum]; //作业分配标志
int PartitionNum,ProcessNum; //空闲分区个数,作业个数
}Process;
Process p;
int i,j,k,d,temp;
char order[MaxNum][MaxNum];
char ch[MaxNum];
int m; //作业个数
int n; //空闲分区个数
int First();
int CycleFirst();
int Best();
int Worst();
int Option(); //选择算法
int Pinput(); //参数输入
int Poutput(); //结果输出
int Pinput() //参数输入
{
printf("请输入空闲分区个数:\n");
scanf("%d",&n);
printf("请依次输入空闲分区大小(KB):\n");
for(i=0;i<n;i++)
{
配程序执行之后的结果图
scanf("%d",&p.FreePartition[i]);
}
printf("请输入作业个数:\n");
scanf("%d",&m);
printf("请依次输入作业名称:\n");
for(i=0;i<m;i++)
{
scanf("%c%c",&ch[i],&p.ProcessName[i]);
}
printf("请依次输入作业大小(KB):\n");
for(i=0;i<m;i++)
{
scanf("%d",&p.ProcessNeed[i]);
p.state[i]=0;
}
Proprintf;
for(i=0;i<n;i++)
{
printf("|%3d ",p.FreePartition[i]);
}
printf("|\n");
Proprintf;
printf("作业信息如下:\n");
for(i=0;i<m;i++)
{
printf("%3c",p.ProcessName[i]);
}
printf("\n");
for(i=0;i<m;i++)
{
printf("%3d",p.ProcessNeed[i]);
}
printf("\n");
return 0;
}
int First() //首次适应算法
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
//找到第一个合适的空闲分区
if((p.ProcessNeed[i] <= p.FreePartition[j]) && (!p.state[i]))
配程序执行之后的结果图
for(k=0;k<3;k++) //记录作业分配
{
if(order[j][k]==NULL)
{
order[j][k]=p.ProcessName[i];
break;
}
else
continue;
}
p.FreePartition[j]=p.FreePartition[j]-p.ProcessNeed[i];
p.state[i]=1;
}
}
}
return 0;
}
头文件CycleFirst.h
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
int CycleFirst() //循环首次适应算法
{
i=0;
j=0;
while((i<n) && (j<m))
{
if((p.ProcessNeed[i] <= p.FreePartition[j]) && (!p.state[i]))
{
for(k=0;k<3;k++) //记录作业分配
{
if(order[j][k]==NULL)
{
order[j][k]=p.ProcessName[i];
break;
}
else
continue;
}
p.FreePartition[j]=p.FreePartition[j]-p.ProcessNeed[i];
p.state[i]=1;
配程序执行之后的结果图
}
else
j++;
}
return 0;
}
头文件Best.h
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
int Best() //最佳适应算法
{
for(i=0;i<m;i++)
{
temp=p.FreePartition[0];
k=0;
//找到第一个合适的空闲分区
while(p.ProcessNeed[i] > temp)
{
k++;
temp=p.FreePartition[k];
}
for(j=0;j<n;j++)
{
//按最佳适应算法找到符合的空闲区
if((p.ProcessNeed[i] <= p.FreePartition[j]) && (temp > p.FreePartition[j]) && (!p.state[i]))
{
temp=p.FreePartition[j];
k=j;
}
else
continue;
}
for(d=0;d<3;d++) //记录作业分配
{
if(order[k][d]==NULL)
{
order[k][d]=p.ProcessName[i];
break;
}
配程序执行之后的结果图
else
continue;
}
p.FreePartition[k]=p.FreePartition[k]-p.ProcessNeed[i];
p.state[i]=1;
}
return 0;
}
头文件Worst.h
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
int Worst() //最坏适应算法
{
for(i=0;i<m;i++)
{
temp=p.FreePartition[0];
k=0;
for(j=0;j<n;j++)
{
//按最坏适应算法找到合适的空闲分区
if((p.ProcessNeed[i] <= p.FreePartition[j]) && (temp < p.FreePartition[j]) && (!p.state[i]))
{
temp=p.FreePartition[j];
k=j;
}
else
continue;
}
for(d=0;d<3;d++) //记录作业分配
{
if(order[k][d]==NULL)
{
order[k][d]=p.ProcessName[i];
break;
}
else
continue;
}
p.FreePartition[k]=p.FreePartition[k]-p.ProcessNeed[i];
p.state[i]=1;
配程序执行之后的结果图
}
return 0;
}
主程序Main.cpp
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
#include<First.h>
#include<CycleFirst.h>
#include<Best.h>
#include<Worst.h>
int Option() //选择算法
{
int option;
printf("请选择算法:\n");
printf("0-退出\n");
printf("1-首次适应算法\n");
printf("2-循环首次适应算法\n");
printf("3-最佳适应算法\n");
printf("4-最坏适应算法\n");
printf("请输入你选择的算法的序号:\n");
scanf("%d",&option);
switch(option)
{
case 0:
printf("程序运行结束\n");
break;
case 1:
printf("对作业用首次适应算法进行空间分配:\n");
First();
Poutput();
break;
case 2:
printf("对作业用循环首次适应算法进行空间分配:\n"); CycleFirst();
Poutput();
break;
case 3:
printf("对作业用最佳适应算法进行空间分配:\n");
Best();
配程序执行之后的结果图
Poutput();
break;
case 4:
printf("对作业用最坏适应算法进行空间分配:\n");
Worst();
Poutput();
break;
default:
printf("********error!*****");
}
return 0;
}
int Poutput() //结果输出
{
Myprintf;
for(i=0;i<n;i++)
{
printf("|");
for(j=0;j<3;j++)
{
if(order[i][j]==' ')
printf(" ");
else
printf("%2c",order[i][j]);
}
}
printf("|\n");
Myprintf;
return 0;
}
void main() //主函数
{
Pinput();
Option();
}
【实例运行结果截图】
实例
配程序执行之后的结果图
下面依次是测试数据、First、CycleFirst、Best和Worst算法执行的截图:
配程序执行之后的结果图
正在阅读:
浅谈街道办事处与居民委员会的关系12-01
“一个成功企业家的困惑”案例参考答案09-01
贵州大学2010级计算机科学与技术专业培养方案 doc - 图文03-21
变电所二次部分说明书05-14
迈普路由器清除密码和配置12-01
第四章人格发展与教育06-11
基于层次分析法的电子商务项目建设绩效评估06-12
2019年四年级英语下册Unit8WhatCanYouDo第二课时教学设计陕旅版08-27
核医学试题库二11-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 运行图
- 实验
- 分区
- 算法
- 分配
- 操作系统
- 报告
- 动态
- 2019年高考物理一轮复习第十三章热学第2讲固体液体和气体练习【含答案】
- 行业研究报告-2017-2022年中国互联网+农业产业发展预测及投资咨询报告(目录)
- 核桃坪煤矿探放水孔设计及安全技术措施
- 台达PLC寄存器地址于Modbus寄存器地址对照表
- 阳光灿烂的日子
- 单片机试题库(有答案)
- 2014年二建法规真题及答案
- 菲仕伺服电机选型样本
- 信息、信息科学与信息技术
- 2020版英语大一轮复习讲义人教版(全国)话题晨背与阅读训练话题话题七 第二节
- 乒乓球团体、单项赛记分表
- M6 unit1 Does it eat meat教案06
- 烟包喷码字符识别系统研究
- 预防传染病教案
- 人力资源管理师二级知识点汇总
- 肯德基利润管理
- 伺服电机选型计算及案例(傻瓜式)
- 管理费用明细表
- 结构化学试题库
- 进口配额与自动出口限额案例分析