OS课程设计模拟内存分配算法MFC实现-毕业论文.docx

上传人:scccc 文档编号:11146330 上传时间:2021-07-05 格式:DOCX 页数:27 大小:280.88KB
返回 下载 相关 举报
OS课程设计模拟内存分配算法MFC实现-毕业论文.docx_第1页
第1页 / 共27页
OS课程设计模拟内存分配算法MFC实现-毕业论文.docx_第2页
第2页 / 共27页
OS课程设计模拟内存分配算法MFC实现-毕业论文.docx_第3页
第3页 / 共27页
OS课程设计模拟内存分配算法MFC实现-毕业论文.docx_第4页
第4页 / 共27页
OS课程设计模拟内存分配算法MFC实现-毕业论文.docx_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《OS课程设计模拟内存分配算法MFC实现-毕业论文.docx》由会员分享,可在线阅读,更多相关《OS课程设计模拟内存分配算法MFC实现-毕业论文.docx(27页珍藏版)》请在三一文库上搜索。

1、课程设计报告设计题目:内存的连续分配算法班级 : 学号:姓名:指导老师:设计时间:摘要1、 主要算法包括:固定分区分配、动态分区分配、伙伴算法、可重定位分区分配。2、内容要求:1)定义与算法相关的数据结构,如PCB,空闲分区表;2)至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何种算法;3)在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能;4)动态分区分配和可重定位分区分配必选一个实现。本系统模拟了操作系统内存分配算法的实现,实现了固定分区分配和动态分区分配,以及可重定位分区分配算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进

2、程状态。内存分区表采用单链表来模拟实现。关键词:固定分区分配、动态分区分配、可重定位分区分配。目录1. 概述 .42. 课程设计任务及要求 2.1 设计任务 .4 2.2 设计要求 .43. 算法及数据结构 3.1算法的总体思想(流程)5 3.2 PCB模块 3.2.1 功能(运算).53.2.2 数据结构(存储结构).5 3.2.3 算法(实现).5 3.3 进程队列模块 3.3.1功能63.3.2 数据结构6 3.3.3算法64. 程序设计与实现 4.1 程序流程图.7 4.2 程序说明(代码) 4.3 实验结果.95. 结论.106. 参考文献。.107. 收获、体会和建议。.10一:概

3、述本系统模拟了操作系统内存分配算法的实现,实现了固定分区分配和动态分区分配,以及可重定位分区分配算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进程状态。内存分区表采用单链表来模拟实现。固定分区实现就是将单链表的每个节点的大小设为固定大小,系统默认如果按固定分区分配的话,只能分成20个相等大小的分区,因此系统只能最多运行20个进程。动态分区的实现是根据进程所申请的内存大小来决定动态的有系统进行分配内存空间大小,因此分区表里的空闲分区个数是不定的,根据进程数和进程大小决定的。可重定位分区算法比动态分区算法增加了紧凑和进程对换的功能。二:课程设计任务及要求设计任

4、务:使用C+ MFC实现模拟操作系统内存分配算法的实现,定义结构体数据结构表示进程,定义单链表表示内存分区表。设计要求:定义与算法相关的数据结构,如PCB,空闲分区表;至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何种算法;在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能;动态分区分配和可重定位分区分配必选一个实现。三:算法及数据结构#define free 0/表示进程状态空闲#define busy 1/表示进程状态忙typedef int Status;/表示进程状态struct PCB/表示进程PCB结构体CString name;/进程nameStatu

5、s status;/进程状态busy or freeint lStartAddres;/进程起始地址int Size;/进程大小;struct Node/表示组成链表的结点结构体PCB data;Node *next;class Queue/表示分区表的单链表类public:Queue();Queue()/void Show();/内存区分配情况显示int GetLength();int GetAllFree();/获得所有空闲分区总大小void InitialMemory(int );/初始化内存区域大小void FixedPartitonAlloc();/固定分区分配初始化空闲内存链表bo

6、ol AllocProFixed(CString ,int );/为进程分配内存(执行固定分区分配算法)bool AllocProDynamic(CString ,int );/为进程分配内存(动态分区分配)boolFreeMemory(CString );/释放进程内存bool AllMerge(int );/内存紧凑分区算法bool Swaping(int ,PCB&);/进程对换算法Node *GetFirst();/返回头结点void Clear();/链表节点清除private:Node *first;#include StdAfx.h#include Queue.hQueue:Qu

7、eue()/默认头结点数据first = new Node;first-data.lStartAddres=0;first-data.name=;first-data.Size=0;first-data.status=busy;first-next=NULL;int Queue:GetLength()int n=0;Node *p=first;while(p-next)p=p-next;n+;return n;Node *Queue:GetFirst()return first;int Queue:GetAllFree()int n=0;Node *p=first;while(p-next)p

8、=p-next;if (p-data.status=free)n+=p-data.Size;return n;/void Queue:Show()/Node *p=first;/while(p-next)/p=p-next;/cout分区号:data.nameendl;/cout分区状态:data.status=busy ?busy:free)endl;/cout分区起始地址:data.lStartAddresendl;/cout分区大小:data.Sizeendl;/coutdata=tmp;first-next=s;s-next=NULL;void Queue:Clear()Node *q

9、;Node *p=first-next;while(p-next)q=p;p=p-next;delete q;void Queue:FixedPartitonAlloc()PCB tmp;int AllSize=first-next-data.Size;int perSize=AllSize/20;first-next-data.Size=perSize;Node *p= first;for (int i=1;inext)p=p-next;tmp.name=;tmp.status=free;tmp.lStartAddres=i*perSize+1;tmp.Size=perSize;Node *

10、s= new Node;s-data=tmp;p-next=s;s-next=NULL;bool Queue:AllocProFixed(CString _name,int _size)PCB tmp;Node *p= first;while(p-next)p=p-next;if (p-data.Size=_size&p-data.status=free)p-data.name=_name;p-data.status=busy;return true;return false;void Queue:SortList()Node *p=NULL;Node *q=NULL;for(p=first-

11、next;p-next;p=p-next)for (q=p-next;q;q=q-next)if (p-data.Sizeq-data.Size)PCB tmp;tmp=p-data;p-data=q-data;q-data=tmp;/动态分区分配算法(最佳适应算法)bool Queue:AllocProDynamic(CString _name,int _size)Node *p=first;Node *q=NULL;/用来记录最佳插入点位置int ch=0;/用来记录最小碎片值while(p-next)p=p-next;/分区大小正好和进程大小相等if (p-data.status=fre

12、e&p-data.Size=_size)p-data.name=_name;p-data.status=busy;return true;if (p-data.status=free&p-data.Size_size)ch=p-data.Size-_size;q=p;break;/*/分区大小大于进程大小,分割分区,并按大小分区排序if (p-data.Size_size&p-data.status=free)Node *s=new Node;int tmp=p-data.Size-_size;if (tmp_size)s-data.lStartAddres=p-data.lStartAddr

13、es;s-data.Size=_size;s-data.name=_name;s-data.status=busy;p-data.lStartAddres+=_size;p-data.Size=tmp;s-next=q-next;q-next=s;SortList();/对分区链表进行按大小有小到大排序return true;elses-data.lStartAddres=p-data.lStartAddres+tmp;s-data.name=_name;s-data.Size=_size;s-data.status=busy;p-data.Size=tmp;s-next=p-next;p-n

14、ext=s;SortList();/对分区链表进行按大小有小到大排序return true;*/while(p)if (p-data.status=free&p-data.Size=_size)if (p-data.Size-_sizedata.Size-_size;q=p;p=p-next;if(q=NULL)return false;elseNode *s=new Node;s-data.lStartAddres=q-data.lStartAddres+ch;s-data.name=_name;s-data.Size=_size;s-data.status=busy;q-data.Size

15、=ch;s-next=q-next;q-next=s;return true;bool Queue:FreeMemory(CString _name)Node *p=first;Node *q;while(p-next)q=p;p=p-next;if (p-data.name=_name)p-data.name=;p-data.status=free;/进行相邻分区合并if (q-data.status=free)q-data.Size+=p-data.Size;q-next=p-next;/判断是否为链表尾if (p-next!=NULL)if (p-next-data.status=fre

16、e)p-data.Size+=p-next-data.Size;p-next=p-next-next;return true;return false;bool Queue:AllMerge(int _size)Node *p=first;Node *q;int sum=0;bool flag=true;/标志是否为第一次找到free分区while(p-next)while(p-next)q=p;p=p-next;if (p-data.status=free&flag)sum=p-data.Size;q-next=p-next;flag=false;break;if (!flag&p-data

17、.status=busy)/对数据进行重定位p-data.lStartAddres-=sum;if (p-data.status=free&!flag)p-data.Size+=sum;/对数据进行重定位p-data.lStartAddres-=sum;if (p-data.Size=_size)return true;q-next=p-next;sum=p-data.Size;break;while(p)q=p;p=p-next;if (p-data.status=free)p-data.Size+=sum;/对数据进行重定位p-data.lStartAddres-=sum;if (p-da

18、ta.Size_size)return true;q-next=p-next;sum=p-data.Size;break;else/对数据进行重定位p-data.lStartAddres-=sum;return false;bool Queue:Swaping(int needSize ,PCB &pro)Node *p=first;/Node *q;while(p-next)p=p-next;if (p-data.Size=needSize)pro=p-data;p-data.name=;p-data.status=free;return true;return false;四:程序设计与实

19、现。流程图固定分区分配流程图:默认1000KB内存大小总共分为20个相等大小分区动态分区分配算法:可重定位分区分配算法:实验结果:五:收获,体会和建议此次课程设计让我进一步加深了对操作系统内存分配算法的的理解,此次试验自己花了不少时间研究课本和课外资料,在写可重定位分区分配算法遇到了内存紧凑算法方面的难题,如何对内存剩余空间大小进行紧凑利用,花了好些时间不断的实验,不断的调试代码,最后终于写好了,并加以测试代码的健壮性,完成并测试了本次操作系统课程设计。期间虽然遇到了很多困难,但自己最后因为这些困难而收获到了不少知识,加强了自己动手写代码的能力,对代码调式技术进一步掌握,对操作系统也产生了更浓厚的兴趣,自己一定还要多花时间研究操作系统,争取进一步理解操作系统并能够将优秀算法加以运用到自己以后的代码中。六:参考资料和书籍。Visual C+深入讲解 孙鑫计算机操作系统汤子瀛C+程序设计谭浩强PS:如果程序不能正确编译成功,请换用VS2008编译,并尝试删除Debug目录下的.pch文件27

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1