【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2304|回复: 0

操作系统 FIFO页面置换算法

[复制链接]
发表于 2009-11-1 22:09:07 | 显示全部楼层 |阅读模式

先进先出算法(FIFO算法)

    FIFO算法维护一个先进先出队列,队列长度为分配给这个进程的页面数M。开始时队列是空的,装入进程的第一页即可启动运行,当访问到某个不在内存的页面时,把它从辅存调入,加入FIFO队列的尾部。
    下图是一个实例,假定页面序列P为7 0 1 2 0 3 0 4,M=3,图中给出了页面队列的变化情况。这个极端例子在总共8次页面访问中,只有一次访问成功,缺页率f达87.5%。


wpe43.gif (910 bytes)表示页面失效       wpe44.gif (951 bytes) 表示页面未失效

FIFO的页面队列

    FIFO算法的优点是简单。一个很严重的缺点是在有的情况下,给进程的页面数M增加时,同样的页面序列P,缺页率反而增加,这称为FIFO异常。有兴趣的话,不妨自己构造这种例子。当某个页面刚被淘汰又要调入时容易产生这种现象。可以构造出无限多个例子。



代码如下:

#include<stdio.h>

int p1[10]={6,1,2,3,2,1,3,2,5,2};
int temp[3]={0};

//判断调用的值是否存在页面中
bool IsExit(int sCh)
{
 for(int i=0;i<3;i++)
  if(temp==sCh)
   return false;
 return true;
}
void FIFO(int p[10],int nZe)
{
 //内存标示mem1标示当前第一块内存页,mem2标示当前第二块内存页,mem3标示当前第三块内存页
 //flagle表示内存状态:Ready内存准备状态,false内存失败缺页,需要置换,true内存中已存在,不用置换
 printf("mem1\tmem2\tmem3\tflagle\n");
 printf("%d\t%d\t%d\tReady\n",temp[0],temp[1],temp[2]);
 for(int i = 0;i<10;i++)
  //如果没有在页面队列中
  if(IsExit(p))
  {
   temp[0]=temp[1];
   temp[1]=temp[2];
   temp[2]= p;
   //打印出内存状态
   printf("%d\t%d\t%d\tfalse\n",temp[0],temp[1],temp[2]);
  }
  else
   printf("%d\t%d\t%d\ttrue\n",temp[0],temp[1],temp[2]);
}
void main(){
 
 FIFO(p1,10);
 getchar();
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-14 19:25

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表