文档介绍:洛阳理工学院试验汇报
系别
计算机和信息工程系
班级
B100503
学号
B10050309
姓名
赵贺龙
课程名称
计算机操作系统
试验日期
-11-1
试验名称
分区内存管理
成绩
试验目标:
经过这次试验,加深对内存管理认识,深入掌握内存分配、回收算法思想。
试验条件:
。
试验原理:
设计程序模拟内存动态分区内存管理方法。内存空闲区使用分区(说明)表进行管理,采取最先适应算法从分区表中寻求空闲区进行分配,内存回收时不考虑和相邻空闲区合并。
假定系统内存共640K,初始状态为操作系统本身占用40K。t1时刻,为作业A、B、C分配80K、60K、100K、内存空间;t2时刻作业B完成;t3时刻为作业D分配50K内存空间;t4时刻作业C、A完成;t5时刻作业D完成。要求编程序分别输出t1、t2、t3、t4、t5时刻内存空闲分区。
试验内容:
源代码:包含 ,
#include ""
#include ""
//进程Pcb类型及系统PCB表(次序表)描述
#define maxPCB 15
#define maxPart 10
#define TRUE 1
typedef struct
{
char name; //进程名
int address,len,valid;//进程所占分区起止和长度,
//该PCB有效标示 1有效,0无效。
}PCB;
typedef struct
{
PCB PCBelem[maxPCB];
int total;
}PCBseql;
//分区类型及分区说明表(次序表)描述
typedef struct
{
int address,len,valid;
}Part;
typedef struct
{
Part Partelem[maxPart];
int sum; //该时刻分区数
}Partseql;
void initPcb(PCBseql* vpcbl,int iosm); //初始化进程表vpcbl;
void initpart(); //初始化分区表vpartl;
void request(char name,int len); //进程name请求len大小内存
void release(char name); //回收进程name所占空间
void getprint(); //输出内存空闲分区
主程序:
#include ""
#include<>
int length = 640 ;//系统有640 空闲
PCBseql *pcbl = (PCBseql*)malloc(sizeof(PCBseql)); ;
Partseql *partl = (Partseql*)malloc(sizeof(Partseql));
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));
printf("请输入进程所需内存");
scanf("%d",&tel);
pcbelem->len=tel;
pcbelem->address=adr+tel;
pcbelem->valid=1;
pcbelem++;
printf("是否要继续输入进程?(Y/y) 是/(N/n) 否");
fflush(stdin);
c = getchar();
fflush(stdin);
if(c=='N'||c=='n')
{
break;
}
}
}
void initpart()
{
char c,name;
int len;
printf("请输入你