预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验二主存储器空间的分配和回收 实验内容 主存储器空间的分配和回收。 实验目的 计算机系统不仅要有足够容量、存储速度高、稳定可靠的主存储器,而且要能合理的分配和使用者且存储空间。主存的分配和回收的实现是与主存储器的管理方式有关的.本实验有助于了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 实验题目 在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。 数据结构 structBlock//空闲链结构体 { stringname;//作业名 intaddress;//分区首地址 intsize;//分区大小 intstate;//分区转态 structBlock*next;//前向指针 structBlock*front;//后向指针 }; ——构造一个空闲链 structUsed//已分配分区结构体 { Block*usedArea; Used*next; }; ——分配分区结构体 voidAllocate(stringreqName,intreqSize)//分配函数 { Block*p=freeHead-〉front; Used*r1,*r2; while(p!=NULL) { if(reqSize〈p—〉size)//如果请求的分区的大小小于一个空闲分区的大小 { Used*temp=newUsed; temp—>usedArea=p; Block*q=newBlock; *q=*p; temp—〉usedArea—>name=reqName; temp—〉usedArea—〉size=reqSize; temp-〉usedArea-〉front=q; temp—〉usedArea—〉state=1; q-〉size=q->size-reqSize; q—〉address=q—>address+reqSize; q—>next—〉front=q; if(q—〉front!=NULL) q—〉front—>next=q; r1=usedHead; r2=usedHead—>next; while(r2!=NULL&&r2—>usedArea—〉address<temp—>usedArea—〉address) {r1=r2;r2=r2—〉next;} r1—〉next=temp; temp—〉next=r2; break; } elseif(reqSize==p->size)//如果请求的分区的大小等于一个空闲分区的大小 { Used*temp=newUsed; temp-〉usedArea=p; temp-〉usedArea—>name=reqName; temp—>usedArea—〉state=1; p—>next—〉front=p—〉front; if(p-〉front!=NULL) p-〉front-〉next=p—〉next; r1=usedHead; r2=usedHead->next; while(r2!=NULL&&r2-〉usedArea—>address〈temp->usedArea-〉address) {r1=r2;r2=r2-〉next;} r1->next=temp; temp-〉next=r2; break; } p=p—>front; } —-构建一个链表,实现内存分配。 5、源程序 #include〈iostream> #include<string〉 usingnamespacestd; structBlock//空闲链结构体 { stringname;//作业名 intaddress;//分区首地址 intsize;//分区大小 intstate;//分区转态 structBlock*next;//前向指针 structBlock*front;//后向指针 }; structUsed//已分配分区结构体 { Block*usedArea; Used*next; }; Block*freeHead;//带表头附加节点的空闲链头指针 Used*usedHead;//带表头附加结点的已分配分区头指针 boolInitValue()//初始化函数 { cout<〈"本程序设立的操作功能:1-申请资源2—释放资源3-打印信息"〈〈endl; freeHead=newBlock; freeHead—>size=0; freeHead-〉next=NULL; freeHead—>state=1; usedHead=newUsed; Block*p=newBlock; p—〉address=0; usedHead-〉usedArea=p; usedHead—〉next=NULL; Block*temp=newBlock; cout〈〈"请先输入主存大小(k):”<〈endl