分区式存储管理实验报告.docx_第1页
分区式存储管理实验报告.docx_第2页
分区式存储管理实验报告.docx_第3页
分区式存储管理实验报告.docx_第4页
分区式存储管理实验报告.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统实验报告(四)分区式存储器管理 专 业:XXX 姓 名:XXX 班 级:XXX 学 号:XXX 指导老师:XXX 2013/12/3实验三:分区式存储器管理实验一实验目的模拟实现一个简单的固定(或可变)分区存储管理系统,进一步加深对分区分配方案设计思想的理解。二实验内容(1) 建立相关的数据结构,作业控制块、已分配分区及未分配分区;(2) 实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法;(3) 实现一个分区回收算法;(4) 给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理;(5) 将整个过程可视化显示出来。三实验步骤(1)任务分析:1、本实验虽然不以前面实验为基础,但建议在其界面中继续增加分区存储管理功能。2、数据结构:分区说明表,用数组实现。3、存储管理:建议采取固定分区法管理内存。编写内存分配、内存回收算法。 (2)程序设计:数据结构设计程序中自由链队列的结点类型可描述如下:structemptylistintlen, address;/len为分区长度;address为分区起始地址structemptylist *next;/下一个节点;内存占用区用链表描述,其结点类型描述如下:structbusylinkchar name;/进程名称intlen , address;/len为分区长度;address为分区起始地址structbusylink *next;/下一个节点;设全程量,设置一个自由链队列和一个占用区队列。structemptylist *empty_head=NULL; /自由链队列(带头结点)队首指针structbusylink *busy_head=NULL/占用区队列队(带头结点)首指针structbusylink*busy_tail=NULL;/ 占用区队列队尾指针 (3)程序结果:分配几个内存后,显示其内部的分配进程如下:其中进程S是系统默认分配的进程,内存长度为5.回收过2,4以后显示如下:(4)调试与测试四实验总结本次实验采用最佳适应算法来分配内存,然后分别输出未进行内存回收时和进行回收时,内存分配情况,进行对比。当然还有其他的分配算法,在以后的学习中,如果有时间的话,我会在好好的用其他的算法进行实验。五 附录#include #include#include#includeStruct emptylist in len, address;structemptylist *next;structbusylink char name;intlen , address;structbusylink *next;Struct mptylist *empty_head=NULL;struct busylink *busy_head=NULL, *busy_tail=NULL;voidinit() Struct emptylist * p;structbusylink *q;empty_head=(struct emptylist*)malloc(sizeof(struct emptylist);empty_head-next=NULL;busy_head=busy_tail=(struct busylink*)malloc(sizeof(structbusylink);busy_head-next=NULL; p=(structemptylist *)malloc(sizeof(structemptylist);p-address=64;p-len=1024-64;p-next=NULL; empty_head-next=p;q=(structbusylink *)malloc(sizeof(structbusylink);q-name=S;/默认系统内存q-len=64;q-address=0;q-next=NULL;busy_head-next=q;busy_tail=q;void require(char name, int require)/分配内存structemptylist *w,*u,*v,*x,*y;structbusylink *p;x=empty_head;y=empty_head-next;while(y!=NULL) & (y-lennext;if(y!=NULL)p=(structbusylink*)malloc(sizeof(busylink);p-name=name;p-address=y-address;p-len=require; p-next=NULL;busy_tail-next=p;busy_tail=p;w=x-next;x-next=w-next;if(w-len=require)free(w);elsew-address=w-address+require;w-len=w-len-require;u=empty_head;v=empty_head-next;while(v!=NULL) & (v-lenlen)/剩余内存按从小到大挂在空闲队列 u=v; v=v-next;u-next=w;w-next=v;else printf(不能分配内存!n);void recovery(char name)/内存回收structbusylink *p,*q;structemptylist *w,*u,*v,*s1=NULL,*s2=NULL;intlen,address;int flag1=1,flag2=1;p=busy_head-next;while(p!=NULL)&(p-name!=name)/找到要回收的结点 q=p;p=p-next;if(p=NULL)printf(作业%c不存在n,name);elseif(p=busy_tail) busy_tail=q;q-next=p-next;len=p-len;address=p-address;free(p);w=(structemptylist*) malloc(sizeof(emptylist);w-len=len;w-address=address;u=empty_head;v=empty_head-next;while(v!=NULL) & (flag1=1 | flag2=1)/归并算法if(w-address=(v-address+v-len) & flag1)/在v后面s1=v;u-next=s1-next;w-address=v-address;w-len+=v-len;v=v-next;flag1=0;else if(w-address+w-len)=v-address) & flag2)/在v前面s2=v;u-next=s2-next;w-len+=v-len;v=v-next;flag2=0;else/一直向后搜索 u=v;v=v-next;u=empty_head;v=empty_head-next;if(v!=NULL)while(v!=NULL) & (v-lenlen)/按从小到大挂在空闲队列 u=v; v=v-next;u-next=w;w-next=v;void show()structemptylist *p;p=empty_head-next;if(p=NULL)printf(无空闲区!n);elsewhile(p!=NULL)printf(首地址:%dt长度:%dn,p-address,p-len); p=p-next;printf(-nn);void show1()structbusylink *p;p=busy_head-next;if(p=NULL)printf(无内存占有区!n);elsewhile(p!=NULL)printf(名字:%ct首地址:%dt长度:%dn,p-name,p-address,p-len);p=p-next;printf(-n);int main()int choice;boolexitFlag=false;char name;int memory;init();while(!exitFlag)coutendl;cout1: 分配内存n;cout2: 回收内存n;cout3: 查看分配n;cout0: 退出n;cout请选择执行选项:choice;switch(choice)case 0:exitFlag=true; b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论