目录
1、实验目的
(1)加深理解内存的分配与回收,分配与回收的策略、地址映射、内存保护等概念。
2、实验内容
设计一个模拟内存管理中采用“动态分区”方式的存储器管理程序,实现以下操作:
(1)以链接存储结构建立内存分配表、内存空闲表并进行初始化;
(2)动态申请一段内存,对该段内存进行“动态分区”方式的管理,选择最先适配算法进行分配;
(3)创建3个进程并装入内存,撤销第2个进程(释放内存);
(4)输出当前“内存”的使用情况。
3、算法设计
#include <iostream>
using namespace std;
#define MAX 100
void allocationMB(int pcbID, int memLen);
typedef struct MemoryBlock
{
int mpID; //编号,空闲分区存储分区编号,已用分区存储进程编号
int startAddr; //起始地址
int length; //长度 最大100
struct MemoryBlock *next;
}MB;
MB *inuse, *unused;
typedef struct PCBNode
{
int pcbID; //PCB 编号
char name[10]; //PCB 名称
int status; //PCB 状态,0-就绪,1-运行,-1-阻塞
int rt; //PCB 运行时间
int memLen; //所需内存大小 0 <= memlen <= 100
struct PCBNode *next;
}PCB;
void init()
{
MB *s;
s = new(MB);
s->length = 0;
s->startAddr = 0;
s->next = NULL;
inuse = s;
s = new(MB);
s->length = 100;
s->startAddr = 0;
s->next = NULL;
unused = s;
PCB *p;
p = new(PCB);
p->next = NULL;
first = p;
}
int count = 1;
int i = 0;
//新建进程
void newProcess(int menLen)
{
PCB *s;
s = new(PCB); //创建 PCB 并进入就绪队列
s->pcbID = count;
s->memLen = menLen;
allocationMB(s->pcbID,s->memLen); //申请内存
count++;
return;
}
void allocationMB(int pcbID, int memLen)
{
MB *p = unused;
while(p != NULL) {
if(p->length >= memLen) {
MB *q = inuse;
while(