作者在 2008-10-02 11:23:09 发布以下内容
学习操作系统的人必知的东西。。。
LRU。。。
这里给个高度算法。。。
/********************************************************************
* 题目: LRU调度算法 *
* 思想: 栈和数组 *
* 作者: blueboy *
********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 1000
#define QUEUESIZE 1000
int main()
{
int i,j,k;
int flag=1; /*PageError flag*/
int cnt=0; /*Stack NO. */
int PageFault=0; /*Total PageError*/
int STACK_SIZE=3; /*the size of the stack*/
int QUEUE_MAX=0; /*the max size of the Queue*/
int Stack[STACKSIZE]; /*the stack*/
int Queue[QUEUESIZE]; /*the Page_Queue8*/
/* int Queue[QUEUE_MAX]={4,3,2,1,4,3,5,4,3,2,1,5}; */
printf("Input the size of the stack:\n");
scanf("%d",&STACK_SIZE);
printf("Input the queue(Enter ctrl+d(c) to end)\n");
while(scanf("%d",&k)!=NULL)
Queue[QUEUE_MAX++]=k;
printf("Output:\n");
for(i=0;i<STACK_SIZE;i++)
{
Stack[i]=Queue[i];
printf("Stack %d:\n",++cnt);
for(j=i;j>=0;j--)
printf("%d\n",Stack[j]);
if(flag){
printf("\tPageFault!\n");
PageFault++;}
}
for(;i<QUEUE_MAX;i++)
{
for(k=0;k<STACK_SIZE;k++)
{
if(Stack[k]==Queue[i])
{
flag=0;
for(j=k;j<STACK_SIZE-1;j++)
Stack[j]=Stack[j+1];
Stack[j]=Queue[i];
break;
}
else
continue;
}
if(k>=STACK_SIZE)
{
flag=1;
for(j=0;j<STACK_SIZE-1;j++)
Stack[j]=Stack[j+1];
Stack[j]=Queue[i];
}
printf("Stack %d:\n",++cnt);
for(j=STACK_SIZE-1;j>=0;j--)
printf("%d\n",Stack[j]);
if(flag)
{
printf("\tPageFault!\n");
PageFault++;
}
}
printf("Total PageFault:%d\n",PageFault);
return 0;
}
* 题目: LRU调度算法 *
* 思想: 栈和数组 *
* 作者: blueboy *
********************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 1000
#define QUEUESIZE 1000
int main()
{
int i,j,k;
int flag=1; /*PageError flag*/
int cnt=0; /*Stack NO. */
int PageFault=0; /*Total PageError*/
int STACK_SIZE=3; /*the size of the stack*/
int QUEUE_MAX=0; /*the max size of the Queue*/
int Stack[STACKSIZE]; /*the stack*/
int Queue[QUEUESIZE]; /*the Page_Queue8*/
/* int Queue[QUEUE_MAX]={4,3,2,1,4,3,5,4,3,2,1,5}; */
printf("Input the size of the stack:\n");
scanf("%d",&STACK_SIZE);
printf("Input the queue(Enter ctrl+d(c) to end)\n");
while(scanf("%d",&k)!=NULL)
Queue[QUEUE_MAX++]=k;
printf("Output:\n");
for(i=0;i<STACK_SIZE;i++)
{
Stack[i]=Queue[i];
printf("Stack %d:\n",++cnt);
for(j=i;j>=0;j--)
printf("%d\n",Stack[j]);
if(flag){
printf("\tPageFault!\n");
PageFault++;}
}
for(;i<QUEUE_MAX;i++)
{
for(k=0;k<STACK_SIZE;k++)
{
if(Stack[k]==Queue[i])
{
flag=0;
for(j=k;j<STACK_SIZE-1;j++)
Stack[j]=Stack[j+1];
Stack[j]=Queue[i];
break;
}
else
continue;
}
if(k>=STACK_SIZE)
{
flag=1;
for(j=0;j<STACK_SIZE-1;j++)
Stack[j]=Stack[j+1];
Stack[j]=Queue[i];
}
printf("Stack %d:\n",++cnt);
for(j=STACK_SIZE-1;j>=0;j--)
printf("%d\n",Stack[j]);
if(flag)
{
printf("\tPageFault!\n");
PageFault++;
}
}
printf("Total PageFault:%d\n",PageFault);
return 0;
}