LRU和FIFO
来源:互联网 发布:mac英英词典 编辑:程序博客网 时间:2024/06/06 02:01
问题描述
给定参数p和n,p表示空间大小,n表示要加载到p个空间中的总的页面数,且p<n成立,求在FIFO和LRU的策略下,比较切换页面的次数,如果LRU切换次数少,则输出yes,反之输出no。之前使用链表存储,花了很多时间,跳出一种问题的坑,又陷入另一种问题,之后采用了数组存储。对于FIFO来说,设置一个变量temp,每次新存入一个数时,temp加一,并把这个数字赋值给存在p存储空间的单元,如果页面相同,那么数字不用加。因为初始值为-1,在空间需要覆盖时,count加一。num值越小说明它进来的越早。而对于LRU,不同点在于,新读入的数据和存储空间中的相同时,temp也需要加,并给空间的num赋予新值,表示它是最近用过的。
程序时间复杂度高,有时间再想想其他的实现。
代码
#include<iostream>using namespace std;struct Node{ int data; int num;};int fifo(int p, int n, Node *arrp, int *arrn){ int flag = 0; int count = 0; int temp = 0; for(int i = 0; i < n; i++) { flag = 0; int j = 0; for(j = 0; j < p; j++) { if(arrp[j].data == arrn[i]) { flag = 1; break; } } if(flag == 0 && j == p) { int minnum = arrp[0].num; int mark = 0; for(int k = 0; k < p; k++) { if(arrp[k].num < minnum) { minnum = arrp[k].num; mark = k; } } temp++; if(arrp[mark].data != -1) count++; arrp[mark].data = arrn[i]; arrp[mark].num = temp; } } return count;}int lru(int p, int n, Node *arrp, int *arrn){ int flag = 0; int count = 0; int temp = 0; for(int i = 0; i < n; i++) { flag = 0; int j = 0; for(j = 0; j < p; j++) { if(arrp[j].data == arrn[i]) { flag = 1; temp++; arrp[j].num = temp; break; } } if(flag == 0 && j == p) { int minnum = arrp[0].num; int mark = 0; for(int k = 0; k < p; k++) { if(arrp[k].num < minnum) { minnum = arrp[k].num; mark = k; } } temp++; if(arrp[mark].data != -1) count++; arrp[mark].data = arrn[i]; arrp[mark].num = temp; } } return count;}int main(){ int p = 0, n = 0, temp1, temp2; cin>>p>>n; int *arrn = (int*)malloc(sizeof(int)*n); Node *arrp = (Node*)malloc(sizeof(struct Node)*p); for(int i = 0; i < n; i++) cin>>arrn[i]; for(int j = 0; j < p; j++) { arrp[j].data = -1; arrp[j].num = 0; } temp1 = fifo(p,n,arrp,arrn); for(int k = 0; k < p; k++) { arrp[k].data = -1; arrp[k].num = 0; } temp2 = lru(p,n,arrp, arrn); if(temp1 > temp2) cout<<"yes"<<" "<<temp1<<" "<<temp2; else cout<<"no"<<" "<<temp1<<" "<<temp2;}
阅读全文
0 0
- FIFO和LRU算法
- LRU和FIFO
- LRU和FIFO
- 操作系统之FIFO和LRU
- FIFO & LRU
- FIFO和LRU计算缺页中断
- FIFO、LRU、LFU的含义和原理
- LRU 和 FIFO 页面置换算法
- FIFO、LRU、LFU的含义和原理
- FIFO、LRU、LFU的含义和原理
- LRU 和 FIFO 页面置换算法
- 关于FIFO和LRU页面置换算法的实现
- LRU和FIFO算法的页面调度举…
- 页面置换算法 FIFO和LRU 及各自的命中率
- java实现FIFO和LRU页面置换算法
- FIFO、LRU、Random
- 用LinkedHashMap实现FIFO、LRU
- opt,fifo,lru算法实验
- Okhttp的缓存优化
- 利用递归打印出文件夹以及所有子文件夹的内容
- 1007. Maximum Subsequence Sum (25)
- Workflow-Mapreduce Action
- hackerrank The Coin Change Problem(dp)
- LRU和FIFO
- keepalived 错误 received a 0 auth expecting 1
- csdn如何转载别人的文章
- Protocol Buffer技术详解(Java实例)
- 使用httpclient必须知道的参数设置及代码写法、存在的风险
- 函数的栈帧过程
- 3.1 报文流
- installing R packages
- 如何关闭notification的震动