一.题目:存储管理---动态分区分配算法的模拟 二.任务
+:设计主界面以灵活选择某算法,且以下算法都要实现:首次适应算法、循环首次适应算法、最佳适应算法;。 三.思想:对任务进行构思和设想。 (1)首次适应算法:
FF算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始顺巡查找,直到找到一个大小能够满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区间仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区。这给为以后到达的大作业分配大的内存空间创造了条件。
(2)循环首次适应算法
该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块的请求大小相等的内存空间分配给作业。为实现该算法,应设置一起始查找指针,用于指示下一次起始查询的空闲分区,并采用循环查找方式,即如果最后一个(链尾)空闲分区的大小仍不能满足
要求,则返回到第一个空闲分区,比较大小是否满足,找到后,应调整起始查询指针。 (3)最佳适应算法
是将最小的空闲分区分配给作业,避免\大材小用\。为了加速寻找,该算法要求将所有的空闲分区按照某容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。
(4)内存回收:
将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。
四.目的:在构思中提出要达到的目的。
(1)按照首次适应算法对内存进行分配,得到 (2)按照循环首次适应算法对内存 (3)按照最佳适应算法对内存进行分配
(4)在作业完成时,释放作业所在内存块,使其能够再次被利用 五.方案:对构思的细化,提出粗略的方案。
(1)首次适应算法:设立头指针,每次从头指针开始查找,进行内存分配
(2)最佳适应算法:设立一个指针纪录最佳位置,然后根据内
存大小,对最佳位置进行分配
(3)循环首次适应算法:设立查找指针,查找指针初始为链首指针,最后位置为查找指针,返回查找指针,第二次运行时从查找指针开始查找。
(4)内存回收:将释放的空间与前后空闲状态区间合并,改写空闲区间地址和大小
七.程序:是实施框图的主体并运行和修改。 1.有大小恰好合适的空闲块
if(p->data.state==Free && p->data.size==request) {
p->data.state=Busy; p->data.ID=ID; return OK; break; }
2.有空闲块能满足需求且有剩余\
if(p->data.state==Free && p->data.size>request) {
temp->prior=p->prior; temp->next=p;
temp->data.address=p->data.address; p->prior->next=temp;