os模拟页面置换算法

更新时间:2023-07-21 01:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

os模拟页面置换算法

Ó?CÓ??ō»?C++Ó??ō¶ō?³??Ö?»»??·Ø´???Ä£ÄāLFU NUR

??ēó£?´Óīĵ?Ö??ä??´?³?µÄnøö·?ī?????£¬?ōµ°·ÖÅäø?´?³?µÄī????³????m£¬?ä³öø?·?ī?????µÄ?±?³ā?q £

//*****LRU*********************:

#include <stdio.h>

#include <stdlib.h>

#define mSIZE 3//·ÖÅä??øöÄ?´??³æé

#defin e pSIZE 12//×ܹ²12øö´?³?

struct mem

{

int num;

int count;

}memery[3]={0,-1,0,-1,0,-1};

static int process[pSIZE] ={1,2,3,4,1,2,5,1,2,3,4,5};//?³??·?ī?????

void LRU();

void get();

int main()

{

get();

printf("\n(LRU)\treplace\n");

LRU();

system("PAUSE");

return 0;

}

void get()

{

int w[12]={1,2,3,4,1,2,5,1,2,3,4,5};

int i,n;

for(i=0;i<12;i++)

{

printf("%d ",w[i]);

}

}

void LRU()

{

int i = 0, j = 0,k=0,x,y;

int replace;

for(i = 0; i<pSIZE; i++) //¶ō?ä??????´????-»·

{

os模拟页面置换算法

x=0;y=0; //Ö?x£¬y³õÖµī?0

for(j = 0; j < mSIZE; j++) //¶ō??øöÄ?´?æé´????-»·£¬??²éÕ?Ó??»Ó?Ó?µ´´«·?ī??³?Å???¬µÄ if(memery[j].num == process[i])

{ x=1;//Ó????¬µÄō?Ö?xī?1

replace=process[i];

memery[j].count=0;//Ö?´?æécountī?0

for(k=0;k<3;k++)

if(k!=j&&memery[k].num!=0)memery[k].count++;//?ä?ū²»ī?0?³count++

break;//??³ö´?´īÄ?´?æé?-»·

}

if(x==0)//?»Ó?Ó?µ´´«·?ī??³?Å???¬µÄÄ?´?æé

{

for(j = 0; j < mSIZE; j++)//¶ōÄ?´?æé?-»·£¬²éÕ?Ó??»Ó?æÕÄ?´?æé

if(memery[j].num== 0)

{

y=1;//Ó?ō?Ö?yī?1

replace=0;

memery[j].num=process[i];// Ö?´?Ä?´?æéī?·?ī??³?Å

memery[j].count=0;//Ö?´?æécountī?0

for(k=0;k<3;k++)

if(k!=j&&memery[k].num!=0)memery[k].count++;//?ä?ū²»ī?0?³count++

break;//??³ö´?´īÄ?´?æé?-»·

}

}

if(x==0&&y==0)//µ??»Ó?Ó?µ´´«·?ī??³?Å???¬µÄÄ?´?æé?²?»Ó?æÕÄ?´?æé

{

int m=memery[0].count;

for(j = 0; j < mSIZE; j++)

{

if(memery[j].count>m)

m=memery[j].count;

}//²éÕ?³öcount×ī´óµÄÄ?´?æém

for(j=0;j<mSIZE;j++)//¶ōÄ?´?æé?-»·£¬count=mµÄÄ?´?æé

{

if(memery[j].count==m)

{

replace=memery[j].num;

memery[j].num=process[i]; //Ö?´?Ä?´?æéī?·?ī??³?Åæé

memery[j].count=0;//Ö?´?æécountī?0

}

else memery[j].count++;//?ä?ūæécount++

}

os模拟页面置换算法

}

for(j = 0 ;j < mSIZE; j++) //´?Ó ?æ´ī·?ī??óµÄēéæö

printf("%d ",memery[j].num);

printf("\t%d\n",replace);

}

}

//*******nur********************

#include"stdio.h"

#include"stdlib.h"

#define ap 4

#define CLEAR_PERIOD 4

#define max 100

struct zhan //´¦???³???³??µÄÕ»

{

int i;

int j; //×´?¬?ī£¬Ó?Ó?×ī´ü?»Ó??¹Ó??³??µÄ??»»? ōń

zhan *next;

}*ap_top,*ap_tail;

zhan *mem_zhan[ap];//??×é±??¶Ä?´??³?µ?Ö´¦??µÄ?³Õ»

void shuru() //?ä???Æ???µ?Ö£¬?µ?Ö?³??????Ö´???³??µÄ´??

{

int m=1;

int ap_num; //?³?????æ

zhan *t;

printf("please input the ap's number of storage:");

scanf("%i",&ap_num);

ap_tail=(zhan *)malloc(sizeof(zhan));

printf("please input the turn of the ap:(end by '0')\n"); do{

if(m==1)

ap_top=ap_tail;

scanf("%d",&ap_tail->i);

if(ap_tail->i==0)

{ap_tail->next=NULL;break;

}

if(ap_tail->i<0||ap_tail->i>ap_num)//?ä??Å?´?´¦?? do{

printf("your inpution is wrong!continue~~\n");

scanf("%d",&ap_tail->i);

if(ap_tail->i==0)

os模拟页面置换算法

{ap_tail->next=NULL;

break;}

}while(ap_tail->i<0||ap_tail->i>ap_num);

t=(zhan *)malloc(sizeof(zhan));

ap_tail->next=t;//´Ø?¢?´±?

ap_tail=t;

m++;

}while(ap_tail->i!=0);

}

void shuchu()//³ö??Ä?´??³??µÄ?µ±?±??¶

{

zhan *p;

int m=0;

int n;

while(m<ap){

p=mem_zhan[m];

m++;

n=1;

do{

if(n==1)

printf("Ä?´??³%d?Å**%d ",m,p->i);

else

printf("*%d ",p->i);

n++;

p=p->next;

}while(p->next!=NULL);

printf("\n");

}

};

//====================??·Ø?µ?ֵĹ«¹²?Æ??²æ·Ö============================ int mingzhong(zhan *p[ap],zhan *jt)//?üÖ??Æ??

{

int m;

for(m=0;m<ap;m++)

if(p[m]->i==jt->i)

{ p[m]->j=max;

return 1;

break;

}

return 0;

os模拟页面置换算法

}

//=====================×ī´ü?»Ó??¹Ó??³???ō?-??·ØNUR?µ?Ö=============== void suanfa1()

{

int n;

int m;

int l;

zhan *p;

zhan *top[ap],*tail[ap];

p=ap_top;

for(m=0;m<ap;m++)//ÖøÕ?³õ?µ»Æ

{

mem_zhan[m]=(zhan *)malloc(sizeof(zhan));

mem_zhan[m]->i=0;mem_zhan[m]->j=0;

tail[m]=top[m]=mem_zhan[m];

}

do{

for(n=1;n<=CLEAR_PERIOD;n++)//ÖÜ???-»·

{

//?üÖ?´¦??

if(mingzhong(&tail[ap],p)==1)

{

for(m=0;m<ap;m++)//·ÖÅäæյ䲢´Ø?¢?´±?

{

tail[m]=(zhan *)malloc(sizeof(zhan));

tail[m]->i=top[m]->i;

tail[m]->j=top[m]->j;

top[m]->next=tail[m];

top[m]=tail[m];

if(m==ap-1)

if(top[m]->j==max)

for(m=0;m<ap;m++)

top[m]->j=0;

if(top[m]->i==p->i)

top[m]->j=max;

}

}

//²»Ö?´¦??

else

{

for(m=0;m<ap;m++)

{

if(top[m]->i==0)

os模拟页面置换算法

{

l=1;

break;

}

else

l=0;

}

if(l==1)

for(m=0;m<ap;m++)

{

if(top[m]->i==0)

{

top[m]->i=p->i;

top[m]->j=max;

break;

}

}

else

for(m=0;m<ap;m++)//? ōń×ī? ??»»¶ō?ó

{

if(top[m]->j==0)

{

top[m]->i=p->i;

top[m]->j=max;

break;

}

}

for(m=0;m<ap;m++)//·ÖÅäæյ䲢´Ø?¢?´±?

{

tail[m]=(zhan *)malloc(sizeof(zhan)); tail[m]->i=top[m]->i;

tail[m]->j=top[m]->j;

top[m]->next=tail[m];

top[m]=tail[m];

if(m==ap-1)

if(top[m]->j==max)

for(m=0;m<ap;m++)

top[m]->j=0;

}

}

if(n==CLEAR_PERIOD)//ÖÜ??´???Ö??ā³õ?µ»Æ{

os模拟页面置换算法

for(m=0;m<ap;m++)

top[m]->j=0;

}

p=p->next;

if(p->next==NULL)//×ī?óµÓøö?´±??Õī²

{

for(m=0;m<ap;m++)

top[m]->next=NULL;

break;

}

}

}while(p->next!=NULL);

}

//=====================???????ō?-??·ØOPT?µ?Ö========================= //?»?©?äÖ?Ó?µ´µÄ?Æ??

int panduan(zhan *p[ap])//Å?¶??ē·ńµ??é??±?£¬¶µÕ?µ´µ??é?ī

{

int m,h=0;

for(m=0;m<ap;m++)

if(p[m]->j==max)

{h=1;break;}

return h;

}

int zuiyuan(zhan *p[ap])//×īō¶?³??²éÕ?£¬????»»µÄ?³??

{

int n,m;

zhan *t1,*t2;

t1=p[0];

for(m=1;m<ap;m++)

{

t2=p[m];

if(t1->j<t2->j)//´óÓ???µ?Ó?²»´»»»

{

t1=t2;

n=m;

}

}

return n;

}

//============???????ō?-??·ØOPT?µ?ÖÖ÷?ā?Æ??============

void suanfa2()

{

os模拟页面置换算法

int m;

int n=1;

int k,h;

zhan *p1,*p2;

zhan *t1,*t2;

zhan *top[ap],*tail[ap];

p1=ap_top;

for(m=0;m<ap;m++)//³õ?µ»Æ?×?ī

{

top[m]=mem_zhan[m];

top[m]->i=0;

top[m]->j=max;

tail[m]=top[m];

}

do{

p2=p1->next;

//if(mingzhong(&top[ap],&p1)==1)//?üÖ?µÄēéæö´¦??for(m=0;m<ap;m++)

{

if(top[m]->i==p1->i)

{h=1;break;}

else

h=0;

}

if(h==1)//?üÖ?µÄēéæö´¦??

{

for(m=0;m<ap;m++)

{

tail[m]=tail[m]->next;

tail[m]->i=top[m]->i;

tail[m]->j=max;

top[m]=tail[m];

}

}

else//·ē?üÖ?ēéæö´¦??

{

do{

for(m=0;m<ap;m++)//?°Õ?Ä?´?ø÷?³????µÄ¶???

{

if(top[m]->i==p2->i)

if(top[m]->j==max)

top[m]->j=n;

}

for(m=0;m<ap;m++)

os模拟页面置换算法

{

h=0;

if(top[m]->j==max)

{h=1;break;}

}

if(h==0)//Å?¶??ē·ń?°Õ????«

break;

n++;

if(p2->next==NULL)

break;

p2=p2->next;

}while(p2->next!=NULL);

//k=zuiyuan(&top[ap]);//?°Õ?×īō¶¶???Ä?´??³??£¬?²¶??ē????»»µÄÄ?´??³for(m=0;m<ap;m++)

{

if(top[m]->i==0)

if(top[m]->j==max)

top[m]->j=max+1;

}

t1=top[0];

k=0;

for(m=1;m<ap;m++)

{

t2=top[m];

if(t1->j<t2->j)//´óÓ???µ?Ó?²»´»»»

{

t1=t2;

k=m;

}

}

top[k]->i=p1->i; //×īō¶?³????»»

for(m=0;m<ap;m++) //???ā???»?ī²¢³õ?µ»Æ

{

tail[m]=tail[m]->next;

tail[m]->i=top[m]->i;

tail[m]->j=max;

top[m]=tail[m];

}

}

p1=p1->next;

}while(p1->next!=NULL);

}

os模拟页面置换算法

void main()

{

zhan *q;

q=ap_top;

shuru();

printf("=====×ī´ü?»Ó??¹Ó??³???ō?-??·ØNUR?µ?Ö==============\n"); printf("\n");

suanfa1();

shuchu();

printf("\n=====???????ō?-??·ØOPT?µ?Ö=======================\n"); printf("\n");

suanfa2();

shuchu();

}

本文来源:https://www.bwwdw.com/article/1vu1.html

Top