欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    动态分区分配与回收算法实验报告.doc

    • 资源ID:2662157       资源大小:102.50KB       
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    动态分区分配与回收算法实验报告.doc

    *.实验报告实验二 动态分区分配与回收算法一、实验目的了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。二、实验原理算法思想:1分区的个数和大小不是固定不变的,而是可变的,随装入的作业动态划分,且不会产生内部碎片。2.外部碎片:若存储块长度为N,在该系统所采用的调度算法下较长时间内无法选出一道长度不超过该块的进程,则称该块为外部碎片。3.首次适应算法(FF):FF算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止。该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,这为以后到达的大作业分配大的内存空间创造了条件。4.最佳适应算法(BF):每次为作业分配内存时,BF总是把能满足要求、又是最小的空闲分区分配给作业,避免大材小用。为了加速寻找,该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。 分区分配中的内存回收有四种情况:(1)回收区与插入点的前一个空闲分区相邻接。(2)回收区与插入点的后一空闲分区相邻接。(3)回收区同时与插入点的前、后两个空闲分区邻接。(4)回收分区既不与前一个分区邻接,也不与后一个分区邻接。另外,最佳适应算法不需要考虑多个进程,而首次适应算法需要考虑多道程序的大小,所以前两个程序只需要输入一个进程的信息,后者因为考虑多个程序的原因,所以需要输入两个进程的信息。三、 实验步骤、数据记录及处理1、 算法流程抽象数据类型的定义:空闲分区结构体类型和结构体链表typedef struct freespaceint num; /分区号int size; /分区大小int address; /分区首地址status state; /分区状态,FREE和BUSY;typedef struct nodefreespace data;node *head;node *next;*Linklist;主程序的流程以及各程序模块之间的层次(调用)关系:主函数中先调用初始化函数,再调用菜单函数引导用户选择操作和相应的算法,用switch多选择结构来判断调用firstAlloc(),bestAlloc(),display()还是recycle()。程序流程图:2、 运行结果分析:首次适应算法:分配结束后的空闲分区大小和起始地址与结果相同。大小起始地址30K150K20K280K112K400K最佳适应算法:分配结束后的空闲分区大小和起始地址与结果相同。大小起始地址30K400K42K470K90K210K 西安工业大学实验报告 四、总结与体会附录:源代码#include<iostream>#include<stdlib.h>using namespace std;#define MAXSIZE 512enum status FREE, BUSY ;/枚举类型typedef struct freespaceint num; /分区号int size; /分区大小int address; /分区首地址status state; /分区状态,FREE和BUSY;typedef struct nodefreespace data;node *head;node *next;*Linklist;Linklist first,last;void init()first = new node;last = new node;first->head = NULL;first->next = last;last->head = first;last->next = NULL;last->data.address = 0;last->data.size = MAXSIZE;last->data.num = 0;last->data.state = FREE;void display()cout << "*主内存分配情况*" << endl;node *p = first->next;while (p)cout << "分区号:"if (p->data.num = 0)cout << "空闲区" << " " << "起始地址:" << p->data.address << " " << "终止地址:" << p->data.address+p->data.size<<" " << "分区大小:" <<p->data.size << "KB" << " " << "状态:空闲" << endl;elsecout << p->data.num;cout << " " << "起始地址:" << p->data.address << " " << "终止地址:" << p->data.address + p->data.size << " ""分区大小:" << p->data.size<< "KB" << " " << "状态:"if (p->data.state = FREE)cout << "空闲" << endl;else if (p->data.state = BUSY)cout << "占用" << endl;p = p->next;cout << "*" << endl << endl;int firstAlloc()/首次分配int num, size;cout << "请输入作业号和分配的主存大小KB:" << endl;cin >> num >> size;Linklist list = new node;list->data.num = num;list->data.size = size;list->data.state = BUSY;node *p = first->next;while (p)if (p->data.state = FREE&&p->data.size = size)/有大小刚好合适的空闲块p->data.state = BUSY;p->data.num = num;display();return 1;if (p->data.state = FREE&&p->data.size > size)/有大小比他大的空闲块list->head = p->head;list->next = p;list->data.address = p->data.address;p->head->next = list;p->head = list;p->data.address = list->data.address + list->data.size;p->data.size -= size;display();return 1;p = p->next;display();return 0;int bestAlloc()/最佳分配int num, size;cout << "请输入作业号和分配的主存大小KB:" << endl;cin >> num >> size;int min_space=MAXSIZE;Linklist list = new node;list->data.num = num;list->data.size = size;list->data.state = BUSY;node *p = first->next;node *q = NULL;while (p)/找到最佳位置if (p->data.size > size | p->data.size = size)&&p->data.state=FREE)if (p->data.size - size < min_space)q = p;min_space = p->data.size - size;p = p->next;if (q = NULL)return 0;elseif (min_space = 0)q->data.num = num;q->data.state = BUSY;display();return 1;elselist->head = q -> head;list->next = q;list->data.address = q->data.address;q->head->next = list;q->head = list;q->data.address += size;q->data.size -= size;display();return 1;int recycle()/碎片整理int num;cout << "请输入你要回收内存的作业号:" << endl;cin >> num;node *p = first;while (p)if (p->data.num = num)p->data.state = FREE;p->data.num = 0;if (p->head->data.state = FREE)/与前一块空闲区相邻,则合并p->head->data.size += p->data.size;p->head->next = p->next;p->next->head = p->head;if (p->next->data.state = FREE)/与后一块空闲区相邻,则合并p->data.size += p->next->data.size;p->next->next->head = p;p->next = p->next->next;break;p = p->next;display();return 1;void menu()cout << "*内存分配系统*" << endl;cout << " 1.首次适应算法分配内存 " << endl;cout << " 2.最佳适应算法分配内存 " << endl;cout << " 3.查看主存分配情况 " << endl;cout << " 4.回收主存 " << endl;cout << "请选择:" << endl;void main()init();int choose;menu();while (1)/menu();cin >> choose;switch (choose)case 1:firstAlloc();break;case 2:bestAlloc();break;case 3:display();break;case 4:recycle();break;default :cout << "输入错误!" << endl;break;

    注意事项

    本文(动态分区分配与回收算法实验报告.doc)为本站会员(一***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开