实验三 基本存储器管理-存储器的分配与回收算法实现.doc_第1页
实验三 基本存储器管理-存储器的分配与回收算法实现.doc_第2页
实验三 基本存储器管理-存储器的分配与回收算法实现.doc_第3页
实验三 基本存储器管理-存储器的分配与回收算法实现.doc_第4页
实验三 基本存储器管理-存储器的分配与回收算法实现.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

实验三 基本存储器管理-存储器的分配与回收算法实验名称:存储器的分配与回收算法实验仪器、设备:计算机参考资料:操作系统实验指导书实验目的:设计一个存储器的分配与回收算法管理方案,并编写模拟程序实现。实验内容:1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。实验过程记录(源程序、测试用例、测试结果及心得体会等 实验代码如下:#include int work102; /作业名字 大小 int idle102; /空闲区地址 大小 int free103; /已分配区域的名字 地址 大小 int num=0,b=1,d,ch1,ch2; void init() idle00=1;idle01=100; free00=0;free11=0;free12=0; work00=0;work01=0; for(int i=1;i =9;i+) /初始化数组 idlei0=0;idlei1=0; freei0=0;freei1=0;freei2=0; worki0=0;worki1=0; void jishu() /求空闲单元数 for(int i=0;i 9;i+) if(idlei1!=0) num+; void jishu1() /求作业数 for(int i=0;i 9;i+) if(worki1!=0) b+; void zuixian() /最先适应法 jishu(); for(int i=0;i num;i+) for(int j=i;j idlej+10) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; void zuijia() /最佳适应法 num=0; jishu(); for(int i=0;i num;i+) for(int j=i;j idlej+11) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; void zuihuai() /最坏适应法 num=0; jishu(); for(int i=0;i num;i+) for(int j=i;j num-i-1;j+) if(idlej1 idlej+11) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; void huishou(int name) /回收进程函数 num=0; b=0; jishu(); jishu1(); int c=-1; for(int k=0;k =b;k+) if(freek0=name) c=k; break; if(c=-1)cout 要回收的作业不存在! endl; else for(int i=0;i num;i+) /将空闲单元排序不包括新回收的 for(int j=i;j idlej+10) int temp=idlej0; idlej0=idlej+10; idlej+10=temp; temp=idlej1; idlej1=idlej+11; idlej+11=temp; for(int q=0;q num;q+) /将空单元排序包括新回收的 if(freec1 =q;j-) idlej+10=idlej0; idlej+11=idlej1; idlej0=freec1; idlej1=freec2; b+; if(idlej+10=idlej0+idlej1) idlej1=idlej1+idlej+11; for(int m=j+1;m =num;m+) idlem0=idlem+10; idlem1=idlem+11; idlem0=0; idlem1=0; b-; if(idlej-10=idlej0) idlej-11=idlej-11+idlej1; for(int n=j;j =num;j+) idlen0=idlen+10; idlen1=idlen+11; idlen0=0; idlen1=0; b-; break; if(ch2=1)zuixian(); if(ch2=2)zuijia(); if(ch2=3)zuihuai(); for(int p=c;c b-1;c+) freec0=freec+10; freec1=freec+11; freec2=freec+12; workc0=workc+10; workc1=workc+11; cout该进程已被成功回收!endl; void fp() int tag=0; /判断空闲区与请求区大小 num=0; b=0; jishu(); jishu1(); for(int j=0;j num;j+) if(workb1 idlej1) freeb0=workb0; freeb1=idlej0; freeb2=workb1; idlej0=idlej0+workb1; idlej1=idlej1-workb1; tag=1; break; else if(workb1=idlej1) freeb0=workb0; freeb1=idlej0; freeb2=workb1; tag=1; for(int i=j;i =num-1;i+) idlei0=idlei+10; idlei1=idlei+11; break; else tag=0; if(tag=0)cout 作业过大没有足够存储空间! endl; void print() num=0; b=1; jishu(); jishu1(); cout 已分配表为: endl; for(int i=0;i =b;i+) if(freei2!=0) cout 作业名: freei0 内存起始地址: freei1 占用内存空间: freei2 endl; cout endl; cout 空闲区表为: endl; for(int j=0;j num;j+) if(idlej1!=0) cout 起始地址: idlej0 连续内存空间: idlej1 endl; cout endl; void main() /主函数运行上面定义的函数 init(); int n; cout 1.分配空间;2.回收空间; ch1; cout endl; cout 1.最先适应法;2.最佳适应法;3.最坏适应法; ch2; cout endl; if(ch1=1) cout workb0workb1; cout endl; if(ch2=1) zuixian(); fp(); else if(ch2=2) zuijia(); fp(); else if(ch2=3) zuihuai(); fp(); print

温馨提示

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

评论

0/150

提交评论