实验五 虚拟内存页面置换算法
1、 实验目的
通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。 2、 试验内容 问题描述:
设计程序模拟先进先出FIFO、最佳置换OPI和最近最久未使用
LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。
3、 程序要求:
1)利用先进先出FIFO、最佳置换OPI和最近最久未使用LRU
三种页面置换算法模拟页面访问过程。
2)模拟三种算法的页面置换过程,给出每个页面访问时的内存
分配情况。
3)输入:最小物理块数m,页面个数n,页面访问序列P1, … ,Pn,
算法选择1-FIFO,2-OPI,3-LRU。 4)输出:每种算法的缺页次数和缺页率。 4、 需求分析
(1) 输入的形式和输入值的范围 算法选择 物理块数 页面个数
页面访问序列P1, … ,Pn (2) 输出的形式
每种算法的缺页次数和缺页率 (3) 测试用例
引用率701203042303212011701 777222444000777 00033322211100
1110003332221
页框引用率
70120304230321201701 77722222700004000 1133311
页框(物理块) 引用率 7012030423032120170 77722444011100000033300 1133222227
页框15、 调试分析
通过二次编程,又一次加深了对先进先出(FIFO)页面置换算法,最佳(OPI)置换算法,最近最久未使用(LRU)置换算法的理解。 同时,也掌握了一些使界面输出看起来更工整的办法。
还有,在平时做作业的时候,总是默认为物理块数是3,其实只是比较常用而已,并不是每次都是3.这个在编程中有体现,在今后做题中会更注意。 6、 测试结果
(1)先进先出FIFO页面置换算法 输入
输出
(2)最佳页面OPI置换算法 输入
输出
(3)最近最久未使用LRU置换算法 输入
输出
7、附录(java)
package experiment;
import java.io.BufferedInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.util.Scanner;
public class E_PageDisplace {
private static int MaxNumber = 100; // 页面序列P1, … ,Pn,
private static int PageOrder[] = new int[MaxNumber]; // 模拟页面置换过程
private static int Simulate[][] = new int[MaxNumber][MaxNumber];
//
private static int PageCount[] = new int[MaxNumber]; // 页面数
private static int PageNum; // 缺页数
private static int LackNum; // 缺页率
private static double LackPageRate; private static boolean found; // 物理块数量
private static int BlockNum; // NULL的int标记
private static int NULL=-1; // for循环用到变量 private static int i; private static int j; private static int k;
// 算法选择
// 1-先进先出FIFO页面置换算法 // 2-最佳页面OPI置换算法
// 3-最近最久未使用LRU置换算法 private static int option = 0;
private static Scanner stdin;
public static void main(String[] args) throws FileNotFoundException { // 输入数据 input();
// 算法选择
//算法选择\\n FIFO: 输入'1'\\n OPI: 输入'2'\\n LRU: 输入'3'\\n exit: 输入'4'\\n\
switch(option){ case 1:
System.out.println(\先进先出FIFO页面置换算法:\ FIFO(); output(); break; case 2:
System.out.println(\最佳页面OPI置换算法:\ OPI(); output(); break;