实验二存储器分配与回收.doc

上传人:叶*** 文档编号:35107074 上传时间:2022-08-20 格式:DOC 页数:7 大小:26.50KB
返回 下载 相关 举报
实验二存储器分配与回收.doc_第1页
第1页 / 共7页
实验二存储器分配与回收.doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《实验二存储器分配与回收.doc》由会员分享,可在线阅读,更多相关《实验二存储器分配与回收.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验内容:1. 模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。2. 采用最先适应法、最佳适应法、最坏适应法分配主存空间。3. 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4. 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5. 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构

2、及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 实验代码如下:#include int work102; /作业名字 大小 int idle102; /空闲区大小 地址 int free103; /已分配区域的名字 地址 大小 int num=0,b=1,d,ch1,ch2; void init() idle00=1;idle0

3、1=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(); fo

4、r(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;

5、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

6、 =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; idl

7、ej+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; idlen

8、1=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 i

9、dlej1) 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; voi

10、d 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(); cout 输入要回收的作业名: n; huishou(n); 实验截图: 成功回收时: 回收失败时:

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

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁