当前位置:文档之家› 分区内存管理实验报告

分区内存管理实验报告

c = getchar();
fflush(stdin);
if(c=='N'||c=='n')
{
break;
}
}
}
void initpart()
{
char c,name;
int len;
printf("请输入你的操作 R.请求内存;P.输出空闲分区; S. 强制进程结束;(N/n).退出\n");
fflush(stdin);
for (i=0;i<partl->sum;i++)
{
if (partl->Partelem[i].valid==0)
{
printf("第%d块空闲内存 起止为%d,容量为%d\n",i,partl->Partelem[i].address,partl->Partelem[i].len);
}
}
printf("------空闲分区 end---------\n");
while (i<partl->sum)
{
if (adress==partl->Partelem[i].address)
{
partl->Partelem[i].valid=0;
}
i++;
}
}
void getprint()
{
int i;
printf("------空闲分区begin---------\n");
partl->Partelem[i].len = len;
partl->Partelem[i].valid = 1;
//新的碎片
partl->Partelem[i+1].address = partl->Partelem[i].address+partl->Partelem[i].len;
partl->Partelem[i+1].len =temBylen;
printf("请输入进程所需内存");
scanf("%d",&tel);
pcbelem->len=tel;
pcbelem->address=adr+tel;
pcbelem->valid=1;
pcbelem++;
printf("是否要继续输入进程?(Y/y) 是/(N/n) 否");
fflush(stdin);
partl->Partelem[i+1].valid=0;
//更新pcb的状态和容量
pcbl->PCBelem[temByPcb].address = partl->Partelem[i].address;
pcbl->PCBelem[temByPcb].len = pcbl->PCBelem[temByPcb].len-len ;//更新pcb的len
partl->Partelem[leng].len = partl->Partelem[leng-1].len;
partl->Partelem[leng].valid = partl->Partelem[leng-1].valid;
leng--;
}
partl->sum++;
}
int findBylen(int len)
fflush(stdin);
tem = getchar();
if(tem=Biblioteka 'Y'){fflush(stdin); //做输入的时候要清空缓冲区
printf("请输入请求内存进程的名称,长度");
scanf("%c,%d",&name,&len);
if (len>pcbl->PCBelem[temByPcb].len){
c= getchar();
fflush(stdin);
while(c!='N'||c!='n')
{
if(c=='R'||c=='r')
{
fflush(stdin); //做输入的时候要清空缓冲区
printf("请输入请求内存进程的名称,长度");
scanf("%c,%d",&name,&len);
request(name,len); //进程请求内存
{
int i=0;
while(i<partl->sum)
{
if (partl->Partelem[i].valid==0)
{
if (len<=partl->Partelem[i].len)
{
return i;
}
}
i++;
}
return 0;
}
void request(char name,int len)
}
void main()
{
char tem;
int k,OSsize = 40;
tem = tem>0?(tem<length?tem:length):0;
newPart->address = 0;
newPart->len = tem ;
newPart->valid = 1;
partl->sum++;
printf("------->已为操作系统分配了%d kb内存\n",tem);
newPart = &partl->Partelem[1];
newPart->address = tem ;
length=tem = length -tem;
tem = tem<0?(0):tem;
newPart->len = tem ;
newPart->valid = 0;
partl->sum++;
void initPcb(PCBseql* vpcbl,int adr)
{
int i=1;
PCB *pcbelem;
int tel;
char c;
pcbelem=vpcbl->PCBelem;
while(TRUE)
{
printf("请输入第%d进程名称",i++);
vpcbl->total++;
scanf("%c",&(pcbelem->name));
typedef struct
{
int address,len,valid;
}Part;
typedef struct
{
Part Partelem[maxPart];
int sum; //该时刻的分区数
}Partseql;
void initPcb(PCBseql* vpcbl,int iosm); //初始化进程表vpcbl;
洛阳理工学院实验报告
系别
计算机与信息工程系
班级
B100503
学号
B10050309
姓名
赵贺龙
课程名称
计算机操作系统
实验日期
2012-11-1
实验名称
分区内存管理
成绩
实验目的:
通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。
实验条件:
装有vc6.0的微机一台。
实验原理:
设计程序模拟内存的动态分区内存管理方法。内存空闲区使用分区(说明)表进行管理,采用最先适应算法从分区表中寻找空闲区进行分配,内存回收时不考虑与相邻空闲区的合并。
}
else if(c=='P'||c=='p')
{
printf("\t*****VIEW begin*****\n");
getprint();
printf("\t*****VIEW end *****\n");
}
else if(c=='S'||c=='s')
{
printf("请输入想要回收的进程名称\n");
{
printf("%c还没有运行,请先运行\n",name);
}
printf("现在正回收%c的内存\n",name);
adress = pcbl->PCBelem[getTagByPcb(name)].address;
len = pcbl->PCBelem[getTagByPcb(name)].len;
typedef struct
{
char name; //进程名
int address,len,valid;//进程所占分区起止和长度,
//该PCB有效标示 1有效,0无效。
}PCB;
typedef struct
{
PCB PCBelem[maxPCB];
int total;
}PCBseql;
//分区类型及分区说明表(顺序表)的描述
#include "link.h"
#include<Windows.h>
int length = 640 ;//系统有640 的空闲
相关主题