实验3内存管理空闲分区表概要

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("|---3、项目完成创建新的空闲分区------|\n");
printf("|---4、申请空闲分区------------------|\n");
printf("|---5、查看分区表--------------------|\n");
printf("|---6、查看作业表--------------------|\n");
for(int j = i+1;j<NUM-1;j++)
f[j]=f[j+1];
f[NUM-1]= add_empty_form();
i--;
printf("成功合并空表单\n");
}
}
}
void Add_form(form *f,work *w){//作业完成,归还空间,创建新的空闲分区
form temp;
}
void merge(form *f){//合并相邻的空表单
sort_forms1(f);
for(int i = 0; i < NUM;i++)
{
if(f[i].startaddress +f[i].size ==f[i+1].startaddress && f[i+1].size !=0)
{
f[i].size =f[i].size +f[i+1].size ;
printf("内存管理系统\n");
printf("--------------------------------------\n");
printf("|---1、创建新的空表------------------|\n");
printf("|---2、创建新的作业序列--------------|\n");
printf("--------------------------------------\n");
printf("返回请按0请输入您的选择:");
}
void main(){//主函数
manu();
int option;
scanf("%d",&option);
while(1)
{
switch(option)
form temp;
for( int i = 0;i < NUM; i++)
{
for(int j = 0;j < NUM-i-1;j++)
{
if(f[j].startaddress > f[j+1].startaddress )
{
temp=f[j];
f[j]=f[j+1];
f[j+1]=temp;
}
f[j].startaddress = f[j].startaddress + w[k].size ;
f[j].size =f[j].size -w[k].size ;
break;
}
}
}
}
showallforms(f);
showallwork(w);
printf("作业申请空间完成\n");
}
void manu(){//菜单
int size;//长度
char state;//状态r代表未分配,e表示空表单
};
struct work{//作业表单
int id;//作业号
int size;//申请空间大小
int from;//起址
char state;//作业状态,r表示就绪,d表示正在运作,o表示作业完成
};
void showallwork(work *w){//展示所有作业情况
f[i]=temp;
break;
}
}
merge(f);
showallforms(f);
printf("作业完成,归还空间\n");
}
void apply_form(form *f,work *w){//
sort_forms2(f);
showallforms(f);
int i;
printf("请输入作业号");
{
printf("%4d %8dk %8dk%6c\n",w[i].id ,w[i].size ,w[i].from ,w[i].state );
}
printf("----------------------------------\n");
printf("《r表示就绪状态,d表示正在执行,o表示完成》");
case 5: showallforms(f);break;
case 6: showallwork(w); break;
default: break;
}
manu();
scanf("%d",&option);
if(!(option==1||option==2||option==3||option==4||option==5||option==6))
if(w[i].from )
w[i].state = 'd';
else
w[i].state = 'r';
printf("------------------------作业《%d》已经创建\n",w[i].id );
}
showallwork(w);
printf("初始化作业完成\n");
printf("\n");
{
printf("\n");
printf("\n");
case 1: form f[NUM]; Init_forms(f);break;
case 2: work w[4]; Init_work(w);break;
case 3: Add_form(f,w);break;
case 4: apply_form(f,w);break;
for(int i=0;i<NUM&&f[i].state;i++)
{
if(f[i].size)
printf("%3d %8dk%8dk %6c\n",i+1,f[i].startaddress,f[i].size,f[i].state);
}
printf("--------------------------------\n");
break;
}
}
4、打印程序运行时的初值和运行结果,要求如下:
【1】打印空闲区说明表的初始状态
【2】创建空闲分区
【3】作业4的申请量以及为作业4分配后的空闲区说明表状态;
【4】再依次打印作业3和作业2的归还量以及回收作业3,作业2所占主存后的空闲区说明表。
【5】打印作业情况
【6】回收作业1、4
【7】查看作业完成情况
w[j].from = -1;
w[j].state = 'o';
break;
}
}
for(int i = 0; i<NUM ; i++)
{
if(f[i].startaddress > temp.startaddress)
{
for(int j = NUM-1; j > i; j--)
f[j]=f[j-1];
printf("\n");
}
void Init_forms(form *f){//初始化表单
printf("请输入起址长度:\n");
for(int i=0,j=1;i<NUM;i++)
{
if(j)
{
printf("表%d\n",i+1);
scanf("%dk%dk",&f[i].startaddress,&f[i].size);
f[j+1]=temp;
}
}
}
}
void showallforms(form *f){//展示所有空表
sort_forms1(f);
printf("以下是空闲分区表状态:\n");
printf("--------------------------------\n");
printf("序号起址长度状态\n");
f[i].state = 'r';
printf("继续请按序号,完成请按0\n");
scanf("%d",&j);
printf("请输入起址长度\n");
}
else
{
f[i].startaddress = 10000;
f[i].size = 0;
f[i].state = 'e';
}
}
}
void sort_forms1(form *f){//按地址大小排序表单
scanf("%d",&i);
for(int k = 0;k < 4 ;k++)
{
if(w[k].id ==i)
{
w[k].state = 'd';
for(int j = 0 ;j<NUM ;j++)
{
if(f[j].size > w[k].size )
{
w[k].from = f[j].startaddress ;
南京信息工程大学实验(实习)报告
实验(实习)名称实验3内存管理日期14.5.30得分指导教师
系计软院专业软件工程年级班次姓名学号
实验3内存管理
1、程序中使用的数据结构及符号说明。
struct form{//空闲分区表单
int startaddress;//起址
int size;//长度
char state;//状态r代表未分配,e表示空表单
printf("请输入完成的作业序号:");
int n;
scanfwk.baidu.com"%d",&n);
for(int j = 0; j<4;j++)
{
if(w[j].id ==n)
{
temp.startaddress = w[j].from ;
temp.size = w[j].size ;
temp.state = 'r';
};
struct work{//作业表单
int id;//作业号
int size;//申请空间大小
int from;//起址,正在执行的程序的起址,就绪程序为0k,完成程序为-1k
char state;//作业状态,r表示就绪,d表示正在运作,o表示作业完成
};
2、作业流程
【1】创建作业表
【2】创建空闲分区表
}
}
}
void sort_forms2(form *f){//按空间大小排序表单
form temp;
for( int i = 0;i < NUM; i++)
{
for(int j = 0;j < NUM-i-1;j++)
{
if(f[j].size > f[j+1].size )
{
temp=f[j];
f[j]=f[j+1];
printf("\n");
printf("\n");
}
void Init_work(work *w){//初始化作业
printf("请输入作业号所需空间起始地址(0表示地址未分配): \n");
for(int i =0 ; i<4 ;i++)
{
printf(" ");
scanf("%d%dk%dk",&w[i].id,&w[i].size,&w[i].from);
printf("以下是所有作业情况:\n");
printf("----------------------------------\n");
printf("作业号所需空间大小起始地址状态\n");
printf("----------------------------------\n");
for(int i = 0 ;i < 4;i++)
printf("《r表示未分配,e表示空表目显示》");
printf("\n");
printf("\n");
}
form add_empty_form(){//在末尾加空表单
form f;
f.startaddress = 10000;
f.size = 0;
f.state = 'e';
return f;
【3】为作业4申请空闲分区
【4】回收作业2、3的申请量
【5】打印作业完成情况
【6】回收作业1、4的申请量
【7】打印作业完成情况
3、打印一份源程序并附上注释。
#include<stdio.h>
#define NUM 10//表单长度
struct form{//空闲分区表单
int startaddress;//起址
相关文档
最新文档