计算三种缺页中断的缺页数,缺页率和命中率FIFO,LRU,OPT
来源:互联网 发布:ssh使用的端口号是 编辑:程序博客网 时间:2024/05/17 10:09
/* 计算三种缺页中断的缺页数,缺页率和命中率 FIFO,LRU,OPT*/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<time.h>#include<string.h>/*** 默认页表大小为3*/#define PAGETABLELENGTH 3//输出函数,四个参数,缺页数,缺页率和命中率,算法名称//无返回值void output( int pageFault, double pageFaultRate, double hitProbability , char *name){printf("\n=====================\n%s:\n",name); printf("缺页数是: %d\n",pageFault); printf("缺页率是: %2.2lf%\n",pageFaultRate*100); printf("命中率是: %2.2lf%\n",hitProbability*100);}//判断是否命中 int pageHited(int *arr,int begin, int length, int equNum){for(int i=begin;i<length;++i){if(arr[i]==equNum)return i;}return -1;}void arrayInit( int *arr, int length){for(int i=0;i<length;++i)arr[i] = 0;}//FIFO//参数是一个指针以及数组长度//无返回参数//输出,缺页数,缺页率和命中率void fifo( const int *const arr, int length){int pageTable[PAGETABLELENGTH];int hitCount = 0;int firstIn = 0;int pageCount = 0;arrayInit(pageTable, PAGETABLELENGTH);for(int i=0; i< length; ++i){//判断是否命中int hit = pageHited( pageTable, 0, pageCount, arr[i]);if(hit!=-1){++hitCount;}else{//page已经填满 if(pageCount== PAGETABLELENGTH) {pageTable[firstIn] = arr[i];firstIn = (++firstIn)%PAGETABLELENGTH; } //pagetable未填满else{ pageTable[pageCount] = arr[i]; pageCount++;}}}output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length, "FIFO" );} //LRU//参数是一个指针以及数组长度//无返回参数//输出,缺页数,缺页率和命中率void lru( const int *const arr, int length){int hitCount = 0;int pageTable[PAGETABLELENGTH];//记录page元素里最近使用的位置int pageLastUsed[PAGETABLELENGTH];int pageCount = 0;arrayInit(pageTable, PAGETABLELENGTH);arrayInit(pageLastUsed, PAGETABLELENGTH);for(int i=0;i<length;++i){int hit = pageHited(pageTable,0,pageCount,arr[i]);if(hit!=-1){++hitCount;pageLastUsed[hit] = i;}else{ if(pageCount==PAGETABLELENGTH){int min = 0;for(int plu = 1; plu<PAGETABLELENGTH; ++plu){min = pageLastUsed[min] < pageLastUsed[plu]?min:plu;}pageTable[min] = arr[i];}else{pageTable[pageCount] = arr[i];pageLastUsed[pageCount++] = i;}}}output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length ,"LRU");}//OPT//参数是一个指针以及数组长度//无返回参数//输出,缺页数,缺页率和命中率void opt( int *arr, int length){int hitCount = 0;int pageTable[PAGETABLELENGTH];int pageFuture[PAGETABLELENGTH];int pageCount = 0;arrayInit(pageTable,PAGETABLELENGTH);arrayInit(pageFuture,PAGETABLELENGTH);for(int i=0; i<length; ++i){int hit = pageHited(pageTable, 0, pageCount, arr[i]);if(hit!=-1){++hitCount;}else{//table 满 ,计算在最近的将来谁不会被用到 if(pageCount == PAGETABLELENGTH) { for(int pi=0; pi<pageCount; ++pi){int find = pageHited(arr,i+1,length,pageTable[pi]);if(find!=-1){pageFuture[pi] = find;} else{ pageFuture[pi] = length+1;}} int max = 0; for(int pii=1; pii<pageCount; ++pii){ max = pageFuture[max] > pageFuture[pii]? max:pii;} pageTable[max] = arr[i]; } //table未满 else { pageTable[pageCount++] = arr[i]; }}}output(length-hitCount,(length-hitCount)/(double)length, (double)hitCount/length,"OPT");}//参数是一个int型指针,数组长度//随机生成一个长度为11-20的数组,代表着页的执行顺序,//数字大小为1-9,随机生成,返回数组head指针int* productRandomArray( int *length){//随机数种子srand(int(time(0)));*length = rand()%10+11;//数组长度int *head = (int *)malloc(sizeof(int)*(*length)); if(head ==NULL){printf("malloc error!\n");return NULL;}//数组赋值for(int i=0;i<(*length);++i){head[i] = rand()%9+1;}return head;}int main(){int length;int *head;head = productRandomArray(&length);if(head == NULL)return -1;printf("=====================Table 大小设置为 3 ==========================\n");printf("====== 实验发现在大多数情况下FIFO 和 LRU 的命中率是一样的 ========\n");printf("======================实验数据是随机生成的========================\n");for(int i=0;i<length;i++)printf("%d ",head[i]);//fifofifo(head,length);//lrulru(head, length);//optopt(head, length);getchar();getchar();return 0;}
0 0
- 计算三种缺页中断的缺页数,缺页率和命中率FIFO,LRU,OPT
- FIFO和LRU计算缺页中断
- 操作系统的页面置换C++算法:OPT FIFO LRU CLOCK 计算缺页率
- 对用LRU和FIFO算法计算“缺页中断”的理解
- 【转载】对用LRU和FIFO算法计算“缺页中断”的理解
- 页面置换算法 FIFO和LRU 及各自的命中率
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT这三种置换算法的缺页次数
- FIFO、LRU、OPT的三个简单实现
- Java父类引用指向子类对象静态绑定和动态绑定问题
- Python: How to Sort a List
- 仿微信 个人头像修改 popPopupWindow实现Menus从底部弹出
- FPGA学习步骤,我的体会
- log file parallel write&&log buffer space
- 计算三种缺页中断的缺页数,缺页率和命中率FIFO,LRU,OPT
- xcode6中自动布局autolayout和sizeclass的使用
- 一些想法
- (十一)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【上】
- Java多线程之线程池
- Android工程名更改
- Android自动测试之Monkey工具
- Ubuntu 14.04 下编译 ijkplayer Android
- python的 ipv6 自动生成