1、 电气信息系 操作系统操作系统 课程设计报告课程设计报告 模拟实现模拟实现可变分区存储管理可变分区存储管理 一、设计目的一、设计目的 在熟练掌握计算机分区存储管理方式的原理的基础上,利用 C 程序设计语 言在 windows 操作系统下模拟实现操作系统的可变分区存储管理的功能,一方 面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能 力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。 二、各功能模块分析实现二、各功能模块分析实现 1 设计合理的数据结构来描述存储空间:设计合理的数据结构来描述存储空间: 1) 对于未分配出去的部分,用空闲分区链表来描对于未分配
2、出去的部分,用空闲分区链表来描述。述。 struct freeList int startAddress; /* 分区起始地址 */ int size; /* 分区大小 */ struct freeList *next; /* 分区链表指针 */ 2) 对于已经分配出去的部分,由装入内存的作业占据。对于已经分配出去的部分,由装入内存的作业占据。 struct usedList int startAddress; /* 分区起始地址 */ int jobID; /* 分区中存放作业 ID */ struct usedList *next; /* 分区链表指针 */ 3) 将作业组织成链表。将作业
3、组织成链表。 struct jobList int id; /* 作业 ID */ int size; /* 作业大小(需要的存储空间大小) */ int status; /* 作业状态作业状态 0 : new job ,1 : in the memory , 2 : finished . */ struct jobList *next; /* 作业链表指针 */ 以上将存储空间分为空闲可占用两部分, 在 usedlist 中设 jobID 而不设 size,可以在不增加空间复杂度(与 freelist 相比)的同时更方便的实现可 变分区存储管理(从后面的一些函数的实现上可以得出这个结论) 。
4、 尽管设置 joblist 增加了空间复杂度,但它的存在,使得该程序可以方 便的直接利用 C 盘中的 Job.txt 文件。 该文件可以认为是一个和其他进程共 享的资源。通过这个文件,其他进程写入数据供读取。这中思想在操作系 统设计中体现的很多。 2 实现分区存储管理的内存分配功能,选择适应算法(首次适应算法,最佳适实现分区存储管理的内存分配功能,选择适应算法(首次适应算法,最佳适 应算法,最后适应算法,最坏适应算法) 。应算法,最后适应算法,最坏适应算法) 。 基本原理分析:基本原理分析: 1) Best fit :将空闲分区按大小从小到大排序,从头找到大小合适的分区。 2) Worst f
5、it:将空闲分区按大小从大到小排序,从头找到大小合适的分区。 3) First fit :将空闲分区按起始地址大小从小到大排序, 4) Last fit :将空闲分区按起始地址大小从大到小排序, 由此,可将空闲分区先做合适的排序后用对应的适应算法给作业分配存 储空间。排序函数 order(bySize 为零则按分区大小排序,否则按分区起始地 址;inc 为零从小到大排序,否则从大到小排序;通过 empty指针返回结果) 。 void order(struct freeList *empty,int bySize,int inc) struct freeList *p,*q,*temp; int
6、 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) temp = q;break; break; default: switch(inc) case 0:if(q-startAddress startAddress) temp = q;break; default:if(q-startAddress temp-startAddress) tem