




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告设计题目:内存的连续分配算法班级 : 学号:姓名:指导老师:设计时间:摘要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个进程。动态分区的实现是根据进程所申请的内存大小来决定动态的有系统进行分配内存空间大小,因此分区表里的空闲分区个数是不定的,根据进程数和进程大小决定的。可重定位分区算法比动态分区算法增加了紧凑和进程对换的功能。二:课程设计任务及要求设计任务:使用C+ MFC实现模拟操作系统内存分配算法的实现,定义结构体数据结构表示
4、进程,定义单链表表示内存分区表。设计要求:定义与算法相关的数据结构,如PCB,空闲分区表;至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何种算法;在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能;动态分区分配和可重定位分区分配必选一个实现。三:算法及数据结构#define free 0/表示进程状态空闲#define busy 1/表示进程状态忙typedef int Status;/表示进程状态struct PCB/表示进程PCB结构体CString name;/进程nameStatus status;/进程状态busy or freeint lStartAdd
5、res;/进程起始地址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 AllocProFixed(CString ,int );/为进程分配内
6、存(执行固定分区分配算法)bool AllocProDynamic(CString ,int );/为进程分配内存动态分区分配boolFreeMemory(CString );/释放进程内存bool AllMerge(int );/内存紧凑分区算法bool Swaping(int ,PCB&);/进程对换算法Node *GetFirst();/返回头结点void Clear();/链表节点去除private:Node *first;#include ""#include ""Queue:Queue()/默认头结点数据first = new Nod
7、e;first->=0;first->=""first->=0;first->=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->next;if (p->
8、=free)n+=p->return n;/void Queue:Show()/Node *p=first;/while(p->next)/p=p->next;/cout<<"分区号:"<<p-><<endl;/cout<<"分区状态:"<<(p->=busy ?"busy":"free")<<endl;/cout<<"分区起始地址:"<<p->&
9、lt;<endl;/cout<<"分区大小:"<<p-><<endl;/cout<<"-n"/void Queue:InitialMemory(int i)PCB tmp;=""=free;=0;=i;Node *s=new Node;s->data=tmp;first->next=s;s->next=NULL;void Queue:Clear()Node *q;Node *p=first->next;while(p->next)
10、q=p;p=p->next;delete q;void Queue:FixedPartitonAlloc()PCB tmp;int AllSize=first->next->int perSize=AllSize/20;first->next->=perSize;Node *p= first;for (int i=1;i<20;i+)while(p->next)p=p->next;=""=free;=i*perSize+1;=perSize;Node *s= new Node;s->data=tmp;p-
11、>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->>=_size&&p->=free)p->=_name;p->=busy;return true;return false;void Queue:SortList()Node *p=NULL;Node *q=NULL;for(p=first->next;p-
12、>next;p=p->next)for (q=p->next;q;q=q->next)if (p->>q->)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;/分区大小正
13、好和进程大小相等if (p->=free&&p->=_size)p->=_name;p->=busy;return true;if (p->=free&&p->>_size)ch=p->-_size;q=p;break;/*/分区大小大于进程大小,分割分区,并按大小分区排序if (p->>_size&&p->=free)Node *s=new Node;int tmp=p->-_size;if (tmp>_size)s->=p->s->
14、;=_size;s->=_name;s->=busy;p->+=_size;p->=tmp;s->next=q->next;q->next=s;SortList();/对分区链表进行按大小有小到大排序return true;elses->=p->data.lStartAddres+tmp;s->=_name;s->=_size;s->=busy;p->=tmp;s->next=p->next;p->next=s;SortList();/对分区链表进行按大小有小到大
15、排序return true;*/while(p)if (p->=free&&p->>=_size)if (p->-_size<ch)ch=p->-_size;q=p;p=p->next;if(q=NULL)return false;elseNode *s=new Node;s->=q->data.lStartAddres+ch;s->=_name;s->=_size;s->=busy;q->=ch;s->next=q->next;q->next=s;return t
16、rue;bool Queue:FreeMemory(CString _name)Node *p=first;Node *q;while(p->next)q=p;p=p->next;if (p->=_name)p->=""p->=free;/进行相邻分区合并if (q->=free)q->+=p->q->next=p->next;/判断是否为链表尾if (p->next!=NULL)if (p->next->=free)p->+=p->next->
17、;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->=free&&flag)sum=p->q->next=p->next;flag=false;break;if (!flag&&
18、p->=busy)/对数据进行重定位p->-=sum;if (p->=free&&!flag)p->+=sum;/对数据进行重定位p->-=sum;if (p->>=_size)return true;q->next=p->next;sum=p->break;while(p)q=p;p=p->next;if (p->=free)p->+=sum;/对数据进行重定位p->-=sum;if (p->>_size)return true;q->next=p->next;sum=p->break;else/对数据进行重定位p->-=sum;return false;bool Queue:Swaping(int needSize ,PCB &pro)Node *p=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- x小产权购房合同范例
- 乡村树苗销售合同标准文本
- 人武部劳动合同样本
- 企业招标合同标准文本
- 农村别墅合同标准文本标准文本
- 网络教育专升本毕业生学习经验自我鉴定
- 幼儿园2024-2025学年环境改善计划
- 数字化时代的会计信息化发展趋势
- 园林绿化行政审批工作职责
- 深度学习在交通管理中的创新应用心得体会
- 国家职业技能标准 (2021年版) 婴幼儿发展引导员
- 幼儿园小班科学:《小鸡和小鸭》 PPT课件
- 伯努利方程-ppt课件
- 银行从业资格考试题库附参考答案(共791题精心整理)
- 年产20吨阿齐沙坦原料药生产车间的设计和实现材料学专业
- 沪宁城际接触网专业验收标准
- 电子公章模板
- 安徽省融资性担保公司代偿损失核销管理暂行办法
- 第3章轨道车辆牵引计算
- 基于JSP的校园网站的设计与实现论文
- 足球比赛登记表
评论
0/150
提交评论