用FIFO算法设计一个页面替换的虚拟存储管理的C++程序,编程模拟实现页面淘汰和替换过程,并输出页 面分配状态和缺页中断率,要求可用页框数和访问的页面序列长度可修改,并比较不同页框数对缺页中断率的 影响
时间: 2023-11-27 15:50:09 浏览: 92
以下是基于FIFO算法的页面替换的虚拟存储管理的C++程序,实现页面淘汰和替换过程,并输出页面分配状态和缺页中断率:
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, m;
cout << "请输入可用页框数和访问的页面序列长度:";
cin >> n >> m;
vector<int> pages(m);
cout << "请输入访问的页面序列:";
for (int i = 0; i < m; i++) {
cin >> pages[i];
}
queue<int> frames;
int page_faults = 0;
for (int i = 0; i < m; i++) {
bool page_found = false;
for (int j = 0; j < frames.size(); j++) {
if (frames.front() == pages[i]) {
page_found = true;
break;
}
frames.push(frames.front());
frames.pop();
}
if (!page_found) {
if (frames.size() < n) {
frames.push(pages[i]);
} else {
frames.pop();
frames.push(pages[i]);
}
page_faults++;
}
cout << "第" << i + 1 << "次页面置换状态:";
queue<int> copy = frames;
while (!copy.empty()) {
cout << copy.front() << " ";
copy.pop();
}
cout << endl;
}
cout << "缺页中断率为:" << (double)page_faults / m << endl;
return 0;
}
```
该程序中,我们首先输入可用页框数和访问的页面序列长度,然后输入访问的页面序列。接着,我们使用一个队列来模拟页框,使用一个整数变量来记录缺页中断次数,遍历访问的页面序列,检查该页面是否在页框中,如果在,则不进行任何操作,如果不在,则判断页框是否已满,若未满,则将该页面加入页框,否则将队首页面移出,再将该页面加入页框,同时缺页中断次数加一。在每次页面置换后,输出当前页面置换状态。最后,输出缺页中断率。
我们可以通过修改可用页框数和访问的页面序列长度来比较不同页框数对缺页中断率的影响,例如:
测试1:
输入:
可用页框数和访问的页面序列长度:3 10
访问的页面序列:1 4 2 5 1 4 2 5 6 1
输出:
第1次页面置换状态:1
第2次页面置换状态:1 4
第3次页面置换状态:1 4 2
第4次页面置换状态:5 4 2
第5次页面置换状态:5 1 2
第6次页面置换状态:5 1 4
第7次页面置换状态:5 1 2
第8次页面置换状态:6 1 2
第9次页面置换状态:6 5 2
第10次页面置换状态:6 5 1
缺页中断率为:0.4
测试2:
输入:
可用页框数和访问的页面序列长度:4 12
访问的页面序列:1 2 3 4 5 6 7 8 9 10 11 12
输出:
第1次页面置换状态:1
第2次页面置换状态:1 2
第3次页面置换状态:1 2 3
第4次页面置换状态:1 2 3 4
第5次页面置换状态:2 3 4 5
第6次页面置换状态:3 4 5 6
第7次页面置换状态:4 5 6 7
第8次页面置换状态:5 6 7 8
第9次页面置换状态:6 7 8 9
第10次页面置换状态:7 8 9 10
第11次页面置换状态:8 9 10 11
第12次页面置换状态:9 10 11 12
缺页中断率为:0
从上述测试结果可以看出,可用页框数越多,缺页中断率越低。
阅读全文