存储器管理报告_第1页
存储器管理报告_第2页
存储器管理报告_第3页
存储器管理报告_第4页
存储器管理报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、上机报告姓名学号专业班级计科普1002 课程名称 网络操作系统指导教师机房名称 (I515)上机日期2012 年12 月 20 日上机项目名称 上机步骤及内容: 1实验目的(1) 加深对可变分区的存储管理的理解;(2) 提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;(3) 掌握用指针实现链表和在链表上的基本操作。2 实验要求首先向系统申请内存空间,初始化空闲表,输出命令菜单(分配内存,释放内存,退出程序);按用户的选择,分别进行内存分配、内存释放或退出程序的操作;若未选择退出程序,则操作完成后输出新的空闲表并回到命令菜单。3 实验内容3.1 数据结构结

2、点:class Nodepublic:char* addr;/空闲内存起始地址unsigned int size;/空闲内存大小Node* next;/下一个空闲内存节点Node* prior;/上一个空闲内存节点Node();/构造函数void Display(int i);/显示这个节点(减去初始地址i,以显示相对地址);列表:class ListNode* first;/链表中的第一个节点Node* now;/下一个要搜索的空闲内存节点public:List();void Insert(Node* n,char* a,unsigned int s);/在节点i之后插入一个起始地址为a,大

3、小为s的节点void ChangeFirst(char* a,unsigned int s);/在first前面插入起始地址为a,大小为s的节点void Delete(Node* n);/删除节点iNode* FindSize(unsigned int i);/从节点now开始找到下一个大小大于i的节点Node* FindAddr(char* a);/查找内存单元a所在的已分配内存块之前的节点bool InNodes(char* a);/判断内存地址a是否在某个节点所指向的空闲块中char* lmalloc(unsigned int s);/从节点n指向的起始地址开始分配i个内存单元void

4、lfree(char* a,unsigned int s);/释放起始地址为a,大小为s的内存块void Traverse(int i);/显示整个线性表,i是初始地址;3.2 框图开始向系统申请内存空间初始化空闲表,创建一个List类的对象,建立头指针和起始查找指针。显示菜单xm让用户输入要分配的内存大小(s)f输入数据是否越界yn让用户输入要释放的内存的起始地址(a)输入地址越界或未被分配?yyn让用户输入要释放的内存大小(s)退出输入数据是否越界调用List:lmalloc(unsigned int s)n调用List:lfree(char* a,unsigned int s)显示空闲内

5、存表图一 总体框架图char* lmalloc(unsigned int s)遍历空闲内存表,看是否有size=s的节点y把该节点的起始地址加上s,大小减去s。n显示已经没有可分配的内存了,然后退出。该节点大小是否为0返回找到的节点原来的起始地址删除该节点yn图二 内存分配框图void lfree(char* a,unsigned int s)空闲内存表是否为空新建节点,其起始地址为a,大小为s。将头指针和起始查找指针指向它。然后退出yn找到a之前的空闲块节点na在头节点的起始地址之前?yna+s在头节点起始地址之前?若(a+s)=first-addr则令first-addr=a, first

6、-size加s,否则创建一个起始地址为a,大小为s的节点,将头指针和起始查找指针指向它。yn是尾节点?若n-addr+n-size=a则n-size加s,否则创建一个起始地址为a,大小为s的节点作为尾节点。a+s在n-next的起始地址之前?报错并退出ynyn要释放的内存块与前后都相连?要释放的内存块与后面相连?要释放的内存块与前面相连?yn-size加上(n-next-size+s),删除n-nextyynnn令n-next-addr=a; n-next-size加上s;在n之后创建一个起始地址为a,大小为s的节点。n-size加上s图三 循环首次适应法4 实验任务l 阅读并调试循环首次适应

7、算法;循环首次适应算法(Next Fit)是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。l 编写首次适应算法、最佳适应算法、最坏适应算法其中的一个。首次适应算法代码:Node* List:FindSizeFirst(unsigned int s)if(first=NULL)return NULL;/如果空闲表为空,则返回空else if(now-next=now)/如果空闲表只有一个节点,且这个节点的

8、大小不小于s,则返回这个节点,否则返回空if(now-size=s)return now;else return NULL;else/否则遍历整个表,寻找第一个合适的节点Node* e=first;Node* aa=first;doif(aa-size=s)break;else aa=aa-next;while(aa!=e-prior);if(aa-size=s)return aa;else return NULL;图 四 效果图图 五 效果图结果分析与体会: 本次实验主要是让大家了解上面的几个算法,循环首次适应算法、首次适应算法、最佳适应算法、最坏适应算法。了解它们各自的算法,以及知道他们的流程图,知道他们之间的区别,这样我们才能够真正的理解这次实验的主要内容。最佳适应算法(Best Fit)从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个

温馨提示

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

评论

0/150

提交评论