(1)设计并实现一个FIFO页面置换的程序。编写程序实现并进行测试 (2)设计并实现一个LRU页面置换的程序。编写程序实现并进行测试 3.实验原理与提示 输入:page.txt,该文件为页面序列 输出: 第1行显示FIFO算法每次淘汰的页面号 第2行显示缺页中断率 第3行显示LRU算法每次淘汰的页面号 第4行显示缺页中断率
时间: 2024-03-05 09:50:14 浏览: 76
好的,下面是FIFO页面置换算法和LRU页面置换算法的实现和测试,基于C++语言。
1. FIFO页面置换算法实现和测试:
```c++
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
int main(){
int n, page, count = 0, miss = 0;
vector<int> list;
queue<int> q;
ifstream in("page.txt");
in >> n;
while(in >> page){
if(list.size() < n){
if(find(list.begin(), list.end(), page) == list.end()){
list.push_back(page);
q.push(page);
miss++;
}
}
else{
if(find(list.begin(), list.end(), page) == list.end()){
int v = q.front();
q.pop();
list.erase(find(list.begin(), list.end(), v));
list.push_back(page);
q.push(page);
miss++;
}
}
count++;
}
cout << "FIFO算法每次淘汰的页面号:";
while(!q.empty()){
cout << q.front() << " ";
q.pop();
}
cout << endl;
cout << "FIFO算法缺页中断率为:" << (miss * 1.0 / count) << endl;
return 0;
}
```
这段代码实现了FIFO页面置换算法,并从名为page.txt的文本文件中读取页面序列。先判断内存中是否存在当前页面,如果不存在,则将其加入内存中,并将其插入到队列中,同时计算缺页中断次数。当内存中的页面数已达到最大内存容量时,如果当前页面不在内存中,则将队列的头部元素出队,同时将其从内存中删除,再将当前页面插入内存中,并将其加入队列中。
2. LRU页面置换算法实现和测试:
```c++
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int n, page, count = 0, miss = 0;
vector<int> list;
map<int, int> m;
ifstream in("page.txt");
in >> n;
while(in >> page){
if(list.size() < n){
if(find(list.begin(), list.end(), page) == list.end()){
list.push_back(page);
m[page] = count;
miss++;
}
else{
m[page] = count;
}
}
else{
if(find(list.begin(), list.end(), page) == list.end()){
int min = 999999999, index = -1;
for(int i = 0; i < list.size(); i++){
if(m[list[i]] < min){
min = m[list[i]];
index = i;
}
}
list[index] = page;
m[page] = count;
miss++;
}
else{
m[page] = count;
}
}
count++;
}
cout << "LRU算法每次淘汰的页面号:";
for(int i = 0; i < list.size(); i++){
cout << list[i] << " ";
}
cout << endl;
cout << "LRU算法缺页中断率为:" << (miss * 1.0 / count) << endl;
return 0;
}
```
这段代码实现了LRU页面置换算法,并从名为page.txt的文本文件中读取页面序列。首先判断内存中是否存在当前页面,如果不存在,则将其加入内存中,并将其插入到map中,同时计算缺页中断次数。当内存中的页面数已达到最大内存容量时,如果当前页面不在内存中,则遍历内存中的所有页面,找出最近未使用的页面,并将其替换为当前页面,同时更新map中的值。如果当前页面已经在内存中,则更新map中的值。
阅读全文