页面置换算法模拟(实验报告)

实验目的和要求

(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
一、实验题目:页面置换算法(请求分页) 二、实验目的: 进一步理解父子进程之间的关系。 1) 理解内存页面调度的机理。 2) 掌握页面置换算法实现方法。 3) 通过实验比较不同调度算法的优劣。 4) 培养综合运用所学知识的能力。 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。 三、实验内容及要求 这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序。 程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series[]中,作为内存页面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。要求: 1) 每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。 设缺页的次数为diseffect。总的页面访问次数为total_instruction。 缺页率 = disaffect/total_instruction 命中率 = 1- disaffect/total_instruction 2)将为进程分配的内存页面数mframe 作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值