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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

动态分区存储管理的模拟实现.docx

1、动态分区存储管理的模拟实现计算机科学与工程学院学生实验报告专 业计算机科学与技术班 级学 号姓 名课程名称操作系统课程类型专业必修课实验名称动态分区存储管理的模拟实现实验目的:1. 熟悉动态分区存储管理方式下,主存空间的分配和回收算法。2. 提高C语言编程能力。实验内容:假设主存当前状态如右表所示:系统采用最佳适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下操作:(1). 输出此时的已分配区表和未分配区表;(2). 装入 Job3(15K),输出主存分配后的已分配区表和未分配区表;(3). 回收 Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;(4).装入 J

2、ob4(130K),输出主存分配后的已分配区表和未分配区表。实验要求1.数据结构参考定义如下,也可根据需要进行改进:(1)已分配区表:#define n 10 /*假定系统允许的最大作业数量为n,n值为10*/structint number; /*序号*/ int address; /*已分配分区起始地址,单位为KB */ int length; /*已分配分区长度,单位KB*/ float flag; /*已分配区表登记栏标志,0:空表项,否则为作业名;*/used_tablen; /*已分配区表*/(2)未分配区表:#define m 10 /*假定系统允许的空闲区表最大为m,m值为10

3、*/structint number; /*序号*/ int address; /*空闲区起始地址,单位为KB */ int length; /*空闲区长度,单位为KB*/ int flag; /*空闲区表登记栏标志,0:空表项;1:空闲区*/free_tablem; /*空闲区表*/2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。4.画出算法实现的N-S流程图。5.程序调试、运行成功后,请老师检查。实验步骤:1. 分配内存,结果如下图:2. 回收内存,结果如下图:

4、3. 合并内存,结果如下图:4.N-S流程图: 4.1 内存分配流程图:4.2 内存回收流程图:附录 程序代码:#define _CRT_SECURE_NO_WARNINGS 1 #include#includeenum STATE Free,Busy; struct subAreaNode int addr; / 起始地址int size; / 分区大小int taskId; / 作业号STATE state; / 分区状态subAreaNode *pre; / 分区前向指针subAreaNode *nxt; / 分区后向指针subHead;/ 初始化空闲分区链void intSubArea

5、()/ 分配初始分区内存subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode);/ 给首个分区赋值fir-addr = 0;fir-size = 240; / 内存初始大小fir-state = Free;fir-taskId = -1;fir-pre = &subHead;fir-nxt = NULL;/ 初始化分区头部信息subHead.pre = NULL;subHead.nxt = fir;/ 最佳适应算法int bestFit(int taskId, int size)subAreaNode *tar = NULL;i

6、nt tarSize = 240 + 1;subAreaNode *p = subHead.nxt;while (p != NULL)/ 寻找最佳空闲区间if (p-state = Free & p-size = size & p-size size;p = p-nxt;if (tar != NULL) / 分配大小为size的区间subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode);node-addr = tar-addr + size;node-size = tar-size - size;node-state = Fr

7、ee;node-taskId = -1;/ 修改分区链节点指针node-pre = tar;node-nxt = tar-nxt;if (tar-nxt != NULL) tar-nxt-pre = node;tar-nxt = node;/ 分配空闲区间tar-size = size;tar-state = Busy;tar-taskId = taskId;printf(内存分配成功!n);return 1;elseprintf(找不到合适的内存分区,分配失败.n);return 0;/ 回收内存 int freeSubArea(int taskId) int flag = 0;subAre

8、aNode *p = subHead.nxt, *pp;while (p != NULL)if (p-state = Busy & p-taskId = taskId)flag = 1;if (p-pre != &subHead & p-pre-state = Free)& (p-nxt != NULL & p-nxt-state = Free)/ 情况1:合并上下两个分区/ 先合并上区间pp = p;p = p-pre;p-size += pp-size;p-nxt = pp-nxt;pp-nxt-pre = p;free(pp);/ 后合并下区间pp = p-nxt;p-size += p

9、p-size;p-nxt = pp-nxt;if (pp-nxt != NULL) pp-nxt-pre = p;free(pp);else if (p-pre = &subHead | p-pre-state = Busy)& (p-nxt != NULL & p-nxt-state = Free) / 情况2:只合并下面的分区pp = p-nxt;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 !=

10、 &subHead & p-pre-state = Free)& (p-nxt = NULL | p-nxt-state = Busy) / 情况3:只合并上面的分区pp = p;p = p-pre;p-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 / 找不到目标作业,回收失

11、败printf(找不到目标作业,内存分区回收失败.n);return 0;/ 显示空闲分区链情况void showSubArea()printf(*n);printf( 当前的内存分配情况如下: n);printf(*n);printf( 起始地址 | 空间大小 | 工作状态 | 作业号 n);subAreaNode *p = subHead.nxt;while (p != NULL)printf(*-*n);printf(*);printf( %3d k |, p-addr);printf( %3d k |, p-size);printf( %s |, p-state = Free ? Fr

12、ee : Busy);if (p-taskId 0) printf( %2d , p-taskId);elseprintf( );printf(*n);p = p-nxt;printf(*n);int main()int option, ope, taskId, size;/ 初始化空闲分区链intSubArea(); / 模拟动态分区分配算法while (1)printf(n);/printf(*n);printf( 1: 分配内存 2: 回收内存 0: 退出 n);printf(*n);scanf(%d, &ope);if (ope = 0) break;if (ope = 1) / 模拟

13、分配内存printf(请输入作业号: );scanf(%d, &taskId);printf(请输入需要分配的内存大小(KB): );scanf(%d, &size);if (size = 0) printf(错误:分配内存大小必须为正值n);continue;/ 调用分配算法bestFit(taskId, size);/ 显示空闲分区链情况showSubArea();else if (ope = 2)/ 模拟回收内存printf(请输入要回收的作业号: );scanf(%d, &taskId);freeSubArea(taskId);/ 显示空闲分区链情况showSubArea();else printf(错误:请输入 0/1/2n);printf(分配算法模拟结束n);system(pause);return 0;实验总结:通过本次实验,基本实现了内存分配和内存回收,内存分配中所运用的算法是最佳适应分配算法,但是该程序没有实现紧凑性,程序其他方面没有问题。实验评语:实验成绩教师签名

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1