内存页替换算法C++

来源:互联网 发布:python turtle 坐标 编辑:程序博客网 时间:2024/06/16 03:28

自己写了两个内存页替换算法,一个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
原创粉丝点击