欢迎来到天天文库
浏览记录
ID:11521676
大小:46.50 KB
页数:24页
时间:2018-07-12
《计算机操作系统 内存动态分配和回收模拟实现(computer operating system memory dynamic allocation and recovery simulation)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机操作系统内存动态分配和回收模拟实现(Computeroperatingsystemmemorydynamicallocationandrecoverysimulation)#包括iomanip><#包含iostream><使用名称空间;20/空闲分区个,已分配分区20个结构/空闲分区表空{国际address_of_start;//起始地址国际size_of_empty;//空闲大小表示下一个;国际yesorno;//是否空闲,1空闲,有效}空[20];结构not_empty/已分配分区表{intPID;国际address_of_start;国际size
2、_of_notempty;表示下一个;国际yesorno;//是否分配,1分配有效}not_empty[20];国际countofempty=1,countofnotempty=0;//从0开始计数国际min_size=2;//不可分割的最小分区国际max_size=300;//最大空间300x300=90000国际num_of_row=30;//显示时,横排个数国际num_of_area=20;//空闲分区和分配分区的最大分区数(intint足够size_of_notempty)/是否有足够的空闲空间{inti;为(i=0;i3、++)/首次适应{如果(空[我]。size_of_empty>=size_of_notempty+min_size)还我;}返回-1;}(int,intnum,int[])/找到起始地址为Num的区域的下标,A0=-1,则在not_empty中,下标为A1;A1=1在空中,下标为A0{int=i0;(我在<4、sorno==1){a[0]=1;[1]=我;返回0;}我=1;}返回-1;}国际fenpei(){int,i;countofnotempty+=1;not_empty[countofnotempty]。yesorno=0;为(i=0;i>not_empty[我]。PID>>not_empty[我]。size_of_notempty;如果(not_empty[我]5、。PID<06、7、not_empty[我]。PID>99){countofnotempty=1;cout<<“进程号0~99“;返回-1;}为(intII=0;II组countofnotempty;II++){如果(not_empty[我]。PID==not_empty[Ⅱ]。PID和我!=2){countofnotempty=1;cout<<“进程号必须唯一“;返回-1;}}温度=足够的(not_empty[我]。size_of_notempty);如果(温度>=0)/找到能满足请求的空闲分区{not_empty[我]。address_of_star8、t=空[温度]。address_of_start;not_empty[我]。yesorno=1;空[温度]。address_of_start+=not_empty[我]。size_of_notempty;空[温度]。size_of_empty=not_empty[我]。size_of_notempty;}其他的{countofnotempty=1;cout<<“未找到足够大的空闲分区“;返回-1;}}返回0;}在前面(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II+9、+)/确定待回收区前一个分区是否是空闲分区,及返回空闲分区的下标{如果(not_empty[我]。address_of_start==空[Ⅱ]。address_of_start+空[Ⅱ]。size_of_empty与空[Ⅱ]。yesorno==1){甲=Ⅱ;返回0;}}=我;//如果前一分区不是空闲,则前一分区是已分配,或待回收区是第一个分区。返回-1;}int返回(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II++){如果(空[Ⅱ]。address_of_start=10、=not_empty[我]。address_of_s
3、++)/首次适应{如果(空[我]。size_of_empty>=size_of_notempty+min_size)还我;}返回-1;}(int,intnum,int[])/找到起始地址为Num的区域的下标,A0=-1,则在not_empty中,下标为A1;A1=1在空中,下标为A0{int=i0;(我在<4、sorno==1){a[0]=1;[1]=我;返回0;}我=1;}返回-1;}国际fenpei(){int,i;countofnotempty+=1;not_empty[countofnotempty]。yesorno=0;为(i=0;i>not_empty[我]。PID>>not_empty[我]。size_of_notempty;如果(not_empty[我]5、。PID<06、7、not_empty[我]。PID>99){countofnotempty=1;cout<<“进程号0~99“;返回-1;}为(intII=0;II组countofnotempty;II++){如果(not_empty[我]。PID==not_empty[Ⅱ]。PID和我!=2){countofnotempty=1;cout<<“进程号必须唯一“;返回-1;}}温度=足够的(not_empty[我]。size_of_notempty);如果(温度>=0)/找到能满足请求的空闲分区{not_empty[我]。address_of_star8、t=空[温度]。address_of_start;not_empty[我]。yesorno=1;空[温度]。address_of_start+=not_empty[我]。size_of_notempty;空[温度]。size_of_empty=not_empty[我]。size_of_notempty;}其他的{countofnotempty=1;cout<<“未找到足够大的空闲分区“;返回-1;}}返回0;}在前面(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II+9、+)/确定待回收区前一个分区是否是空闲分区,及返回空闲分区的下标{如果(not_empty[我]。address_of_start==空[Ⅱ]。address_of_start+空[Ⅱ]。size_of_empty与空[Ⅱ]。yesorno==1){甲=Ⅱ;返回0;}}=我;//如果前一分区不是空闲,则前一分区是已分配,或待回收区是第一个分区。返回-1;}int返回(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II++){如果(空[Ⅱ]。address_of_start=10、=not_empty[我]。address_of_s
4、sorno==1){a[0]=1;[1]=我;返回0;}我=1;}返回-1;}国际fenpei(){int,i;countofnotempty+=1;not_empty[countofnotempty]。yesorno=0;为(i=0;i>not_empty[我]。PID>>not_empty[我]。size_of_notempty;如果(not_empty[我]
5、。PID<0
6、
7、not_empty[我]。PID>99){countofnotempty=1;cout<<“进程号0~99“;返回-1;}为(intII=0;II组countofnotempty;II++){如果(not_empty[我]。PID==not_empty[Ⅱ]。PID和我!=2){countofnotempty=1;cout<<“进程号必须唯一“;返回-1;}}温度=足够的(not_empty[我]。size_of_notempty);如果(温度>=0)/找到能满足请求的空闲分区{not_empty[我]。address_of_star
8、t=空[温度]。address_of_start;not_empty[我]。yesorno=1;空[温度]。address_of_start+=not_empty[我]。size_of_notempty;空[温度]。size_of_empty=not_empty[我]。size_of_notempty;}其他的{countofnotempty=1;cout<<“未找到足够大的空闲分区“;返回-1;}}返回0;}在前面(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II+
9、+)/确定待回收区前一个分区是否是空闲分区,及返回空闲分区的下标{如果(not_empty[我]。address_of_start==空[Ⅱ]。address_of_start+空[Ⅱ]。size_of_empty与空[Ⅱ]。yesorno==1){甲=Ⅱ;返回0;}}=我;//如果前一分区不是空闲,则前一分区是已分配,或待回收区是第一个分区。返回-1;}int返回(inti,int和)//我为待回收区在not_empty中的下标。一存对应下标{为(intII=0;II组countofempty;II++){如果(空[Ⅱ]。address_of_start=
10、=not_empty[我]。address_of_s
此文档下载收益归作者所有