动态分区存储管理讲解.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系统》课程实验报告实验名称:动态分区存储管理班级: **************** 学号: ************* 姓名:************** 指导老师: *************** 成绩:实验目的:1.熟悉并掌握动态分区分配的各种算法。 2.熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。二、实验内容:用高级语言模拟实现动态分区存储管理,要求:分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出来。(注意:不存在的作业号要给出错误提示!)分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)三、实验代码#includestdio.h#includestdlib.h#define SIZE 800 // 内存初始大小#define MINSIZE 5 // 碎片最小值enum STATE { Free, Busy };structsubAreaNode {intaddr; // 起始地址int size; // 分区大小inttaskId; // 作业号 STATE state; // 分区状态subAreaNode *pre; // 分区前向指针subAreaNode *nxt; // 分区后向指针}subHead;// 初始化空闲分区链voidintSubArea(){ // 分配初始分区内存subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode)); // 给首个分区赋值fir-addr = 0;fir-size = SIZE;fir-state = Free;fir-taskId = -1;fir-pre = subHead;fir-nxt = NULL; // 初始化分区头部信息subHead.pre = NULL;subHead.nxt = fir;}// 首次适应算法intfirstFit(inttaskId, int size){subAreaNode *p = subHead.nxt;while(p != NULL) {if(p-state == Free p-size = size) { // 找到要分配的空闲分区if(p-size - size = MINSIZE) { // 整块分配p-state = Busy;p-taskId = taskId; } else { // 分配大小为size的区间subAreaNode *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; }printf(内存分配成功!\n);return 1; } p = p-nxt; }printf(找不到合适的内存分区,分配失败...\n);return 0;}// 最佳适应算法intbestFit(inttaskId, int size){subAreaNode *tar = NULL;inttarSize = SIZE + 1;subAreaNode *p = subHead.nxt;while(p != NULL) { // 寻找最佳空闲区间if

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档