操作系统动态分区存储管理实验报告.docxVIP

操作系统动态分区存储管理实验报告.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【实验目的】 目的:1.熟悉主存的分配与回收。 理解在不同的存储管理方式下,如何实现主存空间的分配与回收。 掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理 方式及其实现过程。 【实验原理】 建立两张表,空闲表和已分配表,分别将未分配的作业和已分配好的作业放 入其中。当要装入一个作业时,从空闲区表中查找标志为“未分配”的空闲区,从 中找出一个能容纳该作业的空闲区。如果找到的空闲区正好等于该作业的长度, 则把该分区全部分配给作业。这时应该把该空闲区登记栏中的标志改为“空”,同 时在已分配区表中找到一个标志为“空”的栏目登记新装入作业所占用分区的起 始地址、长度和作业名。如果找到的空闲区大于作业长度,则把空闲区分成两部 分,一部分用来装入作业,另外一部分仍为空闲区。 实验采用的是“最优适应”算法。最优适应算法是按作业要求挑选一个能满足 作业要求的最小空闲区,这样保证可以不去分割一个大的区域,使装入大作业时 比较容易得到满足。此实验为解决假如找到的一个分区可能只比作业所要求的 长度略大一点的情况,这时,空闲区分割后剩下的空闲区就很小,这种很小的空 闲区往往无法使用,影响了主存的使用。为了一定程度上解决这个问题,如果空 闲区的大小比作业要求的长度略大一点,不再将空闲区分成已分分区和空闲区 两部分,而是将整个空闲区分配给作业。 【实验器材和资料】 电脑、Microsoft Visual C++ 6.0 软件、操作系统资料书 【实验内容和要求】 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就 是解决多进程如何共享主存空间的问题。所谓回收,就是当进程运行完成时将进 程所占的主存空间归还给系统。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空 闲分区说明表和空闲分区链表来进行,分区分配中所用的算法采用首次适应算 法、循环首次适应算法、最佳适应算法三种算法来实现主存的分配与回收。 同时,要求设计一个实用友好的可视化用户界面,并显示分配与回收的过 程。 【实验方法与步骤】 1.实验题目:假设初始状态下,可用的内存空间为 640KB,并有下列的请求序列: 输入内存最大范围执 输入内存最大范围 执行操作 添加进程并为之分配内 存 回收进程并回收被进程 占用的内存 退出 YES 发出内存不 足的消息 NO (1)进程 1 申请 130KB(2)进程 2 申请 60K (3)进程 3 申请 100KB (4)进程 2 释放 60KB (5)进程 4 申请 200KB(6)进程 3 释放 100KB (7)进程 1 释放 130KB(8)进程 5 申请 140KB(9)进程 6 申请 60KB (10)进程 7 申请 50KB(11)进程 8 申请 60KB 2.实验方法: 设计一个空闲分区表,空闲分区表通过空闲分区链表来管理,在进行内存分 配时,系统优先使用空闲区低端的空间。 设计一个内存分区表,可用链表管理,用以表示当前内存使用情况。 设计一个进程申请队列以及进程完成后的释放顺序,实现主存的分配和回 收。 要求每次分配和回收后把空闲分区的变化情况以及各进程的申请、释放情 况以图形方式显示、打印出来。 3.实验过程 (1)内存分配: 动态输入构造空闲区表,并显打印示构造好的空闲分区表。 键盘接收内存申请。 根据申请,实施内存分配,并返回分配所得内存首址。 分配完后,调整空闲分区表(即扣除分配部分),并显示调整后的空闲分区 表。 若分配失败,返回分配失败信息。 (2)内存回收: 显示当前的空闲分区表和内存分区表。 从键盘接收回收分区的首址与大小,按内存回收的四种情况进行内存回收。 ③显示回收后已调整好的的空闲分区表。 【程序流程图】 判断是否可以分配 【相关数据结构及说明】 typedef struct None //已分配内存分区链表 { char name[100]; //进程名 int begin; //开始地址 int end; //结束地址 int length; //长度大小 None *next; //指向下一个内存分区表 }; typedef struct NeiCun //空闲分区链表 { int begin1; //空闲分区首地址 int end1; //空闲分区尾地址 int length1; //空闲分区大小 NeiCun *next1; //指向下一个空闲分区表 }; None *head; //内存分区表头 NeiCun *head1; //空闲分区表头 int MAXNUMBER; //存储内存空间的最大范围 int flag,flog; //标志位 【程序代码】 由于我用的是 MFC 可视化编程编写,所以在这里不能完全复制源代码,只 复制几个比较重要的模块的代码。 1. 初始

文档评论(0)

damoyihao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档