分页式管理实验报告 下载本文

#include #include #include #include #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=X_K&&Free_table[i].flag==1) if(k==-1||Free_table[i].length

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;