北交大操作系统作业-内存管理器实验.doc

上传人:自*** 文档编号:126257486 上传时间:2020-03-23 格式:DOC 页数:14 大小:118.50KB
返回 下载 相关 举报
北交大操作系统作业-内存管理器实验.doc_第1页
第1页 / 共14页
北交大操作系统作业-内存管理器实验.doc_第2页
第2页 / 共14页
北交大操作系统作业-内存管理器实验.doc_第3页
第3页 / 共14页
北交大操作系统作业-内存管理器实验.doc_第4页
第4页 / 共14页
北交大操作系统作业-内存管理器实验.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《北交大操作系统作业-内存管理器实验.doc》由会员分享,可在线阅读,更多相关《北交大操作系统作业-内存管理器实验.doc(14页珍藏版)》请在金锄头文库上搜索。

1、实验三 内存管理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() /初

2、始化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;四模拟实验实现两个版本

3、的内存管理器,分配策略分别为: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步

4、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 = reque

5、stsize - 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

6、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 表示块大小/mmpoin

7、ter+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

8、+ 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(BinTo

9、Int(&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);

10、 /修改后块的后块前向指针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); /修改后块前向指针Int

11、ToBin(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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号