实现动态分区的分配算法。
(1) 最佳适配算法:选择内存空闲块中最适合进程大小的块分配。
(2) 邻近适配算法:从上一次分配的地址开始查找符合要求的块,所查找到的第一个满足要求的空闲块就分配给进程。
模拟添加进程的时候,假定内存是一块完整的空闲区,对于算法(1)来说,分配的时候遍历所有的空闲内存块,找出其中最适合的一块,注意此时内存分区的总块数可能已经发生了变化;
对于算法(2)来说,则需要从上次分配的内存块(使用变量记录即可)接着向下找到第一个满足条件的块即可,内存分区的总块可能也已经发生了变化。
模拟删除进程(释放内存)的时候,则需要注意如果当前内存块的上下有空闲块,则需要将其合并为一整个空闲块,也需要注意内存总块的数量变化。
最佳适配算法
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
struct node
{
int num;
int is_data;
};
int main()
{
vector<node> cluster;
vector<node> TTemp;
map <int,int> mp;
mp.clear();
node temp;
int R_num;
int curnum;
temp.is_data=0;
temp.num=10;
cluster.push_back(temp);
cout<<"请使用add命令添加一个进程,delete命令删除一个进程!"<<endl;
while(1)
{
string s;
cin>>s;
if(s=="