分享
分享赚钱 收藏 举报 版权申诉 / 11

类型操作系统-存储管理动态分区分配及回收算法(附源码).doc

  • 上传人:精品资料
  • 文档编号:10624879
  • 上传时间:2019-12-09
  • 格式:DOC
  • 页数:11
  • 大小:159.17KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    操作系统-存储管理动态分区分配及回收算法(附源码).doc
    资源描述:

    1、存储管理动态分区分配及回收算法课程名称:计算机操作系统 班级:信 1501-2实验者姓名:李琛 实验日期:2018 年 5月 20日评分: 教师签名:一、实验目的分区管理是应用较广泛的一种存储管理技术。本实验要求用一种结构化高级语言构造 分区描述器,编制动态分区分配算法和回收算法模拟程序,并讨论不同分配算法的特点。二、实验要求1、编写:First Fit Algorithm 2、编写:Best Fit Algorithm 3、编写:空闲区回收算法三、实验过程(一)主程序1、定义分区描述器 node,包括 3 个元素:(1)adr分区首地址(2)size分区大小(3)next指向下一个分区的指针

    2、2、定义 3 个指向 node 结构的指针变量:(1)head1空闲区队列首指针(2)back1指向释放区 node 结构的指针(3)assign指向申请的内存分区 node 结构的指针3、定义 1 个整形变量:free用户申请存储区的大小(由用户键入)(二)过程1、定义 check 过程,用于检查指定的释放块(由用户键入)的合法性2、定义 assignment1 过程,实现 First Fit Algorithm3、定义 assignment2 过程,实现 Best Fit Algorithm4、定义 acceptment1 过程,实现 First Fit Algorithm 的回收算法5、

    3、定义 acceptment2 过程,实现 Best Fit Algorithm 的回收算法6、定义 print 过程,打印空闲区队列(三)执行程序首先申请一整块空闲区,其首址为 0,大小为 32767;然后,提示用户使用哪种分配算法,再提示是分配还是回收;分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。实验代码Main.cpp#include#include#include#includeusing namespace std;#define MAX_SIZE 32767typedef struct nodeint id;int adr;int size;struct node

    4、*next;Node;Node *head1, *head2, *back1, *back2, *assign;int request;int check(int add, int siz, char c)Node *p, *head;int check = 1;if (addnext;while (p != NULL) elsep = p-next;if (check = 0)printf(“t输入释放区地址或大小有错误!n“);return check;void init()Node *p;head1 = (Node*)malloc(sizeof(Node);head2 = (Node*)

    5、malloc(sizeof(Node);p = (Node*)malloc(sizeof(Node);head1-next = p;head2-next = p;p-size = MAX_SIZE;p-adr = 0;p-next = NULL;p-id = 0;Node* assignment1(int num, int req)Node *before, *after, *ass;ass = (Node*)malloc(sizeof(Node);before = head1;after = head1-next;ass-id = num;ass-size = req;while (afte

    6、r-sizenext;after = after-next;if (after = NULL)ass-adr = -1;elseif (after-size = req)before-next = after-next;ass-adr = after-adr;elseafter-size -= req;ass-adr = after-adr;after-adr += req;return ass;void acceptment1(int address, int siz, int rd)Node *before, *after;int insert = 0;back1 = (Node*)mal

    7、loc(sizeof(Node);before = head1;after = head1-next;back1-adr = address;back1-size = siz;back1-id = rd;back1-next = NULL;while (!insertback1-next = after;insert = 1;elsebefore = before-next;after = after-next;if (insert)if (back1-adr = before-adr + before-size)/和前边分区合并before-size += back1-size;before

    8、-next = back1-next;free(back1);else if (afterback1-next = after-next;back1-id = after-id;free(after);after = back1;printf(“t首先分配算法回收内存成功!n“);elseprintf(“t首先分配算法回收内存失败!n“);Node* assignment2(int num, int req)Node *before, *after, *ass, *q;ass = (Node*)malloc(sizeof(Node);q = (Node*)malloc(sizeof(Node)

    9、;before = head2;after = head2-next;ass-id = num;ass-size = req;while (after-sizenext;after = after-next;if (after = NULL)ass-adr = -1;elseif (after-size = req)before-next = after-next;ass-adr = after-adr;elseq = after;before-next = after-next;ass-adr = q-adr;q-size -= req;q-adr += req;before = head2

    10、;after = head2-next;if (after = NULL)before-next = q;q-next = NULL;elsewhile (after-size)size)before = before-next;after = after-next;before-next = q;q-next = after;return (ass);void acceptment2(int address, int siz, int rd)Node *before, *after;int insert = 0;back2 = (Node*)malloc(sizeof(Node);befor

    11、e = head2;after = head2-next;back2-adr = address;back2-size = siz;back2-id = rd;back2-next = NULL;if (head2-next = NULL)/空闲队列为空head2-next = back2;head2-size = back2-size;else/空闲队列不为空while (after)if (back2-adr = after-adr + after-size)/和前边空闲分区合并before-next = after-next;after-size += back2-size;back2

    12、= after;elsebefore = before-next;after = after-next;before = head2;after = head2-next;while (after)if (after-adr = back2-adr + back2-size)/和后边空闲区合并before-next = after-next;back2-size += after-size;elsebefore = before-next;after = after-next;before = head2;after = head2-next;while (!insert)/将被回收的块插入到

    13、恰当的位置(按分区大小从小到大)if (after = NULL | (after-sizeback2-size) back2-next = after;insert = 1;break;elsebefore = before-next;after = after-next;if (insert)printf(“t最佳适应算法回收内存成功!n“);elseprintf(“t最佳适应算法回收内存失败!n“);void print(char choice)/输出空闲区队列信息Node *p;if (choice = f | choice = F)p = head1-next;elsep = hea

    14、d2-next;if (p)printf(“n空闲区队列的情况为:n“);printf(“t编号t首址t终址t大小n“);while (p)printf(“t%dt%dt%dt%dn“, p-id, p-adr, p-adr + p-size - 1, p-size);p = p-next;void menu()/菜单及主要过程char chose;int ch, num=0, r, add, rd;while (1)system(“cls“);printf(“-存储管理动态分区分配及回收算法-n“);printf(“ F 最先适应算法n“);printf(“ B 最佳适应算法n“);prin

    15、tf(“ E 退出程序n“);printf(“-n“);printf(“请选择算法:“);cin chose;/scanf(“%c“, if (chose = e | chose = E)exit(0);elsesystem(“cls“);while (1)if (chose = f | chose = F)printf(“最先适应算法:n“);if (chose = b | chose = B)printf(“最佳适应算法:n“);printf(“-n“);printf(“ 1 分配内存n“);printf(“ 2 回收内存n“);printf(“ 3 查看内存n“);printf(“ 4

    16、返回n“);printf(“-nn“);printf(“请选择:“);scanf(“%d“, fflush(stdin);switch (ch)case 1:printf(“输入申请的分区大小:“); scanf(“%d“, if (chose = f | chose = F)assign = assignment1(num, r);elseassign = assignment2(num, r);if (assign-adr = -1)printf(“分配内存失败!n“);elseprintf(“分配成功!分配的内存的首址为:%dn“, assign-adr);break;case 2:pr

    17、intf(“输入释放的内存的首址:“); scanf(“%d“, printf(“输入释放的内存的大小:“); scanf(“%d“, printf(“输入释放的内存的编号:“); scanf(“%d“, if (check(add, r, chose)if (chose = f | chose = F)acceptment1(add, r, rd);elseacceptment2(add, r, rd);break;case 3:print(chose); break;case 4:menu(); break;void main()/主函数init();menu();四、实验结果五、实验总结通过这次实验我练习了存储管理动态分区分配及回收算法,对操作系统中动态可变分区存储管理有了更深刻的了解。刚开始编程时并没有什么思路,查阅相关书籍,浏览网上的论坛后,才对这次实验有了编程思路,在编程中总会遇到各种意想不到问题,这些问题一定要解决。在解决问题的同时,自己的编程能力也在提高。

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:操作系统-存储管理动态分区分配及回收算法(附源码).doc
    链接地址:https://www.docduoduo.com/p-10624879.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开