实验目的和要求
(1) 加深对页面置换的概念和算法的理解
(2) 深入了解FIFO、LRU页面置换算法
实验内容
在集成开发环境下使用C++语言设计并实现FIFO、LRU页面置换算法,并进行相应的测试。
实验原理
(1) 分别实现FIFO、LRU页面置换算法;
(2) 页面序列从指定的文本文件data.txt中取出;
(3) 输出:第一行为每次淘汰的页面号,第二行显示缺页的总次数。
系统实现
(1) 定义一个PageRep类,包含属性:页号、缺页次数,内存页面队列,指向队列的收尾指针,记录每个页项有多久未被访问的数组
class PageRep {
private:
int pagNum; //页号
int sum = 0; //缺页次数
int buff[N]; //内存页面队列
int front, tail; //队列指针
int buff_flag[N]; //记录每个页项有多久未被访问
public:
PageRep(){//初始化构造函数
for (int i = 0; i != N; ++i) {
buff[i] = -1;
buff_flag[i] = 0;
}
front = tail = 0;
}
bool FIFO(ifstream&);//FIFO算法
int add();//给buff_flag数组每个页项加1,返回页项最大数的下标
bool LRU(ifstream& ); //LRU算法
};
(2) 具体过程可包括:创建输入流对象,并打开文件,由用户选择算法,模拟模拟算法调度过程
(3) main函数流程
main
int main() {
int n;
do {
ifstream input;
input.open("data.txt");
PageRep pagereq;
cout << "选FIFO算法按1,LRU算法按2,退出按3" << endl;
cin >> n;
switch (n) {
case 1:
pagereq.FIFO(input); break;
case 2:
pagereq.LRU(input); break;
}
if (n == 3)
break;
} while (true);
return 0;
date.txt
1 13 13 1 2 5 9 4 6 2 3 5 4 4 2 2 2 3 5 4 11 6 8 9 5 2 33 6 5 1 2 3 21 3 5 15 41 54 51 451 5 41 51 51 5 151 516 641 65 61
结果展示
总结:
FIFO、LRU每种算法都有各自的优缺点, FIFO算法与进程实际运行的规律不相适用,LRU算法这是根据页面调入内存后的使用情
此次试验是用c++做的,这次课程设计我最大的收获是学以致用,通过查阅资料,复习之前遗忘的知识点,学习新的知识。通过这次试验让我们对操作系统的页面置换算法有了更深入的了解
代码
PageRep.h
#pragma once
#include <iostream>
#include <fstream>
const int N = 10;
using std::cout;
using std::endl;
using std::ifstream;
class PageRep {
private:
int pagNum; //页号
int sum = 0; //缺页次数
int buff[N]; //内存页面队列
int front, tail; //队列指针
int buff_flag[N]; //记录每个页项有多久未被访问
public:
PageRep() {
for (int i = 0; i != N; ++i