操作系统-内存分配与回收模拟-实验06.doc

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

操 作 系 统 课 程 实 验 报 告 姓名 学号 系 任课教师 指导教师 评阅教师 实验地点 综合楼B104 励耘楼A206 综合楼B102 丽泽楼C304-1 (请勾选实际实验地点) 实验时间 实验课表现 出勤和个人表现Q1(15+15(组长评分)=30分) 得分: 实验 总分 (Q1+Q2+Q3+Q4) 实验完成情况Q2(45分(组长与教师评分的加权平均)) 得分: 实验编号与实验名称: 第六次实验 内存分配与回收模拟 实验目的: 通过使用位图跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收。 实验内容及要求(详见实验讲义与实验指导书): 实验要求: 1)要求用你熟悉的程序设计语言编写和调试一个内存分配和回收模拟程序;要求在主函数中测试。 2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。 3)必须模拟该4种内存分配算法:first fit,next fit,best fit和worst fit中的至少2种。 4) 需显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图,并统计各种算法产生的碎片空闲区(小于3个单元(unit)的空闲区)数。 5)计算2个性能参数:碎片数、平均搜索空闲区次数 实验内容: 假设内存容量为256KB,并且划分成2KB大小的块,也即每个内存单元为2KB。一个进程所需要的内存为3到10个单元。同时假设一个作业在运行过程中所需内存的大小不变。 模拟包括3部分: 1) 实现特定的内存分配算法 2) 实现内存回收模拟 3) 每种内存分配策略对应的碎片数统计 实验用到的软件(:) C-FREE 实验内容及关键步骤(代码)Q3(15分) 得分: (1)首次适应算法实现 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。 最佳适配算法流程图: 内存回收: #include stdio.h #include stdlib.h #include iostream.h #define M 20 #define N 101 #define max_size 128 int i = 0,choose; int id= 0,size = 0,countOfEmpty = 1,countOfNotEmpty = 0,num = 1; int Time[N]={1};//进程分配搜索空闲区次数 struct Empty{ int start; int size; int yesornot; }empty[M]; struct not_Empty{ int id; int size; int start; int yesornot; }not_empty[N]; int cmp(const void *p,const void *q){ int c = (*(struct Empty*)p).start - (*(struct Empty*)q).start; int a = (*(struct Empty*)p).yesornot - (*(struct Empty*)q).yesornot; if(a 0) return -1; else if(a == 0){ if(c 0) return 1; else return -1; } else return 1; } int cmp1(const void *p,const void *q){ int c = (*(struct not_Empty*)p).start - (*(struct not_Empty*)q).start; int a = (*(struct not_Empty*)p).yesornot - (*(struct not_Empty*)q).yesornot; if(a 0) return -1; else if(a == 0){ if(c 0) retu

文档评论(0)

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

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

1亿VIP精品文档

相关文档