下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 计算机操作系统内存分配实验报告

计算机操作系统内存分配实验报告.doc

计算机操作系统内存分配实验报告

爱笑的卷毛猪小朋友
2019-02-23 0人阅读 举报 0 0 暂无简介

简介:本文档为《计算机操作系统内存分配实验报告doc》,可适用于IT/计算机领域

一、实验目的熟悉主存的分配与回收。理解在不同的存储管理方式下如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。二、实验内容和要求主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配就是解决多道作业或多进程如何共享主存空间的问题。所谓回收就是当作业运行完成时将作业或进程所占的主存空间归还给系统。可变分区管理是指在处理作业过程中建立分区使分区大小正好适合作业的需求并且分区个数是可以调整的。当要装入一个作业时根据作业需要的主存量查看是否有足够的空闲空间若有则按需要量分割一个分区分配给该作业若无则作业不能装入作业等待。随着作业的装入、完成主存空间被分成许多大大小小的分区有的分区被作业占用而有的分区是空闲的。实验要求使用可变分区存储管理方式分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时要求设计一个实用友好的用户界面并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。三、实验主要仪器设备和材料实验环境硬件环境:PC或兼容机软件环境:VC四、实验原理及设计分析某系统采用可变分区存储管理在系统运行当然开始假设初始状态下可用的内存空间为KB存储器区被分为操作系统分区(KB)和可给用户的空间区(KB)。(作业申请KB、作业申请KB、 作业申请KB、作业释放KB、作业申请KB、作业释放KB、作业释放KB、作业申请KB、作业申请KB、作业申请KB)当作业进入内存后分给作业(KB)随着作业、、的进入分别分配KB、KB经过一段时间的运行后作业运行完毕释放所占内存。此时作业进入系统要求分配KB内存。作业、运行完毕释放所占内存。此时又有作业申请KB作业申请KB作业申请KB。为它们进行主存分配和回收。、采用可变分区存储管理使用空闲分区链实现主存分配和回收。空闲分区链:使用链指针把所有的空闲分区链成一条链为了实现对空闲分区的分配和链接在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针由状态位指示该分区是否分配出去了同时在分区尾部还设置有一后向指针用来链接后面的分区分区中间部分是用来存放作业的空闲内存空间当该分区分配出去后状态位就由“”置为“”。设置一个内存空闲分区链内存空间分区通过空闲分区链来管理在进行内存分配时系统优先使用空闲低端的空间。设计一个空闲分区说明链设计一个某时刻主存空间占用情况表作为主存当前使用基础。初始化空间区和已分配区说明链的值设计作业申请队列以及作业完成后释放顺序实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明链的变化情况以及各作业的申请、释放情况显示打印出来。采用可变分区存储管理分别采用首次适应算法、最佳适应算法和最坏适应算法实现主存分配和回收。、主存空间分配()首次适应算法在该算法中把主存中所有空闲区按其起始地址递增的次序排列。在为作业分配存储空间时从上次找到的空闲分区的下一个空闲分区开始查找直到找到第一个能满足要求的空闲区从中划出与请求的大小相等的存储空间分配给作业余下的空闲区仍留在空闲区链中。()最佳适应算法在该算法中把主存中所有空闲区按其起始地址递增的次序排列。在为作业分配存储空间时从上次找到的空闲分区的下一个空闲分区开始查找直到找到一个能满足要求的空闲区且该空闲区的大小比其他满足要求的空闲区都小从中划出与请求的大小相等的存储空间分配给作业余下的空闲区仍留在空闲区链中()最坏适应算法在该算法中把主存中所有空闲区按其起始地址递增的次序排列。在为作业分配存储空间时从上次找到的空闲分区的下一个空闲分区开始查找直到找到一个能满足要求的空闲区且该空闲区的大小比其他满足要求的空闲区都大从中划出与请求的大小相等的存储空间分配给作业余下的空闲区仍留在空闲区链中。、主存空间回收当一个作业执行完成撤离时作业所占的分区应该归还给系统。归还的分区如果与其它空闲区相邻则应合成一个较大的空闲区登记在空闲区说明链中此时相邻空闲区的合并问题要求考虑四种情况:()释放区下邻空闲区(低地址邻接)()释放区上邻空闲区(高地址邻接)()释放区上下都与空闲区邻接()释放区上下邻都与空闲区不邻接五、程序流程图main函数里的流程图分配空间里的流程图回收空间里的流程图六、相关数据结构及关键函数说明本程序采用了一个structfreetable数据结构里面包含分区序号(num)、起始地址(address)、分区长度(length)和分区状态(state)。还用了线性表的双性链表存储结构(structNode)里面包含前区指针(prior)和后继指针(next)。一开始定义一条(含有first和end)的链用开始指针和尾指针开创空间链表。然后分别按三种算法进行分配和回收。在该程序中关键函数有sort()、allocation()、recovery()、和Firstfit()、Bestfit()、Worstfit()其中sort()函数是用来整理分区序号的如在删序号时她与前面序号相连在一起了然后序号中的长度总满足申请的内存大小就会在序号中分配然后序号在的基础上加一直加加到与原本序号的下一个序号也就是相等这时sort()就开始有明显的工作了allocation()是分配空间的也是过渡到三个算法中的当三个算法中满足或者不满足分配请求都会又返回值给allocation()recovery()是用来回收内存的里面包含了四种情况相连结果即释放区上与空闲区邻接、释放区下与空闲区邻接、释放区上下都与空闲区邻接、释放区上下都与空闲区不邻接这四种情况的结果。七、源代码#include<stdioh>#include<stdlibh>#defineOK  完成#defineERROR出错typedefintStatustypedefstructfreetable定义一个空闲区说明表结构{intnum分区序号longaddress起始地址longlength 分区大小intstate 分区状态}ElemTypetypedefstructNode线性表的双向链表存储结构{ElemTypedatastructNode*prior前趋指针structNode*next 后继指针}Node,*LinkListLinkListfirst头结点LinkListend 尾结点intflag记录要删除的分区序号StatusInitblock()开创带头结点的内存空间链表{first=(LinkList)malloc(sizeof(Node))end=(LinkList)malloc(sizeof(Node))first>prior=first>next=endend>prior=firstend>next=end>datanum=end>dataaddress=end>datalength=end>datastate=returnOK}voidsort()分区序号重新排序{Node*p=first>next,*qq=p>nextfor(p!=p=p>next){for(q=p>nextqq=q>next){if(p>datanum>=q>datanum){q>datanum=  }}  }}显示主存分配情况voidshow(){ intflag=用来记录分区序号Node*p=firstp>datanum=p>dataaddress=p>datalength=p>datastate=sort()printf("ntt》主存空间分配情况《n")printf("**********************************************************nn")printf("分区序号t起始地址t分区大小t分区状态nn")while(p){printf("dttdttd",p>datanum,p>dataaddress,p>datalength)if(p>datastate==)printf("tt空闲nn")elseprintf("tt已分配nn")p=p>next}printf("**********************************************************nn")}首次适应算法StatusFirstfit(intrequest){为申请作业开辟新空间且初始化Node*p=first>nextLinkListtemp=(LinkList)malloc(sizeof(Node))temp>datalength=requesttemp>datastate=继续阅读

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/12

计算机操作系统内存分配实验报告

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利