ImageVerifierCode 换一换
格式:DOC , 页数:9 ,大小:167.50KB ,
资源ID:10615986      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10615986.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(动态分区分配方式的模拟 (2).doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

动态分区分配方式的模拟 (2).doc

1、太原工业学院计算机工程系操作系统实验报告(二)实验名称 动态分区分配方式的模拟 实验日期 2016/12/3姓 名 班级学号成绩实验目的了解动态分区分配方式中使用的数据结构和分配算法,进一步加深对动态分区存储管理方式及其实现过程的理解实验环境Windows8.1+Visual C+6.0实验内容用 C 或 C+分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。设置初始状态,每次分配和回收后显示出空闲内存分区链的情况。实验步骤首次适应算法; 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区

2、链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高 地址空间保留大的空闲区。最佳适应算法;它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲 分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。核心代码; / 初始化空闲分区链void intSubArea()/ 分配初始分区内存subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode);

3、/ 给首个分区赋值fir-n = 0;fir-addr = 0;fir-size = SIZE;fir-state = Free;fir-taskId = -1;fir-pre = fir-nxt = NULL;/ 初始化分区头部信息subHead.pre = NULL;subHead.nxt = fir;/ 首次适应算法int firstFit(int taskId, int size)subAreaNode *p = subHead.nxt;while(p != NULL)if(p-state = Free p-taskId = taskId; else / 分配大小为 size 的区间s

4、ubAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode);node-addr = p-addr + size;node-size = p-size - size;node-state = Free;node-taskId = -1;/ 修改分区链节点指针node-pre = p;node-nxt = p-nxt;if(p-nxt != NULL) p-nxt-pre = node;p-nxt = node;/ 分配空闲区间p-size = size;p-state = Busy;p-taskId = taskId;p-n=p-n+

5、1;printf(“内存分配成功!n“);return 1;p = p-nxt;printf(“找不到合适的内存分区,分配失败.n“);return 0;/ 最佳适应算法int bestFit(int taskId, int size)subAreaNode *tar = NULL;int tarSize = SIZE + 1;subAreaNode *p = subHead.nxt;while(p != NULL)/ 寻找最佳空闲区间if(p-state = Free p = p-nxt;if(tar != NULL) / 找到要分配的空闲分区if(tar-size - size state

6、 = Busy;tar-taskId = taskId; else / 分配大小为 size 的区间subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode);node-addr = tar-addr + size;node-size = tar-size - size;node-state = Free;node-taskId = -1;/ 修改分区链节点指针node-pre = tar;node-nxt = tar-nxt;if(tar-nxt != NULL) tar-nxt-pre = node;tar-nxt = nod

7、e;/ 分配空闲区间tar-size = size;tar-state = Busy;tar-taskId = taskId;p-n=p-n+1;printf(“内存分配成功!n“);return 1; else / 找不到合适的空闲分区printf(“找不到合适的内存分区,分配失败.n“);return 0;/ 回收内存int freeSubArea(int taskId)int flag = 0;subAreaNode *p = subHead.nxt, *pp;while(p != NULL)p-n+;if(p-state = Busy if(p-pre != p = p-pre;p-s

8、ize += pp-size;p-nxt = pp-nxt;pp-nxt-pre = p;free(pp);/ 后合并下区间pp = p-nxt;p-size += pp-size;p-nxt = pp-nxt;if(pp-nxt != NULL) pp-nxt-pre = p;free(pp); else if(p-pre = p-size += pp-size;p-state = Free;p-taskId = -1;p-nxt = pp-nxt;if(pp-nxt != NULL) pp-nxt-pre = p;free(pp); else if(p-pre != p = p-pre;p

9、-size += pp-size;p-nxt = pp-nxt;if(pp-nxt != NULL) pp-nxt-pre = p;free(pp); else / 情况 4:上下分区均不用合并p-state = Free;p-taskId = -1;p = p-nxt;if(flag = 1) / 回收成功printf(“内存分区回收成功.n“);return 1; else / 找不到目标作业,回收失败printf(“找不到目标作业,内存分区回收失败.n“);return 0;/ 显示空闲分区链情况void showSubArea()printf(“*n“);printf(“* 当前的内存

10、分配情况如下: *n“);printf(“*n“);printf(“* 分区号 | 起始地址 | 空间大小 | 工作状态 | 作业号 *n“);subAreaNode *p = subHead.nxt;while(p != NULL)printf(“*-*n“);printf(“*“);if(p-n 0) printf(“%d |“, p-n); else printf(“ “);printf(“%d k |“, p-addr);printf(“%d k |“, p-size);printf(“ %s |“, p-state = Free ? “Free“ : “Busy“);if(p-tas

11、kId 0) printf(“%d “, p-taskId); else printf(“ “);printf(“*n“); p = p-nxt;printf(“*n“);int main()int option, ope, taskId, size,n;/ 初始化空闲分区链intSubArea();/ 选择分配算法while(1)printf(“请选择要模拟的分配算法:0 表示首次适应算法,1 表示最佳适应算法n“);scanf(“%d“, if(option = 0) printf(“你选择了首次适应算法,下面进行算法的模拟n“);break; else if(option = 1) pr

12、intf(“你选择了最佳适应算法,下面进行算法的模拟n“);break; else printf(“错误:请输入 0/1nn“);/ 模拟动态分区分配算法while(1)printf(“n“);printf(“*n“);printf(“* 1: 分配内存 2: 回收内存 0: 退出 *n“);printf(“*n“);scanf(“%d“, if(ope = 0) break;if(ope = 1) / 模拟分配内存printf(“请输入作业号: “);scanf(“%d“, printf(“请输入需要分配的内存大小(KB) : “);scanf(“%d“, if(size = 0) prin

13、tf(“错误:分配内存大小必须为正值n“);continue;/ 调用分配算法if(option = 0) firstFit(taskId, size); else bestFit(taskId, size);/ 显示空闲分区链情况showSubArea(); else if(ope = 2) / 模拟回收内存printf(“请输入要回收的作业号: “);scanf(“%d“, freeSubArea(taskId);/ 显示空闲分区链情况showSubArea(); else printf(“错误:请输入 0/1/2n“);printf(“分配算法模拟结束n“);return 0;实验结果;总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报