内存管理模型的设计实现分析

上传人:新** 文档编号:561509378 上传时间:2022-12-01 格式:DOC 页数:11 大小:106KB
返回 下载 相关 举报
内存管理模型的设计实现分析_第1页
第1页 / 共11页
内存管理模型的设计实现分析_第2页
第2页 / 共11页
内存管理模型的设计实现分析_第3页
第3页 / 共11页
内存管理模型的设计实现分析_第4页
第4页 / 共11页
内存管理模型的设计实现分析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《内存管理模型的设计实现分析》由会员分享,可在线阅读,更多相关《内存管理模型的设计实现分析(11页珍藏版)》请在金锄头文库上搜索。

1、.操作系统课程实验报告 学生:朋 班 学 号:111131 指导教师: 袁国斌中国地质大学信息工程学院2015年 1月 4日实习题目:存管理模型的设计与实现【需求规格说明】对存的可变分区申请采用链表法管理进展模拟实现。要求:1.对于给定的一个存储空间自己设计数据构造进展管理,可以使用单个链表,也可以使用多个链表,自己负责存储空间的所有管理组织,要求采用分页方式指定单元大小为页,如4K,2K,进程申请以页为单位来组织根本容;2.当进程对存进展空间申请操作时,模型采用一定的策略如:首先利用可用的存进展分配,如果空间不够时,进展存紧缩或其他方案进展处理对进程给予指定的存分配;3.从系统开场启动到多个

2、进程参与申请和运行时,进程最少要有3个以上,每个执行申请的时候都要能够对系统当前的存情况进展查看的接口;4.对存的申请进展存分配,对使用过的空间进展回收,对给定的*种页面调度进展合理的页面分配。5.利用不同的颜色代表不同的进程对存的占用情况,动态更新这些信息。【算法设计】1设计思想:通过建立一个链表,来描述已分配和空闲的存分区。对于每一个分区,它可能存放了*个进程,也可能是两个进程间的空闲区。链表中的每一个结点,分别描述了一个存分区,包括它的起始地址、长度、指向下一个结点的指针以及分区的当前状态。在基于链表的存储管理中,当一个新的进程到来时,需要为它分配存空间,即为它寻找*个空闲分区,该分区的

3、大小必须大于或等于进程的大小.最先匹配法:假设新进程的大小为M,则从链表的首节点开场,将每一个空闲节点的大小与M相比拟,直到找到适宜的节点.这种算法查找的节点很少,因而速度很快.最正确匹配算法:搜索整个链表,将能够装得下该进程的最小空闲区分配出去.最坏匹配法:在每次分配的时候,总是将最大的那个空闲区切去一局部,分配给请求者.它的依据是当一个很大的空闲区被切割成一局部后,可能仍然是一个比拟大的空闲区,从而防止了空闲区越分越小的问题.2设计表示: 分区结点设计:templateclass ChainNodefriend Chain;public:char pro; /存块存放的程序名o 代表操作系

4、统代表空闲区T size; /存块的大小T begin; /存块起始地址ChainNode *link; /下一个存块; template分区链表设计: class Chain public: Chain() first=NULL; Chain(); int ff(int manage,char pro,int size); void assign(ChainNode *q,char pro,int size);/动态分配存 int bf(int manage,char pro,int size);/最正确适应法 int wf(int manage,char pro,int size);/最坏

5、适应法 int delpro(int manage,char pro);/撤销进程,可能要进展存块的合并 void del_pro(int manage); void init(int manage);/存的初始化void assign_pro(int manage); /public:ChainNode *first; ChainNode *p; ;3详细设计表示:Main()childmenu(int manage)/子菜单蹋show()/显示内存使用情况assign_pro(manage)/给进程pro根据选择情况分配存wf(manage,pro,size)bf(manage,pro,s

6、ize)ff(manage,pro,size)/最先适应法 /最正确适应法 /最坏适应法【调试报告】【附录】#include #include #include templateclass ChainNodefriend Chain;public:char pro; /存块存放的程序名o 代表操作系统代表空闲区T size; /存块的大小T begin; /存块起始地址ChainNode *link; /下一个存块; template class Chain public: Chain() first=NULL; Chain(); int ff(int manage,char pro,int

7、size); void assign(ChainNode *q,char pro,int size);/动态分配存 int bf(int manage,char pro,int size);/最正确适应法 int wf(int manage,char pro,int size);/最坏适应法 int delpro(int manage,char pro);/撤销进程,可能要进展存块的合并 void del_pro(int manage); void init(int manage);/存的初始化void assign_pro(int manage); /public:ChainNode *fi

8、rst; ChainNode *p; ;memory *base;/代表存,一个头指针,存总大小为256k/int snum=20,50,30,45,54,52; /void assign(memory *q,char pro,int size);void init(int manage)/存的初始化memory *p,*q;if(base!=NULL)/这一块是释放链表p=base;while(p)q=p-ne*t;delete p;p=q;base=new memory; /操作系统,大小5k,起始地址是0kbase-begin=0;base-pro=o;base-size=5;if(ma

9、nage=0)/静态存,初始化7个存块,第一个存块是操作系统p=base;q=new memory;/空闲块1,大小20,起始地址5kq-begin=5;q-pro=0;q-size=20;p-ne*t=q;p=q;q=new memory;/空闲块2,大小50,起始地址25kq-begin=25;q-pro=0;q-size=50;p-ne*t=q;p=q;q=new memory;/空闲块3,大小30,起始地址75kq-begin=75;q-pro=0;q-size=30;p-ne*t=q;p=q;q=new memory;/空闲块4,大小45,起始地址105kq-begin=105;q-

10、pro=0;q-size=45;p-ne*t=q;p=q;q=new memory;/空闲块5,大小54,起始地址150kq-begin=150;q-pro=0;q-size=54;p-ne*t=q;p=q;q=new memory;/空闲块6,大小52,起始地址204kq-begin=204;q-pro=0;q-size=52;p-ne*t=q;q-ne*t=NULL;else/动态存,只有一个大的存块p=new memory;/空闲块251k,起始地址是5kp-begin=5;p-pro=0;p-size=251;p-ne*t=NULL;base-ne*t=p;void assign(me

11、mory *q,char pro,int size)/动态,给进程pro在存块q-ne*t上分配size大小,q不为空且q-ne*t不为空/因为要进展插入操作,所以传的是要分配存块的前指针memory *p=q-ne*t;memory *temp=new memory;temp=new memory;/代表进程pro的存块temp-begin=p-begin;temp-size=size;temp-pro=pro;q-ne*t=temp;if(p-size!=size)/插入的存块小于空闲区块p-size=p-size-size;p-begin=temp-begin+temp-size;tem

12、p-ne*t=p;else/插入的存块等于空闲区块temp-ne*t=p-ne*t;delete p;int ff(int manage,char pro,int size)/最先适应法memory *p=base;memory *q=p;while(p)/遍历存找到第一个适合进程pro的存块,保存它的前指针if(p-sizepro!=0)q=p;p=p-ne*t;else break;if(p=NULL)return 0;/没找到,返回0else/找到了,返回1if(manage=0)p-pro=pro;/静态,直接让进程进驻存else assign(q,pro,size);/动态,调用assign来给进程pro分配return 1;int bf(int manage,char pro,int size)/最正确适应法memory *p=base,*temp=NULL,*q,*front;int min=256;while(p)/遍历存找到最正确的存块,保存它的前指针if(p-pro=0&p-size=size&minp-si

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号