内存页替换算法C++
来源:互联网 发布:python turtle 坐标 编辑:程序博客网 时间:2024/06/16 06:01
自己写了两个内存页替换算法,一个FIFO,一个LRU,贴在博客上,记录一下。
MemPage.h
#include<vector>using namespace std;class MemPageList {private:int* name;//内存也编号vector<int> que;//进入先后内存页队列int maxSize;//最大储存大小public:MemPageList(int n) { name = new int[n];maxSize = n;}void printName() { for (int i = 0; i <maxSize; i++)cout << name[i] << " "; }int FIFO(int pages[],int n);int LRU(int pages[],int n);};int MemPageList::FIFO(int pages[],int n) {int count = 0;//用于记录错误次数for (int i = 0; i < n; i++) {bool k = 0;//用于判断该页是否存在于页表中for (int j = 0; j < que.size(); j++) {if (pages[i] == name[j])k = 1;}/*内存页存在页表中,则加载下一页*/if (k)continue;/*内存页不在页表中*//*页表未满*/if (que.size() < maxSize) {name[que.size()] = pages[i];//载入页que.push_back(pages[i]);count++;}/*页表已满*/else {/*将页表中的页替换成新的页*/for (int j = 0; j < que.size(); j++) {if (que[0] == name[j]) {name[j] = pages[i];break;}}que.erase(que.begin());//删除队列中被替换的页que.push_back(pages[i]);//将新的页号加入队列count++;}}return count;}int MemPageList::LRU(int pages[], int n) {int count = 0;for (int i = 0; i < n; i++) {bool k = 0;//用于判断该页是否存在于页表中for (int j = 0; j < que.size(); j++) {/*该页已存在列表中*/if (pages[i] == que[j]) {que.erase(que.begin() + j);//更新列表中页的使用序列que.push_back(pages[i]);k = 1;}}/*内存页存在页表中,载入下一页*/if (k)continue;/*内存页不在页表中*//*页表未满*/if (que.size() < maxSize) {name[que.size()] = pages[i];//载入页que.push_back(pages[i]);count++;}/*页表已满*/else {for (int j = 0; j < que.size(); j++) {if (que[0] == name[j]) {name[j] = pages[i];break;}}que.erase(que.begin());que.push_back(pages[i]);count++;}}return count;}
Main.cpp
#include<iostream>#include"MemPage.h"#include<random>#include<ctime>#include<vector>using namespace std;/*随机生成内存页序列*/int* random(int n,int num) {//n为生成的最大内存页号,num为内存页数int* randnum;randnum = new int[num];srand((unsigned)time(NULL));for (int i = 0; i < num; i++)randnum[i] = rand() % n;return randnum;}void main() {MemPageList a(4);MemPageList c(4);int* b;int max = 8, num = 20;//max为生成的最大内存页号,num为内存页数b = random(max,num);/*输出数组b*/for (int i = 0; i < num; i++)cout << b[i]<<" ";cout << endl;/*执行FIFO算法*/cout<<"FIFO的错误次数为"<<a.FIFO(b,num);cout << endl<<"最后的内存页表为";a.printName();cout << endl;/*执行LRU算法*/cout <<"LRU的错误次数为"<< c.LRU(b, num);cout << endl<<"最后的内存页表为";c.printName();}
0 0
- 内存页替换算法C++
- C实例---关键词查找、替换算法
- 替换算法
- 算法学习记录二(C++)--->字符串空格替换
- STL算法 -------- 替换算法
- 排序算法+内存分配图(C#)
- Ubuntu 内存替换swap
- 内存替换redis hll
- 页面替换算法
- 页面替换算法
- 页面替换算法
- 一个字符串替换算法
- LIRS缓存替换算法
- 替换空格算法
- LIRS缓存替换算法
- 页面替换算法
- 页面替换算法
- cache替换算法总结
- linux_2-LDAP网络用户账户
- Spring Boot搭建spring+springMVC+Mybatis简单Demo
- 如何优雅的“编写”api接口文档
- PAT-A-1024. Palindromic Number (25)
- Problem C: 时间类的输入
- 内存页替换算法C++
- LeetCode121. Best Time to Buy and Sell Stock题解
- Problem D: 时间类的拷贝和整体读写
- System的identityHashCode()
- 【qscoj】哗啦啦村的刁难(5)(找规律)
- 攒人品|暴风影音新出炉的面经
- android开发常用的colors颜色
- Problem E: 时间类的错误数据处理
- 【小问】Windows服务一直“正在启动”怎么杀