回 帖 发 新 帖 刷新版面

主题:LRU页面置换算法

花了很多时间做的,也可以说是一个比较好的算法吧.思路是对的,但是运行时有点错误,不知道后面为什么置换出来的页面是错的.哪位高手能给我找出来呀.参考操作系统LRU 算法.
#include<iostream.h>
void main()
{
    int a[10],b[10],c[10];
    
    int i,t,k,j;
    int n,m;
    cout<<"请输入内存容量m:";
    cin>>m;
    for(i=0;i<m;i++)
    {
        a[i]=-1;                         //-1 表示内存中无页面,0表示初始化
        b[i]=0;
    }
    cout<<"请输入要访问的页面顺序:"<<endl;
    
    for(i=0;i<10;i++)
    {   
        cin>>n;
        c[i]=n;
    }
    
    
    i=0;
while(i<10)
{
    for(k=0;k<m;k++)
    {
        if(a[k]==c[i])
        {    
            cout<<"内存中有这个页面,直接访问!"<<endl;
                b[k]=1;
                break;
        }
    }
        
    if(k==m)                                 //内存中没有要访问的页面
    {
        if(a[m-1]<0)
        {
            cout<<"内存未满, "; 
            for(k=0;k<m;k++)
            {
               if(a[k]<0)
                break;
            }
            a[k]=c[i];
            b[k]=1;
            cout<<c[i]<<"进入内存"<<endl;
        }
            
    else                                         //内存已满,将产生置换
    {
        int max=0;
        for(j=1;j<m;j++)
        {
         if(b[max]<b[j])
         max=j;
        }
        cout<<c[i]<<"进入内存, "<<a[max]<<"被置换出内存"<<endl;
            a[max]=c[i];
            b[max]=1;
        }
    }
    i++;
} // while
    
}   //main


回复列表 (共1个回复)

沙发

贴一下自己做的另一个得法:fifo,两个算法思路都差不多,用的都是数组.
这个算法是对的,没有错误.上一个,我实在想不通哪错了.帮忙解决一下.

#include<iostream.h>
void main()
{
    cout<<"****************************************"<<endl;
    cout<<"         FIFO算法置换                   "<<endl;
    cout<<"****************************************"<<endl;
    
    int n,m,k;
    int i=0,j=0,count=0;
    
    int a[32],b[32];
    cout<<"请输入内存容量m:";
    cin>>m;
    cout<<"请输入页面次序:"<<endl;
    for(i=0;i<10;i++)
    {
        cin>>n;
        a[i]=n;
    }
    for(j=0;j<m;j++)                   //初始化b[j];使等于-1,表示开始时内存中无页面.
    {
        b[j]=-1;                         
    }
    
    
    i=0;
    j=0;
    
while(i<10)
{
        
    for(k=0;k<m;k++)
    {
            
    if(b[k]==a[i])
    {
    cout<<"内存中有这个页面,直接访问."<<endl;
        break;
    }
}                               // 判断内存中是否有该页面.
    if(k==m)
    {    
    if(b[m-1]<0)
    {
    b[j]=a[i];  
    cout<<b[j]<<"页面进入内存 ,  ";
    count++;
    cout<<"产生"<<count<<"次缺页"<<endl;
    j++;
    j=j%m;
    }
else
{
 count++;
cout<<b[j]<<"被置换出去,产生"<<count<<"次缺页" <<endl;            
    b[j]=a[i]; 
    j++;
    j=j%m;
}
            
}
i++;
}
    
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册