OS课程设计模拟内存分配算法MFC实现_第1页
OS课程设计模拟内存分配算法MFC实现_第2页
OS课程设计模拟内存分配算法MFC实现_第3页
OS课程设计模拟内存分配算法MFC实现_第4页
OS课程设计模拟内存分配算法MFC实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、义了进程的名称和大小,进程内存起始地址和进程状态。内存分区表采用单链表来模拟实现。关键词:固定分区分配、动态分区分配、可重定位分区分配。目录1. 概述 .42. 课程设计任务及要求 2.1 设计任务 .4 2.2 设计要求 .43. 算法及数据结构算法的总体思想(流程)5 3.2 PCB模块 功能(运算).5 数据结构(存储结构).5 3.2.3 算法(实现).5 3.3 进程队列模块 功能6 数据结构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;/进程nameStatus st

5、atus;/进程状态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();/固定分区分配初始化空闲内存链表bool A

6、llocProFixed(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:Queue(

7、)/默认头结点数据first = new Node;first-data.lStartAddres=0;=;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=p-n

8、ext;if (p-data.status=free)n+=p-data.Size;return n;/void Queue:Show()/Node *p=first;/while(p-next)/p=p-next;/cout分区号:endl;/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;Nod

9、e *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.status=free;tmp.lStartAddres=i*perSize+1;tmp.Size=perSize;Node *s= n

10、ew 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)=_name;p-data.status=busy;return true;return false;void Queue:SortList()Node *p=NULL;Node *q=NULL;for(p=first-next

11、;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=free&p-

12、data.Size=_size)=_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.lStartAddres;s

13、-data.Size=_size;=_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;=_name;s-data.Size=_size;s-data.status=busy;p-data.Size=tmp;s-next=p-next;p-next=

14、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;=_name;s-data.Size=_size;s-data.status=busy;q-data.Size=ch;

15、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 (=_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=free)p-

16、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.sta

17、tus=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-data.S

18、ize_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.status=free;return true;return false;四:程序设计与实现。流程图固定分区分配流程图:默认1000KB内存大小总共分为20个相等大小分区动态分区分配算法:可重定位分区分配算法:实验结果:五:收获,体会和建议此次课程设计让我进一步加深了对操作系统内存分配算法的的理解,此次试验自己花了不少时间研究课本和课外资料,在写可重定位分区分配算法遇到了内存紧凑算法方面的难题,如何

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论