您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 操作系统实验报告-可变分区存储管理方式的内存分配回收
实验三可变分区存储管理方式的内存分配回收一.实验目的(1)深入了解可变分区存储管理方式的内存分配回收的实现。二.实验内容编写程序完成可变分区存储管理方式的内存分配回收,要求有内存空间分配表,并采用最优适应算法完成内存的分配与回收。三.实验原理在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。可变分区的回收算法较为复杂,当一个作业撤离时,可分为4种情况:其临近都有作业(A和B),其一边有作业(A或B),其两边均为空闲区。尤其重要的是,在程序中利用“new类型T(初值列表)”申请分配用于存放T类型数据的内存空间,利用“delete指针名”释放指针所指向的内存空间。四.实验部分源程序#includeiostreamusingnamespacestd;typedefstructSNode{//SpaceNodeintstart,end;//起始,结束intlength;//长度大小structSNode*next;//指向下一结点的指针}*SP;SPHead=(SP)malloc(sizeof(SNode));//全局变量,内存空间头结voidDispSpace(){//显示内存空间分配情况SPp=Head-next;cout\n空闲区说明表\n---地址--长度---\n;while(p){coutp-startp-lengthendl;p=p-next;}cout----------------\n;}voidInitial(){//初始化说明表SPp,q;p=(SP)malloc(sizeof(SNode));q=(SP)malloc(sizeof(SNode));p-start=14;p-length=12;p-end=26;q-start=32;q-length=96;q-end=128;//指导书上的作业分配Head-next=p;//与头结点连接p-next=q;q-next=NULL;DispSpace();}voidAllocation(intlen){//分配内存给新作业SPp=Head-next,q;while(p){if(p-lengthlen)p=p-next;elseif(p-lengthlen){p-start=p-start+len;p-length=p-length-len;cout分配成功!\n;DispSpace();return;}else{//当两者长度相等q=p-next;p-next=q-next;cout分配成功!\n;DispSpace();return;}}cout分配失败!\n;DispSpace();return;}voidCallBack(intsta,intlen){//回收内存SPp=Head,q=p-next,r;//开始地址和长度p-end=0;inten=sta+len;while(q){if(sta==0){//初始地址为0if(en==q-start){//正好回收q-start=0;q-length=q-end;return;}else{r=(SP)malloc(sizeof(SNode));r-start=sta;r-length=len;r-end=en;p-next=r;r-next=q;return;}}elseif((p-endsta)&&(q-starten)){//上邻区r=(SP)malloc(sizeof(SNode));r-start=sta;r-length=len;r-end=en;p-next=r;r-next=q;return;}elseif((p-endsta)&&(q-start==en)){//邻区相接q-start=sta;q-length=q-end-sta;return;}elseif((p-end==sta)&&(q-starten)){//下邻区p-end=en;p-length=en-p-start;return;}elseif(p-end==sta&&q-start==en){//邻区相接p-end=q-end;p-length=p-end-p-start;p-next=q-next;return;}else{p=p-next;q=q-next;}}}voidmain(){Initial();cout现在分配大小为6K的作业4申请装入主存:;Allocation(6);//分配时参数只有长度//--------指导书测试数据演示----------cout现回收作业3(起址10,长度4)\n;CallBack(10,4);DispSpace();cout现回收作业2(起址26,长度6)\n;CallBack(26,6);DispSpace();//---------------演示结束-------------system(pause);}五.实验结果与体会我的体会:
本文标题:操作系统实验报告-可变分区存储管理方式的内存分配回收
链接地址:https://www.777doc.com/doc-1386444 .html