1、NODE;NODE OSCOUNT;/数组int count;/被分成的块数统计int applyfree;float numb;char c;/先对数组进行初始化,使没有分配的名称为 Pvoid init() count=1; OS0.name =P; OS0.start =0; OS0.end =COUNT; OS0.flag =1;/对数组的插入操作void insert(int m,float st,float en) int i; count+; for(i=count;im+1;i-) OSi=OSi-1; OSm.start =st; OSm.end =en;/移动操作,即对数组
2、的删除操作void move(int m) for(i=m;i=numb&OSi.flag ) if(OSi.end =numb) OSi.name =c; OSi.flag =0; else insert(i+1,OSi.start +numb,OSi.end -numb); OSi+1.flag =1; OSi+1.name = OSi.start =OSi.start ; OSi.end =numb; applyflag=1; i+; if(applyflag) printf(申请成功! return 1;申请失败!没有足够大的空闲空间。 return 0; else/提出释放资源fre
3、eflag& if(OSi.name =c) rremove(i,OSi.start ,OSi.end ); if(OSi.end numb) insert(i+1,OSi.start +numb,OSi.end -numb); OSi+1.name = OSi+1.flag =0; OSi.end =numb; OSi.flag =1; if(OSi-1.flag ) rremove(i,OSi.start ,OSi.end ); else printf(释放失败,因为正使用的数量小于要求释放的数量。 return 0; freeflag=1; if(freeflag)释放成功!释放失败!未
4、找到匹配的进程名称。void main() init(); show(); while(1) putin(); apply(); show();测试结果如下图所示:测试运行如图所示:1、开始有512K的空间,未分配。用名称P来表示。进程A申请200K的空间,(申请用1表示,释放用0表示),其结果显示如下。2、进程B申请150K的空间,3进程A释放200K的空间,4、进程C申请100K的空间,进程D申请50K的空间5、进程E申请30K的空间,进程F申请70K的空间五、实验总结本次实验即主存空间分配与回收,通过实验得出:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验我们理解了在可变分区管理方式下应怎样实现主存空间的分配和回收。在清楚主存储器分配和回收的情况下,做些实验还是比较简单的。关键是注意当找到一个大的块时,如何将这个大块分成两小块,一块用于分配,另一块依旧是未分配。