#include
#define n 11 //模拟实验中允许的最大进程数为n #define m 11 //模拟实验中允许的最大分区个数为m #define M_SIZE 2000 struct {
float address; //分配给进程的起始地址
float length; //分配给进程的空闲区长度,单位为字节 int flag; //分配区表标志,用\已分配,用\表示未分配 }Used_Table[m]; //分配分区表 struct {
float address; float length; int flag;
}Free_table[m];
float stand_length(int k)//随机产生一个分区大小的函数 {
float st_length[20];
srand((unsigned)time(NULL));//srand()函数产生一个当前时间开始的随机种子
for (int i=0;i<20;i++)
st_length[i]=float (rand()00); return st_length[k]; }
float process_length(int k)//随机产生一个进程大小的函数 {
float pt_length[20];
srand((unsigned)time(NULL));//srand()函数产生一个当前时间开始的随机种子
for (int i=0;i<20;i++)
pt_length[i]= float (rand()P0); return pt_length[k]; }
int process_num()//随机产生一个进程个数的函数 { int num;
int A[10]={1,2,3,4,5,6,7,8,9,10}; srand((unsigned)time(NULL)); num=rand(); return A[num]; }
char srand_name(int k)//随机产生一个进程的名字 {
char A[26]={'A','B','C','D','E','F','G','H','I',
'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; return A[k]; }
void allocate(char PRS_NAME,float X_K) //采用最优分配算法为进程PRS_NAME分配X_K大小的空间 {
int i,k; float ad; k=-1;
for(i=0;i if(k==-1)//未找到可用空闲分区,返回 { printf(\无可用空闲区\\n\return; } //找到可用空闲区,开始分配: if(Free_table[k].length-X_K<=M_SIZE) { Free_table[k].flag=0; ad=Free_table[k].address; X_K=Free_table[k].length; } else { Free_table[k].length=Free_table[k].length-X_K;