欢迎来到天天文库
浏览记录
ID:46500581
大小:77.00 KB
页数:8页
时间:2019-11-24
《基本存储器管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、任务三、基本存储器管理一、实验目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出屮请存储器空间时,存储管理必须根据中请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给中请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归述部分主存空间。主存的分配和冋收的实现与主存储器的管理方式冇关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。—.实验内容从下两种存储管理方式的主存分配和回收屮,选择
2、i种管理方式来实现木次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。三、实验代码#include#inelude#include#include#include#definen10/*假定系统允许的最人作业数为n,假定模拟实验屮n值为10*/^definem10/*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/^defineminisize1
3、00/*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若人于minisize,则切割分配*/struct{floataddress;/*已分配分区起始地址*/floatlength;/*已分配分区长度,单位为字卩*/intflag;/*已分配区表登记栏标志,用〃0〃表示空栏日*/}used_table[n];/*已分配区表*/struct{floataddress;/*空闲区起始地址*/floatlength;/*空闲区长度,单位为字节*/intflag;/*空闲区表登记栏标志,用〃0〃表示空
4、栏冃,用〃1〃表示未分配*/}free_table[m];/*空闲区表*/voidallocate(charJ,floatxk)/*给J作业,釆用最佳分配算法分配xk大小的空间*/inti,k;floatad;k二T;for(i=0;i=xk&&free_table[i].flag==l)if(k==-l
5、
6、free_table[i].length7、空闲区,返回*/{printff无可用空闲区〃);return;}/*找到可用空闲区,开始分配:若空闲区人小与要求分配的空间差小于minisize人小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/if(free_table[k].length-xk<=ininisi%e){free_table[k].flag=O;ad=free_table[k].address;xk=freetable[k].length;}else{free_table[k].lcngth=free8、_table[k].length-xk;ad=freetable[k].address+freetable[k].length;}/*修改已分配区表*/i=0;while(used_table[i].flag!=O&&i=n)/*无表目可填写已分配分区*/{printfC无表冃填写已分分区,错误『);/*修正空闲区表*/if(free_table[k].flag==O)/*前面找到的是整个空闲分区*/free_table[k].flag=l;else{/*前面找到的是某个空闲分区的一部分9、*/freetable[k].length=freetable[k].lcngth+xk;return;}}else{/*修改已分配表*/usedtable[i].address=ad;used_table[i].length=xk;used_table[i].flag二J;}return;}/*主存分配函数结束*/voidreclaim(charJ)/*回收作业名为J的作业所占主存空间*/{inti,k,j,s,t;floatS,L;/*寻找已分配表屮对应登记项*/s=0;while((usedtablets].flag!=j10、11、12、usedtablets].flag==0)&&s=n)/*在已分配表中找不到名字为J的作业*/{printf(z,找不到该作业rT);return;}/*修改已分配表*/used_table[s].flag=0;/*取得
7、空闲区,返回*/{printff无可用空闲区〃);return;}/*找到可用空闲区,开始分配:若空闲区人小与要求分配的空间差小于minisize人小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/if(free_table[k].length-xk<=ininisi%e){free_table[k].flag=O;ad=free_table[k].address;xk=freetable[k].length;}else{free_table[k].lcngth=free
8、_table[k].length-xk;ad=freetable[k].address+freetable[k].length;}/*修改已分配区表*/i=0;while(used_table[i].flag!=O&&i=n)/*无表目可填写已分配分区*/{printfC无表冃填写已分分区,错误『);/*修正空闲区表*/if(free_table[k].flag==O)/*前面找到的是整个空闲分区*/free_table[k].flag=l;else{/*前面找到的是某个空闲分区的一部分
9、*/freetable[k].length=freetable[k].lcngth+xk;return;}}else{/*修改已分配表*/usedtable[i].address=ad;used_table[i].length=xk;used_table[i].flag二J;}return;}/*主存分配函数结束*/voidreclaim(charJ)/*回收作业名为J的作业所占主存空间*/{inti,k,j,s,t;floatS,L;/*寻找已分配表屮对应登记项*/s=0;while((usedtablets].flag!=j
10、
11、
12、usedtablets].flag==0)&&s=n)/*在已分配表中找不到名字为J的作业*/{printf(z,找不到该作业rT);return;}/*修改已分配表*/used_table[s].flag=0;/*取得
此文档下载收益归作者所有