加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

先进先出算法,用C语言描述

(2011-05-16 17:19:24)
标签:

文化

 

试验程序:

#include<iostream.h>
#include<iomanip.h>

#define m 5     //m表示页数
#define n 3     //n表示物理块数
float interrupt="0".; //产生缺页中断的次数
int k="0";            //指向最先进入内存的页,即被淘汰的页
int PageTable[m];   //定义页表,总共m页,数组中数值是状态位 =1表示该页在内存中,=0表示不在内存中,默认处置为0
int Block[n];       //定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号
int process[20];    //进程访问序列
int number="1";       //用于标志访问次数
void Visit(int);    //访问函数


void main (void)
{
 int input;        
 cout<<"某进程共有"<<m<<"页,请输入进程访问序列(范围:1-"<<m<<",用0表示结束):\n";
 cin>>input;
 for(int length="0";input!=0;length++)   //将输入序列存入process数组,长度为length
 {
  process[length]=input;  
  cin>>input;
                         

 for(int j="0";j<length;j++)
  Visit(process[j]);   //依次访问页process[j]
 cout<<"共"<<length<<"次访问,产生"<<interrupt<<"次缺页中断,缺页率为 "<<interrupt/length<<"\n";
}

void Visit(int x)
{
 int i,j;
 cout<<setw(2)<<number<<": 访问页"<<x<<"  ";   //第number次访问,访问页x


 for(i=0;i<n;i++) 
 {
     if(Block[i]==0)   //访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页
     {
                interrupt++;       //缺页中断次数加1
          PageTable[x-1]=1;  //修改状态位
             Block[i]=x;     //页x调入物理块
          cout<<"缺页中断  内存未满 调入页"<<x<<"  物理块内的页为 ";
          for(j=0;j<=i;j++)cout<<Block[j]<<" ";    //输出物理块内的页号
          cout<<"\n";
    break;
     }
     if(PageTable[x-1]==1)   //访问页x时命中
     {
      cout<<"命中                        物理块内的页为 ";
            for(j=0;j<n && Block[j]!=0;j++)cout<<Block[j]<<" ";      //输出物理块内的页号
      cout<<"\n";
      break;
     }
 }
    if(i==n)   //访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页
 
     cout<<"缺页中断   淘汰页"<<Block[k]<<" 调入页"<<x<<"  物理块内的页为 ";
     interrupt++;       //缺页中断次数加1
           PageTable[Block[k]-1]=0;     //页Block[k]被淘汰,状态位修改为 0
     Block[k]=x;         //页x调入物理块
           PageTable[x-1]=1; //页x状态位修改为 1
           k=(k+1)%n;              //修改下次被淘汰页指针
           for(j=0;j<n;j++)cout<<Block[j]<<" ";      //输出物理块内的页号
     cout<<"\n";
 }

 number++;    //访问次数加1
}

0

阅读 收藏 喜欢 打印举报/Report
前一篇:感恩
后一篇:520
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有