网站大量收购独家精品文档,联系QQ:2885784924

实验五 动态分区分配算法的模拟.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 动态分区分配算法的模拟

实验五 动态分区分配算法的模拟 一、 实验目的 1、加深操作系统内存管理过程的理解 2、掌握内存分配算法的基本应用 二、 实验任务 请同学们用C/C++实现一个完整的(可变)动态分区管理器,包括分配,回收,分区碎片整理等。希望同学们实现如下功能: n 初始化功能:内存状态设置为初始状态。 n 分配功能:要求至少使用两种算法,用户可以选择使用。 n 回收功能: n 空闲块的合并:即紧凑功能,用以消除碎片。当做碎片整理时,需要跟踪分配的空间,修改其引用以保证引用的正确性。 n 显示当前内存的使用状态,可以使用表格或图形。 三、实验指导 1.基本思想 动态分区是指系统不预先划分固定分区,而是在装入程序的时候划分内存区域,使得为程序分配的分区大小恰好等于该程序的需求量,且分区的个数是动态的。显然动态分区有较大的灵活性,较之固定分区能获得好的内存利用率。 2.数据结构 动态分区管理可以用两种数据结构实现,一种是已分配区表和空闲区表,也就是用预先定义好的系统空间来存放空间分配信息。 另一种也是最常用的就是空闲链表,由于对分区的操作是动态的,所以很难估计数据结构所占用的空间,而且空闲区表会占用宝贵的系统空间,所以提出了空闲链表的概念。其特点是用于管理分区的信息动态生成并和该分区在物理地址上相邻。这样由于可以简单用两个空闲块之间的距离定位已分配空间,不仅节约了系统空间,而且不必维持已分配空间的信息。 本实验是要做一个模拟程序,来模拟动态分区算法的分配和回收过程,并不是真正的去分配和回收内存。基本的模拟方法有两种: 1、先从内存中申请一块存储区,对这块存储区进行模拟的分配和回收活动。 2、不申请存储区,自己定义一块虚拟的存储区,对这块存储区进行模拟的分配和回收活动,分配和回收仅仅是对数据结构的修改而已。#includeiostream using namespace std; int FreePartition[100];//空闲分区块数组 int FirstPartition[100];//首次适应算法数组 int CycleFirstPartition[100];//循环首次适应算法数组 int BestPartition[100];//最佳适应算法数组 int WorstPartition[100];//最坏适应算法数组 int ProcessNeed[100];//每个作业的大小 int PartitionNum,ProcessNum;//分区块数,作业数 //首次适应算法 void First() { int i,j; char str; for(i=0;iPartitionNum;i++) { FirstPartition[i]=FreePartition[i]; } for(i=0;iProcessNum;i++)//找出第一块满足作业的分区 for(j=0;jPartitionNum;j++) { if(ProcessNeed[i]FirstPartition[j]) continue; else { FirstPartition[j]-=ProcessNeed[i];//找到后把分区大小减去作业的大小 ?? ? ? ? ? ? ? ?str=A+i; cout作业str在第j+1块分区中endl; break; } } coutendl; cout分配之后剩余情况:endl; ?? ?for(i=0;iPartitionNum;i++) coutFirstPartition[i] ; coutendlendl; } //循环首次适应算法 void CycleFirst() { int i,j=1; char str; for(i=0;iPartitionNum;i++) { CycleFirstPartition[i]=FreePartition[i]; } for(i=0;iProcessNum;i++) //for(j=0;jPartitionNum;j++) { j=j-1; while(jPartitionNum) { if(ProcessNeed[i]CycleFirstPartition[j]) //continue; j++; else { CycleFirstPartition[j]-=ProcessNeed[i]; str=A+i; cout作业str在第j+1块分区中endl; break; } //j++; //coutj ; if(j==PartitionNum i!=ProcessNum) { i=-1; } } } coutendl; cout分配之后剩余情况:endl; for(i=0;iPartitionNum;i++) coutCycleFirstPartition[i] ; coutend

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档