欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《OS课程设计模拟内存分配算法MFC实现》.docx

    • 资源ID:62419147       资源大小:268.42KB        全文页数:27页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《OS课程设计模拟内存分配算法MFC实现》.docx

    课程设计报告设计题目:内存的连续分配算法班级 : 学号:姓名:指导老师:设计时间:摘要1、 主要算法包括:固定分区分配、动态分区分配、伙伴算法、可重定位分区分配。2、内容要求:1定义与算法相关的数据结构,如PCB,空闲分区表;2至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何种算法;3在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能;4动态分区分配和可重定位分区分配必选一个实现。本系统模拟了操作系统内存分配算法的实现,实现了固定分区分配和动态分区分配,以及可重定位分区分配算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进程状态。内存分区表采用单链表来模拟实现。关键词:固定分区分配、动态分区分配、可重定位分区分配。目录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一:概述本系统模拟了操作系统内存分配算法的实现,实现了固定分区分配和动态分区分配,以及可重定位分区分配算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进程状态。内存分区表采用单链表来模拟实现。固定分区实现就是将单链表的每个节点的大小设为固定大小,系统默认如果按固定分区分配的话,只能分成20个相等大小的分区,因此系统只能最多运行20个进程。动态分区的实现是根据进程所申请的内存大小来决定动态的有系统进行分配内存空间大小,因此分区表里的空闲分区个数是不定的,根据进程数和进程大小决定的。可重定位分区算法比动态分区算法增加了紧凑和进程对换的功能。二:课程设计任务及要求设计任务:使用C+ MFC实现模拟操作系统内存分配算法的实现,定义结构体数据结构表示进程,定义单链表表示内存分区表。设计要求:定义与算法相关的数据结构,如PCB,空闲分区表;至少实现两种以上分配算法,且用户可以选择在某次执行过程中使用何种算法;在使用动态分区分配或可重定位分区分配算法时必须实现紧凑和对换功能;动态分区分配和可重定位分区分配必选一个实现。三:算法及数据结构#define free 0/表示进程状态空闲#define busy 1/表示进程状态忙typedef int Status;/表示进程状态struct PCB/表示进程PCB结构体CString name;/进程nameStatus 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();/固定分区分配初始化空闲内存链表bool AllocProFixed(CString ,int );/为进程分配内存(执行固定分区分配算法)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 Node;first->=0;first->data.name=""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->=free)n+=p->return n;/void Queue:Show()/Node *p=first;/while(p->next)/p=p->next;/cout<<"分区号:"<<p->data.name<<endl;/cout<<"分区状态:"<<(p->=busy ?"busy":"free")<<endl;/cout<<"分区起始地址:"<<p-><<endl;/cout<<"分区大小:"<<p-><<endl;/cout<<"-n"/void Queue:InitialMemory(int i)PCB tmp;tmp.name=""=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)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;tmp.name=""=free;=i*perSize+1;=perSize;Node *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->>=_size&&p->=free)p->data.name=_name;p->=busy;return true;return false;void Queue:SortList()Node *p=NULL;Node *q=NULL;for(p=first->next;p->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;/分区大小正好和进程大小相等if (p->=free&&p->=_size)p->data.name=_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->=_size;s->data.name=_name;s->=busy;p->+=_size;p->=tmp;s->next=q->next;q->next=s;SortList();/对分区链表进行按大小有小到大排序return true;elses->=p->data.lStartAddres+tmp;s->data.name=_name;s->=_size;s->=busy;p->=tmp;s->next=p->next;p->next=s;SortList();/对分区链表进行按大小有小到大排序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->data.name=_name;s->=_size;s->=busy;q->=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->=free;/进行相邻分区合并if (q->=free)q->+=p->q->next=p->next;/判断是否为链表尾if (p->next!=NULL)if (p->next->=free)p->+=p->next->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&&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=first;/Node *q;while(p->next)p=p->next;if (p->>=needSize)pro=p->data;p->data.name=""p->=free;return true;return false;四:程序设计与实现。流程图固定分区分配流程图:默认1000KB内存大小总共分为20个相等大小分区动态分区分配算法:可重定位分区分配算法:实验结果:五:收获,体会和建议此次课程设计让我进一步加深了对操作系统内存分配算法的的理解,此次试验自己花了不少时间研究课本和课外资料,在写可重定位分区分配算法遇到了内存紧凑算法方面的难题,如何对内存剩余空间大小进行紧凑利用,花了好些时间不断的实验,不断的调试代码,最后终于写好了,并加以测试代码的健壮性,完成并测试了本次操作系统课程设计。期间虽然遇到了很多困难,但自己最后因为这些困难而收获到了不少知识,加强了自己动手写代码的能力,对代码调式技术进一步掌握,对操作系统也产生了更浓厚的兴趣,自己一定还要多花时间研究操作系统,争取进一步理解操作系统并能够将优秀算法加以运用到自己以后的代码中。六:参考资料和书籍。?Visual C+深入讲解? 孙鑫?计算机操作系统?汤子瀛?C+程序设计?谭浩强PS:如果程序不能正确编译成功,请换用VS2021编译,并尝试删除Debug目录下的.pch文件

    注意事项

    本文(《OS课程设计模拟内存分配算法MFC实现》.docx)为本站会员(e****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开