- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系统》课程设计说明书题 目:模拟实现可变分区存储管理班 级:学 号:姓 名:指导老师:1.目的和要求在熟练掌握计算机分区存储管理方式的原理的基础上,利用一种程序设计语言模拟实现操作系统的可变分区存储管理的功能,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。2.设计内容设计合理的数据结构来描述存储空间:对于未分配出去的部分,可以用空闲分区队列或空闲分区链表来描述,对于已经分配出去的部分,由装入内存的作业占据,可以将作业组织成链表或数组。实现分区存储管理的内存分配功能,实现两种适应算法:首次适应算法,最坏适应算法。实现分区存储管理的内存回收算法:要求能够正确处理回收分区与空闲分区的四种邻接关系。当碎片产生时,能够进行碎片的拼接。3.设计环境Windows操作系统、DEV C++C语言4.程序概要(1)数据结构和全局变量int type = 0; //算法类型//空闲分区struct freelink {int len;//len为分区长度 int address; //address为分区起始地址struct freelink *next;};//占用分区struct busylink {char name; //作业或进程名,name=S 表示OS占用int len;int address;struct busylink *next;};struct freelink*free_head = NULL; //自由链队首指针 struct busylink *busy_head = NULL,//占用区队首指针 *busy_tail = NULL; //占用区队尾指针(2)功能模块划分大体上可以将整个程序的模块划分成如下几个部分:1)主模块:主要是初始化(设置物理内存的用户区的大小,选取适应算法)和界面,界面参考如下:2)内存分配算法(实现两种适应算法:最坏适应算法,首次适应算法)3)内存回收算法(考虑四种邻接情况,尤其是采用最佳(坏)适应算法时的分区合并)4)碎片拼接算法5)空闲分区队列显示6)占用分区队列显示各函数调用关系主要函数流程图allocateMemoByWF();//两种算法分配回收大致相同,在这里只列举一种compactMemo()freeMemoByWF()源代码#include stdio.h#include stdlib.h#define MAX_SIZE 512//系统能分配的最大内存 #define FALSE 0#define TRUE 1int type = 0; //算法类型//空闲分区struct freelink {int len;//len为分区长度 int address; //address为分区起始地址struct freelink *next;};//占用分区struct busylink {char name; //作业或进程名,name=S 表示OS占用int len;int address;struct busylink *next;};struct freelink*free_head = NULL; //自由链队列(带头结点)队首指针 struct busylink *busy_head = NULL,//占用区队列队(带头结点)首指针 *busy_tail = NULL; //占用区队列队尾指针//初始化 void init() {struct freelink *p;struct busylink *q;free_head = (struct freelink*)malloc(sizeof(struct freelink));free_head-next = NULL; // 创建自由链头结点busy_head = busy_tail = (struct busylink*)malloc(sizeof(struct busylink));busy_head-next = NULL; // 创建占用链头结点p = (struct freelink *)malloc(sizeof(struct freelink));p-address = 64;p-len = MAX_SIZE - 64; //(OS占用了64K)p-next = NULL; free_head-next = p;q = (struct
文档评论(0)