# include & ltstdio.h & gt
# include & ltstdlib.h & gt
#定義mSIZE 3
#定義pSIZE 8
靜態int memory[mSIZE]= { 0 };
靜態int進程[pSIZE]= { 0 };
//static int process[pSIZE] = {2,3,2,1,5,2,4,5,3,2,5,2 };
//static int process[pSIZE] = {7,10,1,2,10,3,10,4,2,3,1,2,10,1,7,10,1 };
void build();//生成壹個隨機數序列
void FIFO();//最近最少使用的(LRU)替換算法
int main(int argc,char *argv[])
{
Printf("生成隨機序列如下:\ n ");
build();
Printf("先進先出(FIFO)頁面替換算法\ n ");
FIFO();
系統(“暫停”);
返回0;
}
無效構建()
{
int I = 0;
for(I = 0;我& ltpSIZEi++)
{
process[I]=(int)(10.0 * RAND()/(RAND _ MAX+1.0)+1);
printf("%d ",process[I]);
}
printf(" \ n ");
}
void FIFO()
{
int time[mSIZE]= { 0 };
int i = 0,j = 0;
int m = -1,n =-1;
int max = -1,maxtime = 0;
int count = 0;
for(I = 0;我& ltpSIZEi++)
{
//找到第壹個空閑的物理塊
for(j = 0;j & ltmSIZEj++)
{
if(memory[j]= = 0)
{
m = j;
打破;
}
}
//找到與進程相同的標簽。
for(j = 0;j & ltmSIZEj++)
{
if(memory[j]= = process[I])
{
n = j;
}
}
//找到時間值最大的那個。
for(j = 0;j & ltmSIZEj++)
{
if(time[j]& gt;maxtime)
{
maxtime = time[j];
max = j;
}
}
If(n == -1) //不存在相同的進程。
{
如果(m!= -1) //有空閑的物理塊。
{
memory[m]= process[I];
時間[m]= 0;
for(j = 0;j & lt= m;j++)
{
time[j]++;
}
m =-1;
}
否則//沒有空閑的物理塊。
{
memory[max]= process[I];
time[max]= 0;
for(j = 0;j & ltmSIZEj++)
{
time[j]++;
}
max =-1;
maxtime = 0;
count++;
}
}
Else //同樣的過程存在。
{
memory[n]= process[I];
for(j = 0;j & ltmSIZEj++)
{
time[j]++;
}
n =-1;
}
for(j = 0;j & ltmSIZEj++)
{
printf("%d ",memory[j]);
}
printf(" \ n ");
}
Printf("頁面轉換次數:%d\n ",count);
}
2.最新和最長時間未使用的算法(LRU)
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
#定義mSIZE 3
#定義pSIZE 8
靜態int memory[mSIZE]= { 0 };
靜態int進程[pSIZE]= { 0 };
//static int process[pSIZE] = {2,3,2,1,5,2,4,5,3,2,5,2 };
//static int process[pSIZE] = {7,10,1,2,10,3,10,4,2,3,1,2,10,1,7,10,1 };
void build();//生成壹個隨機數序列
void LRU();//最近最少使用的(LRU)替換算法
int main(int argc,char *argv[])
{
Printf("生成隨機序列如下:\ n ");
build();
Printf ("LRU替換算法\ n ");
LRU();
系統(“暫停”);
返回0;
}
無效構建()
{
int I = 0;
for(I = 0;我& ltpSIZEi++)
{
process[I]=(int)(10.0 * RAND()/(RAND _ MAX+1.0)+1);
printf("%d ",process[I]);
}
printf(" \ n ");
}
無效LRU()
{
int flag[mSIZE]= { 0 };
int i = 0,j = 0;
int m = -1,n =-1;
int max = -1,max flag = 0;
int count = 0;
for(I = 0;我& ltpSIZEi++)
{
//找到第壹個空閑的物理塊
for(j = 0;j & ltmSIZEj++)
{
if(memory[j]= = 0)
{
m = j;
打破;
}
}
//找到與進程相同的標簽。
for(j = 0;j & ltmSIZEj++)
{
if(memory[j]= = process[I])
{
n = j;
}
}
//找到標誌值最大的那個。
for(j = 0;j & ltmSIZEj++)
{
if(flag[j]& gt;maxflag)
{
max flag = flag[j];
max = j;
}
}
If(n == -1) //不存在相同的進程。
{
如果(m!= -1) //有空閑的物理塊。
{
memory[m]= process[I];
flag[m]= 0;
for(j = 0;j & lt= m;j++)
{
flag[j]++;
}
m =-1;
}
否則//沒有空閑的物理塊。
{
memory[max]= process[I];
flag[max]= 0;
for(j = 0;j & ltmSIZEj++)
{
flag[j]++;
}
max =-1;
max flag = 0;
count++;
}
}
Else //同樣的過程存在。
{
memory[n]= process[I];
flag[n]= 0;
如果(m!= -1) //如果有空閑的物理塊,
{
flag[m]= 0;
}
for(j = 0;j & ltmSIZEj++)
{
flag[j]++;
}
max =-1;
max flag = 0;
n =-1;
}
for(j = 0;j & ltmSIZEj++)
{
printf("%d ",memory[j]);
}
printf(" \ n ");
}
Printf("頁面轉換次數:%d\n ",count);
}
3.最佳替換算法
對此我很抱歉,我不知道!