- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程实验报告
姓名
学号
系
计算机
任课教师
指导教师
评阅教师
实验地点
综合楼B104 励耘楼A206 综合楼B102 丽泽楼C304-1 (请勾选实际实验地点)
实验时间
10.20
实验课表现
出勤和个人表现Q1(15+15(组长评分)=30分)
得分:28
实验
总分
(Q1+Q2+Q3+Q4)
实验完成情况Q2(45分(组长与教师评分的加权平均))
得分:40
实验编号与实验名称:
内存分配与回收模拟
实验目的:
通过使用位图跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收。
实验内容及要求(详见实验讲义与实验指导书):
.实验要求:
1)要求用你熟悉的程序设计语言编写和调试一个内存分配和回收模拟程序;要求在主函数中测试。
2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。
3)必须模拟该4种内存分配算法:first fit,next fit,best fit和worst fit中的至少2种。
4) 需显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图,并统计各种算法产生的碎片空闲区(小于3个单元(unit)的空闲区)数。
5)计算2个性能参数:碎片数、平均搜索空闲区次数
实验内容
假设内存容量为256KB,并且划分成2KB大小的块,也即每个内存单元为2KB。一个进程所需要的内存为3到10个单元。同时假设一个作业在运行过程中所需内存的大小不变。
模拟包括3部分:
实现特定的内存分配算法
实现内存回收模拟
每种内存分配策略对应的碎片数统计
实验用到的软件(:)
CFee
实验内容及关键步骤(代码)Q3(15分)
得分:
实验六:
答:《1》各算法描述
首先是首次适配算法:从第一个空闲区开始寻找,只要找到大于或者等于作业要求的空间即可,然后修改链表地址,插入链表。
数据处理:选择插入空间地址,修改链表地址。假设内存容量为256KB,并且划分成2KB大小的块,也即每个内存单元为2KB。一个进程所需要的内存为3到10个单元。碎片空闲区(小于3个单元(unit)的空闲区)数。
其次是最佳适配算法:寻找整个空间最小能装下作业要求的空间大小,通过比较然后将作业装入数组中。
数据处理:最佳适配算法最容易产生更多的碎片,找到插入地址,修改数组,完成适配。假定最大空闲分区20个,内存中同时最多可容纳的作业数20个
空闲区与作业关系空闲区地址《2》流程图
空闲区与作业关系
空闲区地址
首次适配:空闲区地址-----〉空闲区与作业关系------
该区等于作业要求
该区等于作业要求
该区小于作业要求该区大于作业要求
该区小于作业要求
该区大于作业要求
取出空闲区一块空间
取出空闲区一块空间
截取长度并修改链表无法分配
截取长度并修改链表
无法分配
返回作业分配主存的地址
返回作业分配主存的地址
空闲区与作业关系空闲区
空闲区与作业关系
空闲区地址
最佳适配:空闲区地址-----〉空闲区与作业关系----〉。
该区等于作业要求该区大于作业要求该区小于作业要求
该区等于作业要求
该区大于作业要求
该区小于作业要求
数组是否为一个
数组是否为一个
是无法分配
是
无法分配
否是否为最小
否
是否为最小
是
是
返回作业分配主存的地址
返回作业分配主存的地址
《3》源代码
首次适配和最佳适配算法实现如下:
/*动态分区的分配与回收演示程序*/
#include stdio.h
#define N 5
int start;//存放首址
/*定义一个空闲区说明表结构,并初始化变量*/
struct freearea
{
int startaddress;/*空闲区始址*/
int size;/*空闲区大小*/
int state;/*空闲区状态:0为空表目,1为可用空闲块*/
}freeblock[N]={{20,20,1},{80,50,1},{150,30,1},{300,30,0},{600,10,1}};
/*定义为作业分配主存空间的函数alloc(),给首次适应算法调用*/
int alloc(int applyarea) /*applyarea为作业申请量*/
{
int i,tag=0; /*tag为检查是否有满足作业需要的空闲区的标志*/
for(i=0;iN;i++) /*检查空闲区说明表是否有满足作业要求的空闲区*/
if(freeblock[i].state==1freeblock[i].sizeapplyarea)
{
freeblock[i].startaddress=freeblock[i].startaddre
文档评论(0)