用c++实现FCFS和LRU页面置换算法
时间: 2023-08-24 08:14:56 浏览: 128
先来先服务FCFS和短作业优先SJF进程调度算法 银行家算法 虚拟内存页面置换算法 磁盘调度算法
FCFS页面置换算法实现:
```cpp
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n, m; //n为内存块数量,m为页面数量
cout << "请输入内存块数量和页面数量: ";
cin >> n >> m;
vector<int> frames(n, -1); //初始化内存块,-1表示空闲
vector<int> pages(m);
cout << "请输入页面序列: ";
for(int i = 0; i < m; i++)
{
cin >> pages[i];
}
int page_fault = 0; //缺页次数
for(int i = 0; i < m; i++)
{
bool flag = false; //记录是否命中
for(int j = 0; j < n; j++)
{
if(frames[j] == pages[i]) //命中
{
flag = true;
break;
}
}
if(!flag) //未命中
{
page_fault++;
for(int j = 0; j < n; j++)
{
if(frames[j] == -1) //有空闲内存块
{
frames[j] = pages[i];
flag = true;
break;
}
}
if(!flag) //没有空闲内存块,进行页面置换(FCFS)
{
frames[0] = pages[i];
}
}
cout << "第" << i+1 << "次: ";
for(int j = 0; j < n; j++)
{
cout << frames[j] << " ";
}
cout << endl;
}
cout << "缺页次数为: " << page_fault << endl;
return 0;
}
```
LRU页面置换算法实现:
```cpp
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n, m; //n为内存块数量,m为页面数量
cout << "请输入内存块数量和页面数量: ";
cin >> n >> m;
vector<int> frames(n, -1); //初始化内存块,-1表示空闲
vector<int> pages(m);
cout << "请输入页面序列: ";
for(int i = 0; i < m; i++)
{
cin >> pages[i];
}
int page_fault = 0; //缺页次数
vector<int> used_time(n, 0); //记录每个内存块最近使用时间
for(int i = 0; i < m; i++)
{
bool flag = false; //记录是否命中
int index = -1; //记录要置换的内存块下标
for(int j = 0; j < n; j++)
{
if(frames[j] == pages[i]) //命中
{
flag = true;
used_time[j] = i + 1;
break;
}
}
if(!flag) //未命中
{
page_fault++;
int min_time = used_time[0];
index = 0;
for(int j = 1; j < n; j++) //找到最近未使用的内存块
{
if(used_time[j] < min_time)
{
min_time = used_time[j];
index = j;
}
}
frames[index] = pages[i];
used_time[index] = i + 1;
}
cout << "第" << i+1 << "次: ";
for(int j = 0; j < n; j++)
{
cout << frames[j] << " ";
}
cout << endl;
}
cout << "缺页次数为: " << page_fault << endl;
return 0;
}
```
阅读全文