存储管理实验.

上传人:我** 文档编号:115283648 上传时间:2019-11-13 格式:DOC 页数:30 大小:224.50KB
返回 下载 相关 举报
存储管理实验._第1页
第1页 / 共30页
存储管理实验._第2页
第2页 / 共30页
存储管理实验._第3页
第3页 / 共30页
存储管理实验._第4页
第4页 / 共30页
存储管理实验._第5页
第5页 / 共30页
点击查看更多>>
资源描述

《存储管理实验.》由会员分享,可在线阅读,更多相关《存储管理实验.(30页珍藏版)》请在金锄头文库上搜索。

1、实验三 存储管理实验一.目的要求: 1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二. 实验题: 1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。程序代码:#include #include #include#include#define NUM 4#define alloMemor

2、y(type) (type*)malloc(sizeof(type)struct partiTab int no; int size; int firstAddr; char state; parTabNUM;typedef struct partiTab PARTITAB;typedef struct jcb /*定义作业控制块JCB ,部分信息省略*/ char name10; /作业名 int size;/作业大小 struct jcb* link; /链指针 JCB;typedef struct JCB *front,*rear; jcbQue;jcbQue *jcbReadyQue;

3、void AllocateMemory(int size);void createTab();void checkTab();void recycleMemory(int i);void AllocateMemory(int size) int i; for( i=0; isize) parTabi.state=Y; else printf(没有空闲分区,无法分配内存!n); void createTab() int i; for( i=1; i=NUM; i+) /getPartiTab(PARTITAB); parTabi-1.no=i; parTabi-1.size=20; parTab

4、i-1.firstAddr=21; parTabi-1.state=N; void checkTab() int i; printf(分区号t大小t起址t状态n); for( i=0; iNUM; i+) printf(%dt,parTabi.no); printf(%dt,parTabi.size); printf(%dt,parTabi.firstAddr); printf(%ct,parTabi.state); printf(n); void recycleMemory(int i) parTabi-1.state=N;int main(int argc, char* argv) int

5、 i; createTab(); checkTab(); printf(请按任意键继续:n); getchar(); printf(每个分区装入一道作业:n); for( i=0; iNUM; i+) AllocateMemory(i+1)*3); checkTab(); printf(请按任意键继续:n); getchar(); printf(假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)n); recycleMemory(2); checkTab(); printf(请按任意键继续:n); getchar(); printf(接着,从外存后备作业队列中选择一个

6、作业装入该分区(假如该作业大小为10)n); AllocateMemory(10); checkTab(); return 0;运行结果:2、设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 #include#include#define Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define MAX_length 640 /最大内存空间为640KBusing namespace std;typedef int Status;typedef struct freearea/定义一

7、个空闲区说明表结构 int ID; /分区号 long size; /分区大小 long address; /分区地址 int state; /状态 ElemType;/- 线性表的双向链表存储结构 -typedef struct DuLNode /double linked list ElemType data; struct DuLNode *prior; /前趋指针 struct DuLNode *next; /后继指针 DuLNode,*DuLinkList;DuLinkList block_first; /头结点DuLinkList block_last; /尾结点Status al

8、loc(int);/内存分配Status free(int); /内存回收Status First_fit(int,int);/首次适应算法Status Best_fit(int,int); /最佳适应算法void show();/查看分配Status Initblock();/开创空间表Status Initblock()/开创带头结点的内存空间链表 block_first=(DuLinkList)malloc(sizeof(DuLNode); block_last=(DuLinkList)malloc(sizeof(DuLNode); block_first-prior=NULL; blo

9、ck_first-next=block_last; block_last-prior=block_first; block_last-next=NULL; block_last-data.address=0; block_last-data.size=MAX_length; block_last-data.ID=0; block_last-data.state=Free; return OK;/- 分 配 主 存 -Status alloc(int ch) int ID,request; coutID; coutrequest; if(request0 |request=0) cout分配大小

10、不合适,请重试!endl; return ERROR; if(ch=2) /选择最佳适应算法 if(Best_fit(ID,request)=OK) cout分配成功!endl; else cout内存不足,分配失败!endl; return OK; else /默认首次适应算法 if(First_fit(ID,request)=OK) cout分配成功!endl; else cout内存不足,分配失败!data.ID=ID; temp-data.size=request; temp-data.state=Busy; DuLNode *p=block_first-next; while(p) if(p-data.state=Free & p-data.size=request) /有大小恰好合适的空闲块 p-data.state=Busy; p-data.ID=ID; return OK; break; if(p-data.state=Free & p-data.sizerequest) /有空闲块能满足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.address=p-data.address; p-prior-next=temp;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号