| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2760 人关注过本帖
标题:页面置换算法FIFO,LRU的编程思想。。。
取消只看楼主 加入收藏
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:13 
页面置换算法FIFO,LRU的编程思想。。。
就是不知道怎么去着手,有没有高手给说一下思想?就是类似,步骤之类的。
搜索更多相关主题的帖子: 编程 
2013-04-30 09:34
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
额,没有人在吗?
我想问下步骤,思想之类的。帮下
2013-04-30 09:51
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
#include<iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define  L  20//页面走向长度最大为20
 int M; //内存块
struct Pro//定义一个结构体
 {    int num,time; };
 Input(int m,Pro p[L])//打印页面走向状态
{   cout<<"请输入实际页走向长度L(15<=L<=20):";  
   do     {   cin>>m;         if(m>20||m<15)cout<<"实际页长度须在15~20之间;请重新输入L: ";         
else break;   
 }while(1);   
 int i,j;   
  j=time(NULL);//取时钟时间   
 srand(j);//以时钟时间x为种子,初始化随机数发生器
  cout<<"输出随机数:  ";      
 for(i=0;i<m;i++)   
 { p[i].num=rand( )%10+1;// 1到10之间的随即数放到数组p中      
  p[i].time=0;  
 cout<<p[i].num<<" ";     }     
cout<<endl;   
 return m; }
void print(Pro *page1)//打印当前的页面
{   Pro *page=new Pro[M];   
 page=page1;   
 for(int i=0;i<M;i++)  
   cout<<page[i].num<<" ";   
  cout<<endl; }
int  Search(int e,Pro *page1  )//寻找内存块中与e相同的块号
{   Pro *page=new Pro[M];  
   page=page1;   
 for(int i=0;i<M;i++)if(e==page[i].num)return i;//返回i值   
 return -1; }
int Max(Pro *page1)//寻找最近最长未使用的页面
 {   Pro *page=new Pro[M];   
  page=page1;   
 int e=page[0].time,i=0;   
  while(i<M)                //找出离现在时间最长的页面   
 {   if(e<page[i].time)  e=page[i].time;      
   i++;     }   
 for( i=0;i<M;i++)if(e==page[i].time)return i;//找到离现在时间最长的页面返回其块号     return -1; }
 int Count(Pro *page1,int i,int t,Pro p[L])//记录当前内存块中页面离下次使用间隔长度
{   Pro *page=new Pro[M];   
  page=page1;   
  int count=0;   
 for(int j=i;j<L;j++)   
  {   if(page[t].num==p[j].num )break;//当前页面再次被访问时循环结束      
  else count++;//否则count+1     }  
   return count;//返回count的值 }
int main()
{   int c;   
  int m=0,t=0;
 float n=0;  
Pro p[L];   
  m=Input(m,p);//调用input函数,返回m值     cout<<"请输入可用内存页面数m(3~5): ";   
 do  
{  cin>>M;  
 if(M>5||M<3)  
 cout<<"内存块m须在3~5之间,请重新输入m: ";   
else break;  }while(1);      
  Pro *page=new Pro[M];     
do{ for(int i=0;i<M;i++)//初始化页面基本情况      
   {   page[i].num=0;        
     page[i].time=m-1-i;         }   
     i=0;               
  cout<<"1:FIFO页面置换"<<endl;      
  cout<<"2:LRU页面置换"<<endl;      
   cout<<"按其它键结束程序;"<<endl;      
   cin>>c;      
   system("cls");      
   if(c==1)//FIFO页面置换      
   {  n=0;  
 cout<<"      ******************************************       "<<endl;        
 cout<<"              FIFO算法页面置换情况如下:           "<<endl;   
 cout<<"      ******************************************      "<<endl;            
 while(i<m)           
  { if(Search(p[i].num,page)>=0)  //当前页面在内存中   
  {  cout<<p[i].num<<"  "; //输出当前页p[i].num   
  cout<<"不缺页"<<endl;   
   i++;         //i加1     }      
  else                       //当前页不在内存中              
   {   if(t==M)t=0;                    
 else                  
   {  n++;                      //缺页次数加1                  
   page[t].num=p[i].num;//把当前页面放入内存中     
 cout<<p[i].num<<"  ";                     
    print(page);            //打印当前页面
                t++;                    //下一个内存块     
  i++;                //指向下一个页面                     }            
    }            
 }           
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;           
     }        
 if(c==2)//LRU页面置换   {   n=0;      cout<<"   ******************************************      "<<endl;   
      cout<<"              LRU算法页面置换情况如下:           "<<endl;   
cout<<"     ******************************************     "<<endl;        
 while(i<m)   {            
 int a;            
t=Search(p[i].num,page);         
   if(t>=0)//如果已在内存块中   
 { page[t].time=0;//把与它相同的内存块的时间置0   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;//其它的时间加1   
 cout<<p[i].num<<"  ";   
  cout<<"不缺页"<<endl;    }        
     else                  //如果不在内存块中         
   {   n++;           //缺页次数加1              
   t=Max(page);  //返回最近最久未使用的块号赋值给t               
  page[t].num=p[i].num;         //进行替换              
   page[t].time=0;               //替换后时间置为0   
  cout<<p[i].num<<"  ";   
  print(page);   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;         //其它的时间加1           
  }     
 i++;   
 }      
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;   
 }
 }
while(c==1||c==2||c==3);            
return 0;
}  

帮看下错误在哪里?
2013-04-30 10:13
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
#include<iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define  L  20//页面走向长度最大为20
 int M; //内存块
struct Pro//定义一个结构体
 {    int num,time; };
 Input(int m,Pro p[L])//打印页面走向状态
{   cout<<"请输入实际页走向长度L(15<=L<=20):";  
   do     {   cin>>m;        
               if(m>20||m<15)cout<<"实际页长度须在15~20之间;请重新输入L: ";         
else break;   
 }while(1);   
 int i,j;   
  j=time(NULL);//取时钟时间   
 srand(j);//以时钟时间x为种子,初始化随机数发生器
  cout<<"输出随机数:  ";      
 for(i=0;i<m;i++)   
 { p[i].num=rand( )%10+1;// 1到10之间的随即数放到数组p中      
  p[i].time=0;  
 cout<<p[i].num<<" ";     }     
cout<<endl;   
 return m; }
void print(Pro *page1)//打印当前的页面
{   Pro *page=new Pro[M];   
 page=page1;   
 for(int i=0;i<M;i++)  
   cout<<page[i].num<<" ";   
  cout<<endl; }
int  Search(int e,Pro *page1  )//寻找内存块中与e相同的块号
{   Pro *page=new Pro[M];  
   page=page1;   
 for(int i=0;i<M;i++)if(e==page[i].num)return i;//返回i值   
 return -1; }
int Max(Pro *page1)//寻找最近最长未使用的页面
 {   Pro *page=new Pro[M];   
  page=page1;   
 int e=page[0].time,i=0;   
  while(i<M)                //找出离现在时间最长的页面   
 {   if(e<page[i].time)  e=page[i].time;      
   i++;     }   
 for( i=0;i<M;i++)if(e==page[i].time)return i;//找到离现在时间最长的页面返回其块号  
   return -1; }
 int Count(Pro *page1,int i,int t,Pro p[L])//记录当前内存块中页面离下次使用间隔长度
{   Pro *page=new Pro[M];   
  page=page1;   
  int count=0;   
 for(int j=i;j<L;j++)   
  {   if(page[t].num==p[j].num )break;//当前页面再次被访问时循环结束      
  else count++;//否则count+1     }  
   return count;//返回count的值 }
int main()
{   int c;   
  int m=0,t=0;
 float n=0;  
Pro p[L];   
  m=Input(m,p);//调用input函数,返回m值   
 cout<<"请输入可用内存页面数m(3~5): ";   
 do  
{  cin>>M;  
 if(M>5||M<3)  
 cout<<"内存块m须在3~5之间,请重新输入m: ";   
else break;
 }while(1);      
  Pro *page=new Pro[M];     
do{ for(int i=0;i<M;i++)//初始化页面基本情况      
   {   page[i].num=0;        
     page[i].time=m-1-i;         }   
     i=0;               
  cout<<"1:FIFO页面置换"<<endl;      
  cout<<"2:LRU页面置换"<<endl;      
  cout<<"按其它键结束程序;"<<endl;      
   cin>>c;      
   system("cls");      
   if(c==1)//FIFO页面置换      
   {  n=0;  
 cout<<"      ******************************************       "<<endl;        
 cout<<"              FIFO算法页面置换情况如下:           "<<endl;   
 cout<<"      ******************************************      "<<endl;            
 while(i<m)           
  { if(Search(p[i].num,page)>=0)  //当前页面在内存中   
  {  cout<<p[i].num<<"  "; //输出当前页p[i].num   
  cout<<"不缺页"<<endl;   
   i++;         //i加1     }      
  else                       //当前页不在内存中              
   {   if(t==M)t=0;                    
 else                  
   {  n++;                      //缺页次数加1                  
   page[t].num=p[i].num;//把当前页面放入内存中     
 cout<<p[i].num<<"  ";                     
    print(page);            //打印当前页面
                t++;                    //下一个内存块     
  i++;                //指向下一个页面                  
  }            
    }            
 }           
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;           
     }        
 if(c==2)//LRU页面置换  
 {   n=0;      
cout<<"   ******************************************      "<<endl;   
cout<<"              LRU算法页面置换情况如下:           "<<endl;   
cout<<"     ******************************************     "<<endl;        
 while(i<m)   {            
 int a;            
t=Search(p[i].num,page);         
   if(t>=0)//如果已在内存块中   
 { page[t].time=0;//把与它相同的内存块的时间置0   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;//其它的时间加1   
 cout<<p[i].num<<"  ";   
 cout<<"不缺页"<<endl;    }        
     else                  //如果不在内存块中         
   {   n++;           //缺页次数加1              
   t=Max(page);  //返回最近最久未使用的块号赋值给t               
  page[t].num=p[i].num;         //进行替换              
   page[t].time=0;               //替换后时间置为0   
  cout<<p[i].num<<"  ";   
  print(page);   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;         //其它的时间加1           
  }     
 i++;   
 }      
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;   
 }
 }while(c==1||c==2||c==3);            
return 0;
}  

为什么这个有错误?看不出来啊。。。。。。。。
2013-04-30 10:26
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
E:\U盘\a\a.cpp(54) : error C2601: 'main' : local function definitions are illegal
E:\U盘\a\a.cpp(131) : fatal error C1075: end of file found before the left brace '{' at 'E:\U盘\a\a.cpp(54)' was matched
执行 cl.exe 时出错.

错误提示是这样说的,可是我没觉得哪里错啊。。。
有人帮指点下的吗?
2013-04-30 10:27
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
来人来人啊
2013-04-30 10:42
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
#include<iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define  L  20//页面走向长度最大为20
 int M; //内存块
struct Pro//定义一个结构体
 {    int num,time; };
 Input(int m,Pro p[L])//打印页面走向状态
{   cout<<"请输入实际页走向长度L(15<=L<=20):";  
   do     {   cin>>m;        
               if(m>20||m<15)cout<<"实际页长度须在15~20之间;请重新输入L: ";         
else break;   
 }while(1);   
 int i,j;   
  j=time(NULL);//取时钟时间   
 srand(j);//以时钟时间x为种子,初始化随机数发生器
  cout<<"输出随机数:  ";      
 for(i=0;i<m;i++)   
 { p[i].num=rand( )%10+1;// 1到10之间的随即数放到数组p中      
  p[i].time=0;  
 cout<<p[i].num<<" ";     }     
cout<<endl;   
 return m; }
void print(Pro *page1)//打印当前的页面
{   Pro *page=new Pro[M];   
 page=page1;   
 for(int i=0;i<M;i++)  
   cout<<page[i].num<<" ";   
  cout<<endl; }
int  Search(int e,Pro *page1  )//寻找内存块中与e相同的块号
{   Pro *page=new Pro[M];  
   page=page1;   
 for(int i=0;i<M;i++)if(e==page[i].num)return i;//返回i值   
 return -1; }
int Max(Pro *page1)//寻找最近最长未使用的页面
 {   Pro *page=new Pro[M];   
  page=page1;   
 int e=page[0].time,i=0;   
  while(i<M)                //找出离现在时间最长的页面   
 {   if(e<page[i].time)  e=page[i].time;      
   i++;     }   
 for( i=0;i<M;i++)if(e==page[i].time)return i;//找到离现在时间最长的页面返回其块号  
   return -1; }
 int Count(Pro *page1,int i,int t,Pro p[L])//记录当前内存块中页面离下次使用间隔长度
{   Pro *page=new Pro[M];   
  page=page1;   
  int count=0;   
 for(int j=i;j<L;j++)   
  {   if(page[t].num==p[j].num )break;//当前页面再次被访问时循环结束      
  else count++;//否则count+1     }  
   return count;//返回count的值 }
int main()
{   int c;   
  int m=0,t=0;
 float n=0;  
Pro p[L];   
  m=Input(m,p);//调用input函数,返回m值   
 cout<<"请输入可用内存页面数m(3~5): ";   
 do  
{  cin>>M;  
 if(M>5||M<3)  
 cout<<"内存块m须在3~5之间,请重新输入m: ";   
else break;
 }while(1);      
  Pro *page=new Pro[M];     
do{
    for(int i=0;i<M;i++)//初始化页面基本情况      
   {   page[i].num=0;        
     page[i].time=m-1-i;         }   
     i=0;               
  cout<<"1:FIFO页面置换"<<endl;      
  cout<<"2:LRU页面置换"<<endl;      
  cout<<"按其它键结束程序;"<<endl;      
   cin>>c;      
   system("cls");      
   if(c==1)//FIFO页面置换      
   {  n=0;  
 cout<<"      ******************************************       "<<endl;        
 cout<<"              FIFO算法页面置换情况如下:           "<<endl;   
 cout<<"      ******************************************      "<<endl;            
 while(i<m)           
  {
     if(Search(p[i].num,page)>=0)  //当前页面在内存中   
  {  cout<<p[i].num<<"  "; //输出当前页p[i].num   
  cout<<"不缺页"<<endl;   
   i++;         //i加1     
     }      
  else                       //当前页不在内存中              
   {   if(t==M)
         t=0;                    
       else                  
       {  n++;                      //缺页次数加1                  
   page[t].num=p[i].num;//把当前页面放入内存中     
 cout<<p[i].num<<"  ";                     
    print(page);            //打印当前页面
                t++;                    //下一个内存块     
  i++;                //指向下一个页面                  
  }            
    }            
 }           
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;           
     }        
 if(c==2)//LRU页面置换  
 {   n=0;      
cout<<"   ******************************************      "<<endl;   
cout<<"              LRU算法页面置换情况如下:           "<<endl;   
cout<<"     ******************************************     "<<endl;        
 while(i<m)   {            
 int a;            
t=Search(p[i].num,page);         
   if(t>=0)//如果已在内存块中   
 { page[t].time=0;//把与它相同的内存块的时间置0   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;//其它的时间加1   
 cout<<p[i].num<<"  ";   
 cout<<"不缺页"<<endl;    }        
     else                  //如果不在内存块中         
   {   n++;           //缺页次数加1              
   t=Max(page);  //返回最近最久未使用的块号赋值给t               
  page[t].num=p[i].num;         //进行替换              
   page[t].time=0;               //替换后时间置为0   
  cout<<p[i].num<<"  ";   
  print(page);   
  for(a=0;a<M;a++)   
  if(a!=t)
      page[a].time++;         //其它的时间加1           
  }     
 i++;   
 }      
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;   
 }
 }while(c==1||c==2||c==3);            
return 0;
}  

E:\U盘\a\a.cpp(54) : error C2601: 'main' : local function definitions are illegal
E:\U盘\a\a.cpp(131) : fatal error C1075: end of file found before the left brace '{' at 'E:\U盘\a\a.cpp(54)' was matched
执行 cl.exe 时出错.

求解!
2013-04-30 10:57
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 8楼 zklhp
嗯,我知道这个,上面的代码它总说括号有错误,我就不明白了,括号我查了一下,是对上的啊。。。可是,到底哪里错了呢?
2013-04-30 11:01
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 8楼 zklhp
麻烦帮看下 main()的错误在哪里 好吗
2013-04-30 11:08
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 11楼 TonyDeng
???

我前面贴的是有错误的,我改了以后就又贴上了一遍

main()确实有错误,我就是看不出错误,检查了括号也没问题。

你说的,什么看不出?  我不太明白
2013-04-30 11:28
快速回复:页面置换算法FIFO,LRU的编程思想。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018453 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved