经典操作系统教材中的LRU算法的自编c++实现及源码。

原创 2003年12月19日 23:20:00

#include <iostream.h>
#include <string.h>

/*void setm(int a[][],int m,int n)
{ int i,j;
  for(i=0;i<n;i++)
  {a[m-1][i]=1;
  }
  for(j=0;j<n;j++)
  {a[i][m-1]=0;}
};*/
int **martrix;
 int i,j;
void setm(int m,int n)
{for(i=0;i<n;i++)
{martrix[m][i]=1;
 martrix[i][m]=0;
}
}
char * current;
void print(int n)
{ int p,q;
for(p=0;p<n;p++)
{ for(q=0;q<n;q++)
   {cout<<martrix[p][q]<<" ";}
   cout<<"**"<<current[p];
   cout<<"/n";
}

}
int mini(int *b)
{int i=0;
 int n,m,flag;
 n=0;
 while(b[i]>=0&&b[i]<=9){n++;i++;}
m=b[0];flag=0;
 for(j=1;j<n;j++)
 { if(m>b[j]) {m=b[j];flag=j;}
 }
return flag;
}

void main()
{
 int n;
 char sequence[255];
 cout<<"请输入页架数:";
 cin>>n;
 cout<<"请输入访问序列:";
 cin>>sequence;
 cout<<"*****ALL RIGHT RESERVED BY 英雄*****"<<endl;

 martrix=new int * [n];
 for( i=0;i<n;i++)
  martrix[i]=new int[n];

 current=new char [n];
 for(i=0;i<n;i++)
  current[i]=' ';
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   martrix[i][j]=0;
  int k;
  int len=strlen(sequence);
  //setm(0,n);print(n);cout<<endl;
  //setm(1,n);print(n);cout<<endl;
  //setm(2,n);print(n);
  //for(i=1;i<=len;i++)
 //{ if(i<=n) {setm(i-1,n);print(n);cout<<endl;}
 //}
  int flag;
  int f;
  int *total;
  int g;
  int count=0;
  char c;
  total=new int[n];
  for(i=0;i<n;i++)
   total[i]=0;
for(k=1;k<=len;k++)
{  cout<<endl;
 cout<<sequence[k-1]<<"要求进入"<<endl;
 if(k<=n) {current[k-1]=sequence[k-1];setm(k-1,n);print(n);cout<<"缺页"<<endl;count++;}
else
{     for(i=0;i<n;i++)
       {      if(current[i]==sequence[k-1]) {flag=i;  break;}
       }
    if(i==n) {
             for(f=0;f<n;f++)
                    { for(g=0;g<n;g++)
                           {total[f]+=martrix[f][g];}
            }
        c=current[mini(total)];
        current[mini(total)]=sequence[k-1];
        setm(mini(total),n);print(n);cout<<"缺页,置换前一次"<<c<<"的那行"<<endl;
        cout<<endl;
        count++;
               }           
else
{setm(flag,n);print(n);cout<<endl;}
}
for(i=0;i<n;i++)
                  total[i]=0;

}
cout<<"总共有"<<count<<"次缺页"<<endl;
cout<<"请按任意键并回车退出"<<endl;
cin>>c;}

 

不妨用课本上的例子先测试下这个小东西哟!
课本上的例子是:页架数是:4;
访问序列是:0123010321;
执行结果是:
请输入页架数:4
请输入访问序列:0123010321
*****ALL RIGHT RESERVED BY 英雄**

0要求进入
0 1 1 1 **0
0 0 0 0 **
0 0 0 0 **
0 0 0 0 **
缺页

1要求进入
0 0 1 1 **0
1 0 1 1 **1
0 0 0 0 **
0 0 0 0 **
缺页

2要求进入
0 0 0 1 **0
1 0 0 1 **1
1 1 0 1 **2
0 0 0 0 **
缺页

3要求进入
0 0 0 0 **0
1 0 0 0 **1
1 1 0 0 **2
1 1 1 0 **3
缺页

0要求进入
0 1 1 1 **0
0 0 0 0 **1
0 1 0 0 **2
0 1 1 0 **3


1要求进入
0 0 1 1 **0
1 0 1 1 **1
0 0 0 0 **2
0 0 1 0 **3


0要求进入
0 1 1 1 **0
0 0 1 1 **1
0 0 0 0 **2
0 0 1 0 **3


3要求进入
0 1 1 0 **0
0 0 1 0 **1
0 0 0 0 **2
1 1 1 0 **3


2要求进入
0 1 0 0 **0
0 0 0 0 **1
1 1 0 1 **2
1 1 0 0 **3


1要求进入
0 0 0 0 **0
1 0 1 1 **1
1 0 0 1 **2
1 0 0 0 **3

总共有4次缺页
请按任意键并回车退出

这个与课本上的答案可是一样的哟!
其它的例子就大家去试了,比如说这次作业:

页架数是:4;
访问序列是:ABCDABEABCDE
你敲进去就可以出结果了.
请输入页架数:4
请输入访问序列:ABCDABEABCDE
*****ALL RIGHT RESERVED BY 英雄

A要求进入
0 1 1 1 **A
0 0 0 0 **
0 0 0 0 **
0 0 0 0 **
缺页

B要求进入
0 0 1 1 **A
1 0 1 1 **B
0 0 0 0 **
0 0 0 0 **
缺页

C要求进入
0 0 0 1 **A
1 0 0 1 **B
1 1 0 1 **C
0 0 0 0 **
缺页

D要求进入
0 0 0 0 **A
1 0 0 0 **B
1 1 0 0 **C
1 1 1 0 **D
缺页

A要求进入
0 1 1 1 **A
0 0 0 0 **B
0 1 0 0 **C
0 1 1 0 **D


B要求进入
0 0 1 1 **A
1 0 1 1 **B
0 0 0 0 **C
0 0 1 0 **D


E要求进入
0 0 0 1 **A
1 0 0 1 **B
1 1 0 1 **E
0 0 0 0 **D
缺页,置换前一次C的那行


A要求进入
0 1 1 1 **A
0 0 0 1 **B
0 1 0 1 **E
0 0 0 0 **D


B要求进入
0 0 1 1 **A
1 0 1 1 **B
0 0 0 1 **E
0 0 0 0 **D


C要求进入
0 0 1 0 **A
1 0 1 0 **B
0 0 0 0 **E
1 1 1 0 **C
缺页,置换前一次D的那行


D要求进入
0 0 0 0 **A
1 0 0 0 **B
1 1 0 1 **D
1 1 0 0 **C
缺页,置换前一次E的那行


E要求进入
0 1 1 1 **E
0 0 0 0 **B
0 1 0 1 **D
0 1 0 0 **C
缺页,置换前一次A的那行

总共有8次缺页
请按任意键并回车退出

 

关于操作系统的LRU算法

也不知道要写啥,感觉这次的报告是个锻炼,思考才会更深一步去看书,为了解决一个问题而去反复理解思考一个问题这样的学习是扎实的,感人的。 LRU 页面替换算法 实现双向链表(利用严为民老师的数据结构)...
  • zw15724584198
  • zw15724584198
  • 2016年11月17日 23:49
  • 585

剖析LRU算法及LinkedHashMap源码实现机制

一、简述 LRU(Least Recently Used),注意L代表的不是Latest,翻译成中文通常叫:近期最少使用算法、最近最少使用算法。LRU与LFU(Least Frequently ...
  • u013400939
  • u013400939
  • 2016年07月06日 22:56
  • 952

使用C++STL中的deque实现操作系统FIFO、LRU页面置换算法

#include #include //双端队列所在的头文件 #include //find()函数所在的头文件 using namespace std; const int LEN = 17; d...
  • liuweiyuxiang
  • liuweiyuxiang
  • 2016年05月30日 00:26
  • 1697

操作系统实验之页面置换算法(OPT、FIFO、LRU)C++简单实现

南邮操作系统实验之页面置换算法(OPT、FIFO、LRU)C++简单实现
  • qq_26071477
  • qq_26071477
  • 2016年12月11日 22:02
  • 4219

LRU算法 C++实现

整体思路:一个循环队列同时使用节点的计数来标记节点的新旧信息,如果有新节点加入时,就把最旧的节点清空,将新节点加入。具体画一下图比较好理解。 #include #include #include ...
  • o1101574955
  • o1101574955
  • 2017年09月01日 09:15
  • 244

计算机操作系统 LRU算法 缺页中断

计算机操作系统  LRU算法 缺页中断 所谓的缺页,就是要访问的页不再内存中, 需要从外存中调入内存才可访问 LRU(Least recently used,最近最少使用)算法根据数据的...
  • wangming520liwei
  • wangming520liwei
  • 2017年01月17日 15:15
  • 561

操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)

页面置换:在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断(page fault)。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。 ...
  • woshiwanghao_hi
  • woshiwanghao_hi
  • 2013年10月24日 20:10
  • 11037

LRU(近期最少使用算法)C++实现源码

写在前面 今天一同学去公司实习面试,面试官要求手写LRU算法,他有些懵了。在这里想写篇博客给他作为参考,同时也给大家作为参考,我会给出两种实现方式。 LRU(最近最少使用算法) LRU是CPU ...
  • wedy542700927
  • wedy542700927
  • 2017年04月25日 21:58
  • 421

LRU缓存算法 - C++版

LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。  实现思路:   hashtable + 双向链表 时间复杂度:    插入,查找,删除:O(...
  • l402398703
  • l402398703
  • 2014年03月25日 01:59
  • 6119

LRU Cache的简单c++实现

什么是 LRU LRU Cache是一个Cache的置换算法,含义是“最近最少使用”,把满足“最近最少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是最近刚刚访问的,因为这样的数...
  • ygrx
  • ygrx
  • 2013年09月05日 09:17
  • 8092
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典操作系统教材中的LRU算法的自编c++实现及源码。
举报原因:
原因补充:

(最多只允许输入30个字)