北交大操作系统作业-内存管理器实验.doc_第1页
北交大操作系统作业-内存管理器实验.doc_第2页
北交大操作系统作业-内存管理器实验.doc_第3页
北交大操作系统作业-内存管理器实验.doc_第4页
北交大操作系统作业-内存管理器实验.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三 内存管理1一实验目的1二实验内容1三实验设计1四模拟实验2First.cpp3First.h5Next.cpp7Next.h9五实验结果12六实验总结15实验三 内存管理一实验目的构造一个没有虚存功能的内存管理系统,并进行测试和对不同分配策略的性能展开比较评估。本次实验,选择的分配策略:First-fit 和 next-fit二实验内容1、设计一个内存管理器,支持至少两种分配策略(本实验使用firstfit策略和nextfit策略);2、分别对不同的策略进行性能评估三实验设计1.内存unsigned char mm65536;2. 用户接口用户接口函数:int mm_init() /初始化int mm_request(int n) /申请空间void mm_release(int p) /释放空间3计算请求尺寸srand(unsigned char)time(NULL);tmp = (rand() % 1024) + 1; /最大申请10244.选择待释放的块tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout 释放指针 ptmp endl;ptmp = -1;四模拟实验实现两个版本的内存管理器,分配策略分别为:first-fit和next-fitFirst.cpp#include #include #include #include #include first.husing namespace std;int main()int i;int j = 0; /分配指针数int p1000; /用于存放分配出的指针int tmp;int requestsize = 0; /统计申请空间int k = 0; /统计搜索步数srand(unsigned char)time(NULL);step = 0;mm_init();for(i = 0; i 30; i+) /模拟30步cout 第 i + 1 步 endl;dotmp = (rand() % 1024) + 1; /最大申请1024cout 申请空间 tmp 字节 endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize+tmp;k = k + step;cout 分配指针 pj endl;cout endl;j+;elsecout 剩余空间不足,分配失败 endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout 释放指针 ptmp endl;ptmp = -1;/以下为性能统计指标cout endl;cout 平均申请空间: (double)requestsize / (double)j 字节 endl;cout 平均空间利用率: (double)requestsize/(double)65536 endl;cout 平均搜索步数: (double)k/(double)j endl;cout endl;if(i + 1) % 5 = 0)system(pause);First.hunsigned char mm65536;int step; /记录搜索步数int BinToInt(unsigned char *s) /把char类型变成intint i;char tmp4;int t;for(i = 0; i 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t) /把int类型变成charint i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i =BinToInt(&mmpointer+4) /pointer+4 表示块大小/mmpointer+8=1 状态位是一,说明这一块已经被分配/n+26 申请的空间+管理开销pointer=BinToInt(&mmpointer+BinToInt(&mmpointer+4)-4); /找到后向指针if(mmpointer+8 != 1)step+;/非空闲块不在链内,不计步数if(pointer = -1)return -1;mmpointer + 8 = 1; /修改本块标志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本块后向指针IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后块前向指针IntToBin(BinToInt(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后块大小IntToBin(n + 13,&mmpointer + 4); /修改本块大小return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本块标志位if(BinToInt(&mmbac+8) = 0) /如果后块未使用IntToBin(0,&mmp+BinToInt(&mmp + 4) - 4); /清空本块后向指针IntToBin(0,&mmbac); /清空后块前向指针IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本块大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后块不是最后一块IntToBin(p, &mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后块的后块前向指针IntToBin(0, &mmbac + 4); /清空后块大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前块未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前块后向指针IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpre + 4); /修改前块大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后块前向指针IntToBin(0, &mmp + 4); /清空本块大小IntToBin(0, &mmp); /清空本块前向指针Next.cpp#include #include #include #include #include next.husing namespace std;int main()int i;int j = 0; /分配指针数int p1000; /用于存放分配出的指针int tmp;int requestsize = 0; /统计申请空间int k = 0; /统计搜索步数srand(unsigned char)time(NULL);step = 0;next = 0;end = -1;mm_init();for(i = 0; i 30; i+)/模拟30步cout 这是第 i + 1 步 endl;dotmp = (rand() % 1024) + 1; /最大申请1024cout 申请空间 tmp 字节 endl;pj = mm_request(tmp);if(pj != -1)requestsize = requestsize + tmp;k = k + step;cout 分配指针: pj endl;cout endl;j+;elsecout 剩余空间不足,分配失败。 endl;while(pj != -1);tmp = (rand() % j);while(ptmp = -1)tmp = rand() % j;requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);cout 释放指针: ptmp endl;ptmp = -1;/以下为性能统计指标cout endl;cout 平均申请空间: (double)requestsize/(double)j 字节 endl;cout 平均空间利用率: (double)requestsize/(double)65536 endl;cout 平均搜索步数: (double)k/(double)j endl;cout endl;if(i + 1) % 5 = 0)system(pause);Next.hunsigned char mm65536;int step;int next;int end;int BinToInt(unsigned char *s)int i;char tmp4;int t;for(i = 0; i 4; i+)tmp3 - i = si;memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t)int i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i 4; i+)ti = tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm);IntToBin(65536, &mm4);IntToBin(-1, &mm65536-4);return 0;int mm_request(int n)/四字节前向指针、四字节块大小、一字节状态、N字节可用内存、四字节后向指针int pointer;step = 0;pointer = next;while(pointer != -1)if(mmpointer + 8 != 1) & (n + 26) BinToInt(&mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToInt(&mmpointer + 4) - 4);/step+;if(mmpointer + 8 != 1)step+;if(pointer = -1)pointer = 0;while(pointer != end)if(mmpointer + 8 != 1) & (n + 26) BinToInt(&mmpointer + 4)break;pointer = BinToInt(&mmpointer + BinToInt(&mmpointer + 4) - 4);if(mmpointer + 8 != 1)step+;/step+;if(pointer = end)return -1;mmpointer+8 = 1; /修改本块标志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本块后向指针IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后块前向指针IntToBin(BinToInt(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后块大小IntToBin(n + 13, &mmpointer + 4); /修改本块大小end = pointer;next = pointer + 4 + 4 + 1 + n + 4;return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本块标志位if(BinToInt(&mmbac + 8) = 0) /如果后块未使用IntToBin(0, &mmp + BinToInt(&mmp + 4) - 4); /清空本块后向指针IntToBin(0, &mmbac); /清空后块前向指针IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本块大小if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后块不是最后一块IntToBin(p, &mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后块的后块前向指针IntToBin(0, &mmbac + 4); /清空后块大小if(pre = -1)return;if(BinToInt(&mmpre + 8) = 0) /如果前块未使用IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前块后向指针IntToBin(0, &mmp); /清空本块前向指针IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mmpre + 4); /修改前块大小IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后块前向指针IntToBin(0, &mmp + 4); /清空本块大小五实验结果1 .实现的两种分配策略:first-fit 和 next-fit2. 设计测试程序,收集实验数据:First-fit 运行结果:Next-fit 运行结果:3 分析实验数据First-fit:步数51015202530平均请求尺寸(字节)459.037443.554411.527391.257380.769364.503平均内存利用率0.9525910.9407650.9167940.9074550.9063720.895462平均搜索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论