c语言实现页面置换

更新时间:2023-05-17 16:23:01 阅读量: 实用文档 文档下载

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

c语言实现页面置换

#include "stdio.h"

#include "stdlib.h"

#define true 1

#define false 0

int wang;

/*是否有元素*/

int have(int a[],int t)

{

int i=0,j=0;

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

{

if(a[j]==t)

{

i=1; /*有元素*/

break;

}

}

return i;

}

/*先进先出页面置换算法*/

void FIFO(int num[])

{

int i,j,k;

int a[4]={-1,-1,-1,-1} ;

for(i=0,j=0;i<20;i++)

{

if(j<4)

{

if(have(a,num[i])==0)

a[j++]=num[i];

}

else

{

if(have(a,num[i])==0)

{

c语言实现页面置换

for(j=1;j<4;j++)

a[j-1]=a[j];

a[3]=num[i];

}

}

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

printf(" %2d",a[k]);

printf(" \n");

}

}

/*最近最久未使用*/

void LRU(int num[])

{

int i,j,k,temp;

int a[4]={-1,-1,-1,-1} ;

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

{

if(i==0)

a[0]=num[0];

else

{

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

{

if(a[j]==num[i])

break;

}

for(k=j;k>0;k--)

{

a[k]=a[k-1];

}

a[0]=num[i];

}

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

printf(" %2d",a[k]);

printf(" \n");

}

c语言实现页面置换

}

/*选择排序*/

void SelectSort(int r[],int n)

{

int i,j,temp;

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

{

for(j=i+1;j<n;j++) /*不考虑后面元素,可视从j往前的数据都是排好的*/ {

if(r[i]>r[j])/*如果当前元素r[j]比索引指向的元素r[i]小,换位*/ {

temp=r[i];

r[i]=r[j];

r[j]=temp;

}

}

}

}

/*返回要置换的位置*/

int del(int a[],int num[],int n)

{

int i,j;

int s[4]={0,0,0,0};

int t[4]={0,0,0,0};

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

{

for(j=n;j<20;j++)

{

if(a[i]==num[j])

{

s[i]=j;

t[i]=j;

break;

}

}

if(j==20)

{ s[i]=20;t[i]=20;}

}

SelectSort(s,4);

c语言实现页面置换

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

{

if(t[i]==s[3])

break;

}

return i;

}

/*最佳置换算法*/

void Optimal(int num[])

{

int i,j,k,temp;

int a[4]={-1,-1,-1,-1} ;

for(i=0,j=0;i<20;i++)

{

if(j<4)

{

if(have(a,num[i])==0)

a[j++]=num[i];

}

else

{

if(have(a,num[i])==0)

{

temp=del(a,num,i);

a[temp]=num[i];

}

}

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

printf(" %2d",a[k]);

printf(" \n");

}

}

void main()

{

loop: /* 循环 */

{

char ch;

int i;

int num[20];

c语言实现页面置换

/*初始化页面调用数组*/

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

{

num[i]=rand()%10;

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

}

printf("\n");

printf("----------------------------------\n"); printf(" 1---FIFO;2---LRU;3---Optimal\n"); printf("----------------------------------\n\n"); printf("intput the NO. :");

i=0;

scanf("%d",&i);

printf("\n [1] [2] [3] [4]\n");

switch (i)

{

case 1:FIFO(num);break;

case 2:LRU(num); break;

case 3:Optimal(num);break;

default:printf("input wrong No.!!!");

}

printf("again?(y or n)\ninput:");

loop_1:

{

ch=getch();

if(ch=='y') /* y 再次输入 */

goto loop;

else if(ch=='n') /* n 退出 */

exit(0);

else /* 都不是提示输入错误 */ {

printf("\ninput wrong!again please!!!\ninput:"); goto loop_1;

}

}

}

}

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

Top