操作系统课程设计_可变分区存储管理.doc

上传人:公**** 文档编号:559769565 上传时间:2023-05-27 格式:DOC 页数:13 大小:117.32KB
返回 下载 相关 举报
操作系统课程设计_可变分区存储管理.doc_第1页
第1页 / 共13页
操作系统课程设计_可变分区存储管理.doc_第2页
第2页 / 共13页
操作系统课程设计_可变分区存储管理.doc_第3页
第3页 / 共13页
操作系统课程设计_可变分区存储管理.doc_第4页
第4页 / 共13页
操作系统课程设计_可变分区存储管理.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《操作系统课程设计_可变分区存储管理.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计_可变分区存储管理.doc(13页珍藏版)》请在金锄头文库上搜索。

1、工程技术学院电气信息系 操作系统 课程设计报告 专 业: 模拟实现可变分区存储管理一、设计目的在熟练掌握计算机分区存储管理方式的原理的基础上,利用C程序设计语言在windows操作系统下模拟实现操作系统的可变分区存储管理的功能,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。二、各功能模块分析实现1 设计合理的数据结构来描述存储空间:1) 对于未分配出去的部分,用空闲分区链表来描述。struct freeList int startAddress; /* 分区起始地址 */int size; /* 分区

2、大小 */struct freeList *next; /* 分区链表指针 */2) 对于已经分配出去的部分,由装入内存的作业占据。struct usedList int startAddress; /* 分区起始地址 */int jobID; /* 分区中存放作业ID */struct usedList *next; /* 分区链表指针 */3) 将作业组织成链表。struct jobListint id; /* 作业ID */int size; /* 作业大小(需要的存储空间大小) */int status; /* 作业状态 0 : new job ,1 : in the memory ,

3、 2 : finished . */struct jobList *next; /* 作业链表指针 */以上将存储空间分为空闲可占用两部分,在usedlist中设jobID而不设size,可以在不增加空间复杂度(与freelist相比)的同时更方便的实现可变分区存储管理(从后面的一些函数的实现上可以得出这个结论)。尽管设置joblist增加了空间复杂度,但它的存在,使得该程序可以方便的直接利用C盘中的Job.txt文件。该文件可以认为是一个和其他进程共享的资源。通过这个文件,其他进程写入数据供读取。这中思想在操作系统设计中体现的很多。2 实现分区存储管理的内存分配功能,选择适应算法(首次适应算

4、法,最佳适 应算法,最后适应算法,最坏适应算法)。基本原理分析: 1) Best fit :将空闲分区按大小从小到大排序,从头找到大小合适的分区。2) Worst fit:将空闲分区按大小从大到小排序,从头找到大小合适的分区。3) First fit :将空闲分区按起始地址大小从小到大排序,4) Last fit :将空闲分区按起始地址大小从大到小排序,由此,可将空闲分区先做合适的排序后用对应的适应算法给作业分配存储空间。排序函数 order(bySize为零则按分区大小排序,否则按分区起始地址;inc为零从小到大排序,否则从大到小排序;通过empty指针返回结果)。void order(st

5、ruct freeList *empty,int bySize,int inc)struct freeList *p,*q,*temp;int startAddress,size;for(p = (*empty) - next;p;p = p - next) /* 按bySize和inc两个参数寻找合适的节点,用temp指向它 */for(temp = q = p;q;q = q - next)switch(bySize)case 0 : switch(inc)case 0:if(q-size size)temp = q;break;default:if(q-size temp-size)te

6、mp = q;break; break;default: switch(inc)case 0:if(q-startAddress startAddress)temp = q;break;default:if(q-startAddress temp-startAddress)temp = q;break; break; /* 交换节点的成员值 */ if(temp != p) startAddress = p-startAddress;size = p-size;p-startAddress = temp-startAddress;p-size = temp-size;temp-startAdd

7、ress = startAddress;temp-size = size;3 实现分区存储管理的内存回收算法:void insertFreeNode(struct freeList *empty,int startAddress,int size)插入回收的空节点分区,处理回收分区与空闲分区的四种邻接关系。struct freeList *p,*q,*r; for(p = *empty;p - next;p = p - next) ; /* 处理链表尾部的邻接情况 */if(p = *empty | p - startAddress + p - size next = p - next; /*

8、 插入独立的空闲节点 */p - next = r;return ;if(p - startAddress + p - size = startAddress) /* 与尾部上邻 */p - size += size; /* 合并尾部节点 */return ;q = (*empty) - next; /* 处理链表首节点的邻接情况 */if(startAddress + size = q - startAddress) /* 与首节点下邻 */q - startAddress = startAddress; /* 合并首节点 */q - size += size;else if(startAd

9、dress + size startAddress) /* 与首节点不相邻 */makeFreeNode(&r,startAddress,size);r - next = (*empty) - next;(*empty) - next = r;else /* 处理链表中间的邻接情况 */while(q - next & q - startAddress next;if(p - startAddress + p - size = startAddress & q - startAddress = startAddress + size) /* 上下邻,合并节点 */p - size += siz

10、e + q - size;p - next = q - next;free(q); /* 删除多余节点 */else if(p - startAddress + p - size = startAddress & q - startAddress != startAddress + size) /*上邻,增加节点的大小*/p - size += size;else if(p - startAddress + p - size != startAddress & q - startAddress = startAddress + size) /* 下邻 */q - startAddress =

11、startAddress; /* 修改节点起始地址 */q - size += size; /* 修改节点的大小 */else /* 上下不相邻 */makeFreeNode(&r,startAddress,size);r - next = p - next;p - next = r;4 当碎片产生时,进行碎片的拼接。void moveFragment(struct jobList *jobs,struct freeList *empty,struct usedList *used)int size,status;struct usedList *p;int address = memoryS

12、tartAddress; /*全局变量,初始化时分配存储空间始址*/if(*empty)-next = NULL) /* 空闲分区链表为空,提示并返回 */printf(nThe memory was used out at all.nMay be you should finish some jobs first or press any key to try again !);getch();return;for(p = (*used) - next;p;p = p- next) /* 循环的修改占用分区的始址 */p - startAddress = address;getJobInfo(jobs,p - jobID,&size,&status)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号