LRU置换算法利用栈结构实现
(2012-05-18 19:02:08)
标签:
os学习杂谈 |
分类: 学习笔记 |
描述:利用栈来保全当前使用的个页面号,每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此栈顶始终是最新被访问页面的编号,而栈底则是,最久为使用页面号。
#include<stdio.h>
#include<stdlib.h>#define N 50
int accessList[N];
typedef struct regitStack{
int size;
int *no;
int *head;
int *tail;
}Regit;
struct regitStack *regit;
int count;
int currentSize=0;
int createAccessList();
int createStack();
int* isEixt(int no);
int lru();
void printStack();
int main(){
createAccessList();
lru();
}
int createAccessList(){
int i;
printf("输入访问内存次数:");
scanf("%d",&count);
printf("输入页面访问序列\n");
for( i=0;i<count;i++){
printf("第%d个页面号:",i+1);
scanf("%d",&accessList[i]);
}
return 0;
}
int createStack(){
regit=(Regit*)malloc(sizeof(Regit));
regit->size=5;
regit->no=(int*)malloc(sizeof(int)*regit->size);
regit->head=regit->tail=regit->no;
return 0;
}
int lru(){
int i;
int *temp,*move;
for(i=0;i<count;i++){
{
if(currentSize<regit->size)//堆栈未满直接压到顶部
{
*(regit->head)=accessList[i];
regit->head++;
currentSize++;
}else{
move=regit->tail;
printf("第%d次访问时置换出%d页\n",i+1,*regit->tail);
while(1){
*move=*(move+1);
move++;
if(move==regit->head-1)
{
*move=accessList[i];
break;
}
}
}
}else{
if(accessList[i]!=*(regit->head-1)){
move=temp;
while(1){
*move=*(move+1);
move++;
if(move==regit->head-1){
*move=accessList[i];
break;
}
}
}
}
printStack();
}
return 0;
}
int* isEixt(int no){
while(p!=regit->head){
if(*p==no){
return p;
}
p++;
}
}
void printStack(){
int i;
printf("堆栈中的页面号:");
for(i=0;i<currentSize;i++){
printf("%d",regit->no[i]);
}
printf("\n");
}
前一篇:java引用赋值
后一篇:基于UDP协议的Socket例子