<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/6274cb64f0a4f84830ec07af/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6274cb64f0a4f84830ec07af/bg1.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x1 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">动态分区主存的分配和回收</div><div class="t m0 x2 h4 y3 ff1 fs1 fc0 sc0 ls0 ws0">实验报告</div><div class="t m0 x2 h5 y4 ff1 fs2 fc0 sc0 ls0 ws0">一、<span class="_ _0"></span>小组成员</div><div class="t m0 x3 h5 y5 ff1 fs2 fc0 sc1 ls0 ws0">张炜<span class="ff2">(33)</span>、王飞<span class="ff2">(37)</span>、冯平<span class="ff2">(25)</span>、赵建伟<span class="ff2">(26) </span></div><div class="t m0 x2 h5 y6 ff1 fs2 fc0 sc0 ls0 ws0">二、实验名称</div><div class="t m0 x3 h5 y7 ff1 fs2 fc0 sc1 ls0 ws0">动态分区主存的分配和回收</div><div class="t m0 x2 h5 y8 ff1 fs2 fc0 sc0 ls0 ws0">三、实验内容和目的</div><div class="t m0 x3 h5 y9 ff1 fs2 fc0 sc1 ls0 ws0">动态分区方式主存的分配和回收。<span class="ff2"> </span>通过本实验帮助学生理解在动态分区管理方式下应</div><div class="t m0 x3 h5 ya ff1 fs2 fc0 sc1 ls0 ws0">怎样实现主存空间的分配和回收。</div><div class="t m0 x2 h5 yb ff1 fs2 fc0 sc0 ls0 ws0">四、动态分区主存的分配和回收设计思想</div><div class="t m0 x3 h5 yc ff1 fs2 fc0 sc1 ls0 ws0">(<span class="ff2">1</span>)可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,</div><div class="t m0 x4 h5 yd ff1 fs2 fc0 sc1 ls0 ws0">根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个</div><div class="t m0 x4 h5 ye ff1 fs2 fc0 sc1 ls0 ws0">分区分配给该作业;若无则作业不能装入。随着作业的装入、撤离、主存空间被</div><div class="t m0 x4 h5 yf ff1 fs2 fc0 sc1 ls0 ws0">分成许多个分区,有的分区被作业占用,有的分区空闲。</div><div class="t m0 x2 h5 y10 ff1 fs2 fc0 sc1 ls0 ws0">为了说明<span class="_ _1"> </span>哪些区是空闲的,可以用来装入新作业,必须要有一</div><div class="t m0 x2 h5 y11 ff1 fs2 fc0 sc1 ls0 ws0">张空区说明表,<span class="_ _2"> </span>格式如下:</div><div class="t m0 x3 h5 y12 ff1 fs2 fc0 sc1 ls0 ws0">其中,起址:指出一个空闲区的主存起始地址</div><div class="t m0 x3 h5 y13 ff1 fs2 fc0 sc1 ls0 ws0">长度:指出从起始地址开始的一个连续空闲区的长度</div><div class="t m0 x3 h5 y14 ff1 fs2 fc0 sc1 ls0 ws0">状态:有两种状态,一种是<span class="_ _3"></span>“未分配”状态,指出对应的由起址指出的某个<span class="_ _0"></span><span class="ff2"> </span>长度的区域</div><div class="t m0 x3 h5 y15 ff1 fs2 fc0 sc1 ls0 ws0">是<span class="_ _3"></span>空闲<span class="_ _3"></span>区;<span class="_ _3"></span>另一<span class="_ _3"></span>种<span class="_ _3"></span>是<span class="_ _3"></span>“空<span class="_ _3"></span>表目<span class="_ _3"></span>”<span class="_ _3"></span>状态<span class="_ _3"></span>,<span class="_ _3"></span>表示<span class="_ _3"></span>表中<span class="_ _3"></span>对<span class="_ _3"></span>应的<span class="_ _3"></span>登记<span class="_ _3"></span>项<span class="_ _3"></span>目是<span class="_ _3"></span>空白<span class="_ _3"></span>(<span class="_ _3"></span>无效<span class="_ _3"></span>)<span class="_ _3"></span>,可<span class="_ _3"></span>用</div><div class="t m0 x3 h5 y16 ff1 fs2 fc0 sc1 ls0 ws0">来登记新的<span class="_ _3"></span>空闲区(例如,作<span class="_ _3"></span>业撤离后,它所占用的<span class="_ _3"></span>区域就成了空闲区<span class="_ _3"></span>,应找一个<span class="_ _0"></span>“空</div><div class="t m0 x3 h5 y17 ff1 fs2 fc0 sc1 ls0 ws0">表目”栏登<span class="_ _3"></span>记归还区的起址和<span class="_ _3"></span>长度且修改状态)<span class="_ _3"></span>。由于分区的个数不定<span class="_ _3"></span>,所以空闲区说</div></div><div class="t m0 x5 h6 y18 ff2 fs2 fc0 sc1 ls0 ws0">0 </div><div class="t m0 x6 h6 y19 ff2 fs2 fc0 sc1 ls0 ws0"> 5k</div><div class="t m0 x6 h6 y1a ff2 fs2 fc0 sc1 ls0 ws0"> 10k</div><div class="t m0 x6 h6 y1b ff2 fs2 fc0 sc1 ls0 ws0">14k</div><div class="t m0 x6 h6 y1c ff2 fs2 fc0 sc1 ls0 ws0">26k</div><div class="t m0 x6 h6 y1d ff2 fs2 fc0 sc1 ls0 ws0">32k</div><div class="t m0 x6 h6 y1e ff2 fs2 fc0 sc1 ls0 ws0">128k</div><div class="t m0 x7 h5 y1f ff1 fs2 fc0 sc1 ls0 ws0">操作系统</div><div class="t m0 x8 h5 y20 ff1 fs2 fc0 sc1 ls0 ws0">作业<span class="_ _4"> </span><span class="ff2">1</span></div><div class="t m0 x8 h5 y21 ff1 fs2 fc0 sc1 ls0 ws0">作业<span class="_ _4"> </span><span class="ff2">3</span></div><div class="t m0 x8 h5 y22 ff1 fs2 fc0 sc1 ls0 ws0">空闲区</div><div class="t m0 x8 h5 y23 ff1 fs2 fc0 sc1 ls0 ws0">作业<span class="_ _4"> </span><span class="ff2">2</span></div><div class="t m0 x8 h5 y24 ff1 fs2 fc0 sc1 ls0 ws0">空闲区</div><div class="t m0 x9 h5 y25 ff1 fs2 fc0 sc1 ls0 ws0">起址<span class="_ _5"> </span>长度<span class="_ _6"> </span>状态</div><div class="t m0 x9 h6 y26 ff2 fs2 fc0 sc1 ls0 ws0">14k<span class="_ _7"> </span>12k</div><div class="t m0 xa h5 y27 ff1 fs2 fc0 sc1 ls0 ws0">未分配</div><div class="t m0 x9 h6 y28 ff2 fs2 fc0 sc1 ls0 ws0">32k<span class="_ _7"> </span>96k</div><div class="t m0 xa h5 y29 ff1 fs2 fc0 sc1 ls0 ws0">未分配</div><div class="t m0 xa h5 y2a ff1 fs2 fc0 sc1 ls0 ws0">空表目</div><div class="t m0 xa h5 y2b ff1 fs2 fc0 sc1 ls0 ws0">空表目</div></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6274cb64f0a4f84830ec07af/bg2.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x3 h5 y2c ff1 fs2 fc0 sc1 ls0 ws0">明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。</div><div class="t m0 x2 h5 y2d ff1 fs2 fc0 sc1 ls0 ws0">(<span class="ff2">2</span>)当有一个新作业要求装入主存时,必须查找空闲说明表,从中找出一个足够大的空闲</div><div class="t m0 x3 h5 y2e ff1 fs2 fc0 sc1 ls0 ws0">区。有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区分成两部分:一</div><div class="t m0 x3 h5 y2f ff1 fs2 fc0 sc1 ls0 ws0">部分分给作业占用;另一部分又成为一个较小的空闲区。为了尽量减少由于分割造成</div><div class="t m0 x3 h5 y4 ff1 fs2 fc0 sc1 ls0 ws0">的“碎片”<span class="ff2">,</span>在作业请求装入时,尽可能利用主存的低地址部分的空闲区,而尽量保存高</div><div class="t m0 x3 h5 y5 ff1 fs2 fc0 sc1 ls0 ws0">地址部分有较大的连续空闲区域,以利于大型作业的装入。为此,在空闲区说明表中,</div><div class="t m0 x3 h5 y6 ff1 fs2 fc0 sc1 ls0 ws0">把每个空闲区按其地址顺序登记,即每个后继的空闲区其起始地址总是比前者大。为</div><div class="t m0 x3 h5 y7 ff1 fs2 fc0 sc1 ls0 ws0">了方便查找还可使表格“紧缩”<span class="_ _8"></span>,总是让“空表目”栏集中在表格的后部。</div><div class="t m0 x2 h5 y8 ff1 fs2 fc0 sc1 ls0 ws0">(<span class="ff2">3</span>)主存分配。由于本实验是模拟主存的分配,所以当把主存区分配给作业后并不实际</div><div class="t m0 x3 h5 y9 ff1 fs2 fc0 sc1 ls0 ws0">动装入程序装入作业,而用输出“分配情况”来代替。</div><div class="t m0 x2 h5 ya ff1 fs2 fc0 sc1 ls0 ws0">(<span class="ff2">4</span>)主存回收。当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如</div><div class="t m0 x3 h5 yb ff1 fs2 fc0 sc1 ls0 ws0">与其他空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。</div><div class="t m0 x2 h5 yc ff1 fs2 fc0 sc1 ls0 ws0">(<span class="ff2">5</span>)请按首次适应算法和最佳适应算法设计主存分配和回收的程序,然后按(<span class="ff2">1</span>)中的假</div><div class="t m0 x3 h5 yd ff1 fs2 fc0 sc1 ls0 ws0">设,设主存中已装入<span class="_ _4"> </span><span class="ff2">3<span class="_ _4"> </span></span>个作业,且形成两个空闲区,确定空闲说明表的初值。现有一</div><div class="t m0 x3 h5 ye ff1 fs2 fc0 sc1 ls0 ws0">个需要主存量为<span class="_ _4"> </span><span class="ff2">6K<span class="_ _4"> </span></span>的作业<span class="_ _4"> </span><span class="ff2">4<span class="_ _4"> </span></span>申请装入主存;然后作业<span class="_ _4"> </span><span class="ff2">3<span class="_ _4"> </span></span>撤离;再作业<span class="_ _4"> </span><span class="ff2">2<span class="_ _4"> </span></span>撤离。请你为</div><div class="t m0 x3 h5 yf ff1 fs2 fc0 sc1 ls0 ws0">它们进行主存分配和回收,把主存区说明表的初值和每次分配或回收后的变化显示出</div><div class="t m0 x3 h5 y30 ff1 fs2 fc0 sc1 ls0 ws0">来。显示要求如下:按(<span class="ff2">1</span>)中的格式打印内存的初始状态,作业<span class="_ _4"> </span><span class="ff2">4<span class="_ _4"> </span></span>申请为其分配后的</div><div class="t m0 x3 h5 y31 ff1 fs2 fc0 sc1 ls0 ws0">内存状态;再显示作业<span class="_ _4"> </span><span class="ff2">3<span class="_ _4"> </span></span>撤离后的内存状态、作业<span class="_ _4"> </span><span class="ff2">2<span class="_ _4"> </span></span>撤离后的内存状态</div><div class="t m0 x2 h7 y32 ff1 fs3 fc0 sc0 ls0 ws0">五、调<span class="ff3">试</span>过程中<span class="ff3">遇</span>到的<span class="ff3">问题及</span>解<span class="ff3">决</span>过程</div><div class="t m0 xb h8 y33 ff1 fs2 fc0 sc1 ls0 ws0">调<span class="ff3">试</span>过程主要<span class="ff3">问题</span>就是对<span class="ff3">文件</span>的<span class="ff3">读取</span>操作出现了一<span class="ff3">点</span>小<span class="ff3">问题及</span>一些结<span class="ff3">构体</span>变量的<span class="ff3">引</span>用</div><div class="t m0 xb h8 y34 ff3 fs2 fc0 sc1 ls0 ws0">错误<span class="ff1">,<span class="_ _3"></span>对算法的<span class="_ _3"></span></span>整体构架<span class="_ _3"></span><span class="ff1">不</span>熟<span class="ff1">的前<span class="_ _3"></span></span>提<span class="ff1">下,</span>导<span class="_ _3"></span>致<span class="ff1">了</span>很<span class="ff1">多<span class="_ _3"></span></span>细节问题<span class="_ _3"></span>上考虑<span class="ff1">不<span class="_ _3"></span>够</span>周<span class="ff1">到、<span class="_ _3"></span>不够</span></div><div class="t m0 x3 h8 y35 ff3 fs2 fc0 sc1 ls0 ws0">全面<span class="ff1">使程序不够</span>完善!经<span class="ff1">过</span>细心研究捉摸<span class="ff1">,后来一一解</span>决!</div><div class="t m0 x2 h7 y36 ff3 fs3 fc0 sc0 ls0 ws0">六<span class="ff1">、实验总结</span></div><div class="t m0 x3 h8 y37 ff1 fs2 fc0 sc1 ls0 ws0">通过<span class="_ _3"></span>此次<span class="ff3">上<span class="_ _3"></span>机</span>实<span class="_ _3"></span><span class="ff3">践</span>模拟<span class="_ _3"></span>,<span class="ff3">我</span>们<span class="_ _3"></span>对<span class="_ _3"></span>动态分<span class="_ _3"></span>区主存<span class="_ _3"></span>的分配<span class="_ _3"></span>和回收<span class="_ _3"></span>算<span class="_ _3"></span>法的<span class="_ _3"></span><span class="ff3">提</span>出到<span class="_ _3"></span>实现过<span class="_ _3"></span>程有</div><div class="t m0 x3 h8 y38 ff1 fs2 fc0 sc1 ls0 ws0">了<span class="ff3">全</span>新的<span class="ff3">认识</span>,应该说<span class="ff3">受益非浅!</span>相<span class="ff3">信</span>在<span class="ff3">之</span>后的实验<span class="ff3">会更加认真</span>对<span class="ff3">待!!</span></div><div class="t m0 x2 h8 y39 ff3 fs2 fc0 sc0 ls0 ws0">七<span class="ff1">、实验程序代</span>码</div><div class="t m0 x2 h6 y3a ff2 fs2 fc0 sc1 ls0 ws0">#include <iostream.h></div><div class="t m0 x2 h6 y3b ff2 fs2 fc0 sc1 ls0 ws0">#include <iomanip.h></div><div class="t m0 x2 h6 y3c ff2 fs2 fc0 sc1 ls0 ws0">#include<stdio.h></div><div class="t m0 x2 h6 y3d ff2 fs2 fc0 sc1 ls0 ws0">#include <conio.h></div><div class="t m0 x2 h6 y3e ff2 fs2 fc0 sc1 ls0 ws0">int k=4;</div><div class="t m0 x2 h8 y3f ff2 fs2 fc0 sc1 ls0 ws0">struct list // <span class="ff1">初始化数据的结<span class="ff3">构体</span></span> </div><div class="t m0 x2 h6 y40 ff2 fs2 fc0 sc1 ls0 ws0">{</div><div class="t m0 x2 h6 y41 ff2 fs2 fc0 sc1 ls0 ws0"> int num; </div><div class="t m0 x2 h6 y42 ff2 fs2 fc0 sc1 ls0 ws0"> int adr; </div><div class="t m0 x2 h6 y43 ff2 fs2 fc0 sc1 ls0 ws0"> int end; </div><div class="t m0 x2 h6 y44 ff2 fs2 fc0 sc1 ls0 ws0"> int size;</div><div class="t m0 x2 h5 y14 ff2 fs2 fc0 sc1 ls0 ws0">}s[]={{1,1000,2999,2000},{2,500,799,300},{3,3500,3699,200},{4,4000,4499,500}}; // <span class="ff1">初始化空闲分区</span></div><div class="t m0 x2 h8 y16 ff2 fs2 fc0 sc1 ls0 ws0">/*void print(struct list *p,int n) // print<span class="_ _4"> </span><span class="ff3">函<span class="ff1">数作用输出结</span>果</span></div><div class="t m0 x2 h6 y45 ff2 fs2 fc0 sc1 ls0 ws0">{</div></div></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div>