关闭

关闭

关闭

封号提示

内容

首页 计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告

计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告.doc

计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报…

Gavin立祥 2017-10-19 评分 0 浏览量 0 0 0 0 暂无简介 简介 举报

简介:本文档为《计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告doc》,可适用于小学教育领域,主题内容包含计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告实验二实验题目,存储器管理系别,计算机科学与技术系班级,姓名,学号,一、实验目的深符等。

计算机操作系统动态分区存储管理方式下的内存空间的分配与回收实验报告实验二实验题目,存储器管理系别,计算机科学与技术系班级,姓名,学号,一、实验目的深入理解动态分区存储管理方式下的内存空间的分配与回收。二、实验内容编写程序完成动态分区存储管理方式下的内存分配和回收的实现。具体内容包括:确定用来管理内存当前使用情况的数据结构采用首次适应算法完成内存空间的分配分情况对作业进行回收编写主函数对所做工作进行测试。三、实验原理分配:动态分区存储管理方式把内存除OS占用区域外的空间看作一个大的空闲区。当作业要求装入内存时根据作业需要内存空间的大小查询内存中各个空闲区当从内存中找到一个大于或等于该作业大小的内存空闲区时选择其中一个空闲区按作业要求划出一个分区装入该作业。回收:作业执行完后它所占用的内存空间被收回成为一个空闲区。如果该空闲区的相邻分区也是空闲区则需要将相邻空闲区合并成一个空闲区。四、实验方法实现动态分区的分配与回收主要考虑三个问题:第一、设计记录内存使用情况的数据表格用来记录空闲区和作业占用的区域(利用结构体类型数组来保存数据)第二、在设计的数据表格基础上设计内存分配算法(采用首次适应算法找合适的分区(对空闲分区表进行排序)分配时要考虑碎片问题)第三、在设计的数据表格基础上设计内存回收算法(分四种情况进行回收(上邻、下邻、上下邻和无相邻分区)。五、实验步骤第一设计记录内存使用情况的数据表格,已分配分区表:起始地址、长度、标志(表示“空表项”表示“已分配”),空闲分区表:起始地址、长度、标志(表示“空表项”表示“未分配”)structusedtable{floataddress已分分区起始地址floatlength已分分区长度单位为字节intflag已分配表区登记栏标志用表示空栏目charzuoyename}已分配区表Structfreetable{floataddress空闲分区起始地址floatlength空闲分区长度单位为字节intflag空闲分区表登记栏目用表示空栏目表示未配}空闲分区表第二在设计的表格上进行内存分配,首次适应算法:为作业分配内存要求每次找到一个起始地址最小的适合作业的分区(按起始地址递增排序)。,最大碎片size:要求当找到的空闲分区,作业的大小的值小于或等于size时将该分区全部分配给作业(数组后面元素向前移),否则给作业分割出一部分空间时其余部分仍作为新的空闲分区登记(空闲分区长度=空闲分区长度作业长度,,空闲分区起始地址=空闲分区起始地址作业长度第三在设计的表格上进行内存回收。、上邻:条件:回收作业的始址=某个空闲区的始址长度操作:空闲区的长度=空闲区的长度作业的大小、下邻:条件:回收作业的始址作业的长度=某个空闲区的始址操作:空闲区的始址=回收作业的始址空闲区的长度=空闲区的长度作业的长度、上下邻:条件:条件同时成立操作:空闲区的始址=上邻的始址空闲区的长度=上邻的长度作业的长度下邻的长度删除下邻、无上下邻:操作:找flag=的行空闲区的始址=回收作业的始址空闲区的长度=作业的长度六、实验代码#include<iostreamh>#include<iomaniph>#defineM允许的空闲区表长最大为m#defineN允许的最大作业数量为n#defineMIN碎片的最大值#defineSADDRESS空闲分区初始的起始地址#defineSLENGTH空闲分区的初始长度structusedt{floataddress已分分区起始地址floatlength已分分区长度intflag已分配表区登记栏标志用表示空栏目}usedtableNstructfreet{floataddress空闲分区起始地址floatlength空闲分区长度intflag空闲分区表登记栏目用表示空栏目表示未分配}freetableM空闲分区表voidallocate(char,float)分配算法子程序voidreclaim(char)回收算法子程序voidmain(){inti,afloatzylcharzyn空闲分区表初始化freetableaddress=SADDRESS空闲分区表的起始地址freetablelength=SLENGTH空闲分区表的长度freetableflag=标志位置表示未分配for(i=i<Mi){freetableiaddress=freetableilength=freetableiflag=}表示空栏目已分分区表初始化for(i=i<Ni){usedtableiaddress=usedtableilength=usedtableiflag=}while(){cout<<"请选择功能项:"<<endl<<"分配主存"<<endl<<"回收主存"<<endl<<"显示主存"<<endl<<"退出"<<endl<<"选择功能项():"cin>>aswitch(a){case:当选择时退出程序returncase:{a=分配主存空间cout<<"n请输入作业名zyn和作业所需长度zyl(作业名为一个字符长度zyl要小于"<<SLENGTH<<"):"<<endlcin>>zyn>>zylallocate(zyn,zyl)为作业zyn分配主存空间break}case:{a=回收主存空间cout<<"n请输入要回收分区的作业名:"cin>>zynreclaim(zyn)回收作业zyn的主存空间break}case:{a=显示主存情况输出空闲区表和已分配区表cout<<"n输出空闲区表:"<<endl<<"起始地址分区长度标志"<<endlfor(i=i<Mi)if(freetableiflag!=)cout<<setw()<<freetableiaddress<<setw()<<freetableilength<<setw()<<freetableiflag<<endlcout<<"n按任意键输出已分配区表……"cinget()cout<<"n输出已分配区表:"<<endl<<"起始地址分区长度标志"<<endlfor(i=i<Ni){if(usedtableiflag!=)输出已分配给作业的表目cout<<setw()<<usedtableiaddress<<setw()<<usedtableilength<<setw()<<(char)usedtableiflag<<endl}break}default:{cout<<"n没有该选项~"<<endlbreak}}}cinget()}分配算法子程序voidallocate(charzyn,floatzyl)floatad{intk=inti=while(i<Mk==){找空间大于zyl的最小空闲区登记项kif(freetableilength>=zylfreetableiflag==)k=ii}if(k==){未找到可用空闲区返回cout<<"无可用空闲区~"<<endlreturn}*找到可用空闲区开始分配:若空闲区大小与作业要求分配的空间差小于MIN,则将找到的空闲区全部分配给该作业若空闲区大小与要求分配的空间的差大于minisize,则从空闲区划出一部分分配给作业。*if(freetableklengthzyl<=MIN){freetablekflag=ad=freetablekaddresszyl=freetableklengthfor(i=ki<Mi)freetablei=freetablei}else{freetableklength=freetableklengthzylad=freetablekaddressfreetablekaddress=freetablekaddresszyl}*修改已分配区表*i=while(usedtableiflag!=i<N)i找空表目iusedtableiaddress=adusedtableilength=zylusedtableiflag=zynreturn}allocate回收作业名为J的作业所占主存空间voidreclaim(charzyn){inti,k,j,s,tfloatS,Ls=while((usedtablesflag!=zyn||usedtablesflag==)s<N)s找到作业zyn在以分配表中的表目sif(s>=N){cout<<"找不到该作业~"<<endlreturn}usedtablesflag=修改以分配表表目s标志为为空表目S=usedtablesaddress取作业zyn在内存中的首地址L=usedtableslength取作业zyn所分配到的内存的长度j=k=i=寻找回收分区的上下邻空闲区上邻表目k下邻表目jwhile(i<M(j==||k==)){if(freetableiflag==){if(freetableiaddressfreetableilength==S)k=iif(freetableiaddress==SL)j=i}i}if(k!=){有上邻空闲区if(j!=){有下邻空闲区即有上下邻空闲区三项合并freetableklength=freetableklengthfreetablejlengthLfreetablejflag=}else上邻空闲区下邻非空闲区与上邻合并freetableklength=freetableklengthL}ifelse{k==无上邻空闲区if(j!=){无上邻空闲区有下邻空闲区与下邻合并freetablejaddress=Sfreetablejlength=freetablejlengthL}else{j==上下邻均为非空闲区回收区域直接填入t=在空闲区表中寻找空栏目while(freetabletflag==t<M)tif(t>=M){空闲区表满回收空间失败将已分配区表复原cout<<"主存空闲表没有空间回收失败~~"<<endlusedtablesflag=zynreturn}freetabletaddress=Sfreetabletlength=Lfreetabletflag=}}for(i=i<=Mi)for(intj=ij<Mj)if(freetableiaddress>freetablejaddress){freettemptemp=freetableifreetablei=freetablejfreetablej=temp}}七、实验结果、总的存储空间、分配空间、回收空间()有上下邻()有上邻()有下邻()无上下邻回收八、实验总结、通过实验学会了理解动态分区存储管理方式下的内存空间的分配与回收、学会了回收的四种方式、实验过程中遇到了问题学会了与同学探讨解决

热点搜索换一换

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +1积分

资料评分:

/13
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部

举报
资料