FIFO调用算法(不完整版)

#include<stdio.h>
#include<iostream.h>
#include <stdlib.h>
#include<time.h>
#define Stack_size 4
struct aa{ //代表一个物理页的节点
int page; //物理页存放的虚存页号
aa* next; //指向下一物理页
};
typedef struct
{
int elem[Stack_size];
int top;
int top2;
}Seq;

void Soseq(Seq *S)
{S->top=-1;
S->top2=0;
}

void main()
{
srand((unsigned)time(0)); //以当前时间做随机种子
int i,addr,pageN,ii,m,answer,ffalse,count;
double sum;
aa *head,*tail,*temp,*table;
ffalse=0; //页面失效次数(未命中次数)
answer=0;
int pageNums[150]; //存放页地址流
m=4; //4个物理页
table=new(aa); //建立第一个物理页节点
head=table; //链表头指针指向该节点
table->page=-1; //初值-1表示没有放置虚存页
temp=table; //临时指针指向第一个物理页
for(ii=2;ii<=m;ii++) //继续构建m-1个物理页
{ table=new(aa); //新建一个物理页节点
table->page=-1;
temp->next=table; //前一个节点的next指向本节点,形成链表
temp=table; //临时指针指向新建物理页节点
if (ii==m){table->next=NULL; } //最后物理页节点next指针指向空
}
tail=table; //尾指针指向链表尾
count=0;
i=0;

while(i<150) //每次循环,构造地址流的150个地址中的一个地址
{
if (count==0) { addr =(rand()%120+1)%120; pageN = addr /10;}
// count=0表示,在[0,119]的指令地址之间随机选取一起点M,顺序
//执行一条指令(+1),即获得M+1的指令地址;pageNum为地址所在页号。
if (count==1) { addr =rand()%(addr +1); pageN = addr /10;}
// count=1表示,在前地址[0,M+1]中随机选取一条指令并执行,
//该指令的地址为M‘;
if(count==2) { pageN =(( addr +1)%120)/10;}
//顺序执行一条指令,其地址为M‘+1;
if(count==3) { pageN =( rand()%(120- (addr+2)) + addr +2)%120/10;}
//在后地址[M‘+2,119]中随机选取一条指令并执行; //
++count;
pageNums[i]= pageN ;
if (count==4){count=0;} //进入下一个4次循环,再分4步生成4个地址
i++;
}
//输出页地址流
for(i=0;i<150;i++) { cout<< pageNums[i]<<" ";}
cout<<endl;
//----------------------------------------------------------------------------------------
//以下是FIFO最近最少使用算法

Seq *S1;
S1=(Seq *)malloc(sizeof(Seq));
Soseq(S1);
int y=0;
for(int q=0;q<150;q++)
{int x=pageNums[q];
if(S1->top!=Stack_size-1)
{S1->top++;
S1->elem[S1->top]=x;}
else
if(S1->elem[0]!=x&&S1->elem[1]!=x&&S1->elem[2]!=x&&S1->elem[3]!=x)
{S1->elem[S1->top2]=x;
S1->top2++;
y++;
if(S1->top2==3)
{S1->top2=0;}
}
}
sum=1.0-y/120.0;
cout<<"FIFO算法命中率:"<<sum<<endl;
}

时间: 2024-10-18 16:49:17

FIFO调用算法(不完整版)的相关文章

调用谷歌地图完整版

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="content-ty

Android照片墙完整版,完美结合LruCache和DiskLruCache

转载地址:http://blog.csdn.net/guolin_blog/article/details/34093441#comments 在上一篇文章当中,我们学习了DiskLruCache的概念和基本用法,但仅仅是掌握理论知识显然是不够的,那么本篇文章我们就来继续进阶一下,看一看在实战当中应该怎样合理使用DiskLruCache.还不熟悉DiskLruCache用法的朋友可以先去参考我的上一篇文章 Android DiskLruCache完全解析,硬盘缓存的最佳方案 . 其实,在真正的项

机房收费系统之下机完整版

前篇博客只是简单的说了下,机房收费系统下机的简单思路,下面来正式的介绍下整个流程. 分析 由于下机的时候需要涉及到两个表中的数值--StudentInfo表和OnlineInfo表,那么我们的思路就是如何能够简化查 询的操作. 学生表中包含的学生的静态信息,而上机信息表中则包含了有关学生上机的所有的信息. 流程 1.更新学生下机信息 2.触发器触发后,会自动的更新学生的消费时间,消费金额并更新学生余额 3.两张表联合查询有关界面上的所有信息 4.为所有的文本框赋值 注意:其实最有意思的就是触发器

Linux学习总结(1)——Linux命令大全完整版

Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 date2 exit3 finger4 free5 fwhois5 gitps(gnu interactive tools process status)5 groupdel(group delete)6 groupmod(group modify)6 halt7 id7 kill8 last8 la

Android照片墙完整版,的完美结合LruCache和DiskLruCache

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/34093441 在上一篇文章其中,我们学习了DiskLruCache的概念和基本使用方法.但仅仅是掌握理论知识显然是不够的,那么本篇文章我们就来继续进阶一下.看一看在实战其中应该如何合理使用DiskLruCache. 还不熟悉DiskLruCache使用方法的朋友能够先去參考我的上一篇文章 Android DiskLruCache全然解析,硬盘缓存的最佳方案 . 事实上,在真正的项

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

练习:WinForm--DataGridView增删改查完整版

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace DataGridView增删改查完整版.DataConnection { public class DataConnection { private static string connst

多人在线扑克游戏源码带服务端完整版

多人在线扑克游戏源码带服务端完整版,本项目源码是一套网络版的扑克牌项目源码,带服务器端源码,服务器端也是用java做的,打开游戏以后需要配置IP服务器端的IP和端口,服务端默认监听9999端口,客户端ip填写10.0.2.2,端口信息不用管直接点连接就可以连接到电脑上的服务端.项目源码注释比较丰富,可以研究一下里面的算法之类的.搭建这个服务端环境废了我半天劲,不知道是不是我运行的方法不对,打开前两个游戏客户端没有问题,打开第三个就开始直接强制退出.游戏没玩成所以没有截那部分的图.<ignore_

Java多线程完整版基础知识

Java多线程完整版基础知识 (翟开顺由厚到薄系列) 1.前言 线程是现代操作系统中一个很重要的概念,多线程功能很强大,java语言对线程提供了很好的支持,我们可以使用java提供的thread类很容易的创建多个线程.线程很不难,我对之前学习过的基础,在这做了一个整理,本文主要参考的是Java研究组织出版的j2se进阶和张孝祥-java就业培训教材这两本书 2.概述 2.1线程是什么 主要是线程与进程的区别,这里不再阐述,自行网上搜索 为什么使用线程:操作系统切换多个线程要比调度进程在速度上快很