1.实验步骤:
主函数:一个菜单栏的形式,可以选择要执行的算法。
首次适应算法:每次都从开始往后找满足条件的分区。
循环首次适应算法:从前一次找到的地方往后继续找分区。
最佳适应算法:先从小到大排序,找比前一个大后一个小的分区。
2.算法描述:
1.首次适应算法:该算法从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。
2.循环首次适应算法:该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。
3.最佳适应算法: 该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。
3.源代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct info{
int quhao; //区号
int dress; //起始地址
int num; //大小
int free; //是否空闲
string name; //进程名
};
info IN[100]; //原始内存分配表
int Kong[100];//空闲分区表
int Ready[100];//已分配分区表
//初始化分区
void init(){
Kong[0]=0;
ifstream fen("data.txt");
// 从文件中导入内存分区表
for(int i