[计算机操作系统] 页面置换算法的实现

本文介绍了计算机操作系统中页面置换算法的实现,包括OPT、FIFO、LRU和NRU。虽然实现简单,但提供了详细的代码注释,并展示了部分实验结果。
摘要由CSDN通过智能技术生成

前言

本文只是实现了 O P T ( 最 佳 适 应 算 法 ) , F I F O ( 先 进 先 出 ) , L R U ( 最 久 未 使 用 ) , N R U ( 简 单 C l o c k ) OPT(最佳适应算法),FIFO(先进先出),LRU(最久未使用),NRU(简单Clock) OPT(),FIFO(),LRU(使),NRU(Clock)

因为算法实现过于简单,这里不详细说明实现步骤,但是有详细的代码注释

以下附部分实验结果图

在这里插入图片描述

Code :

import jdk.swing.interop.SwingInterOpUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
//7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
/**
 * FIFO
 *         Length =  8;
 *         PageFlow = new int[Length];
 *
 *         PageFlow[0] = 7;
 *         PageFlow[1] = 0;
 *         PageFlow[2] = 1;
 *         PageFlow[3] = 2;
 *         PageFlow[4] = 0;
 *         PageFlow[5] = 3;
 *         PageFlow[6] = 0;
 *         PageFlow[7] = 4;
 *         测试数据
 */
public class Algorithm {
   
    Scanner scanner = new Scanner(System.in);
    private int Csize;//物理块大小
    private int Length;//流向长度
    private int PageFlow[];//流向数组
    Map<Integer,Boolean> mp;//标记是否在块中
    private int PageLose;//缺页次数
    private int Output[][];//控制输出
    private int idx;//控制输出的下标
    private boolean LoseOrNot[];//用于控制输出 √
    public Algorithm(){
   
        System.out.println("请输入物理块大小");
        Csize = scanner.nextInt();

        System.out.println("请输入页面数量 :");
        Length = scanner.nextInt();
        PageFlow = new int[Length];
        Output = new int[Length][Csize+1];
        LoseOrNot = new boolean[Length];
        idx = 0 ;
        System.out.println("随机生成访问流");
//        for(int i = 0 ;i<Length;i++){
   
//            PageFlow[i] = scanner.nextInt();
//        }//方便调试
        GetRandomDate();
        for(int i = 0 ;i<Length ; i ++ ){
   
            System.out.print(PageFlow[i]+" ");
        }
        System.out.println();
    }

    //早 晚
    public void FIFO() {
   
        PageLose = 0;

        mp = new HashMap<>();//每次都清空一下 标记map
        int temp[] = new int[1024];//用来记录在块中的数组
        int hh = 1, tt = 0;//队头队尾指针

        for (int i = 0; i < Length; i++) {
   
            mp.put((Integer) PageFlow[i], false);//初始化标记数组
        }

        System.out.println("久----------->刚");
        System.out.println("0表示未出现在块中");
        //开始执行访问流
        for (int i = 0; i < Length; i++) {
   
            if ((tt - hh) + 1 == Csize && mp.get(PageFlow[i]) == false) {
   //已经存满了 并且不在当前块中
                //弹出队头
                mp.put((Integer) temp[hh
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值