Address conversion and page fault interrupt processing in simulated request paging management [Complete source code with comments]--Computer operating system algorithm

Scroll down the source code
. The algorithm of the experimental class, the details are not dealt with, the core stuff has been worked out, you can use it for reference

Run screenshot

Insert picture description here

Experiment title

Insert picture description here
Insert picture description here

Source code

package com.company;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Page {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);

        //磁盘上有8页作业,初始化
        List<Work> list = new ArrayList<Work>();
        list.add(new Work(1, 0, 0, 0, 1024*1));
        list.add(new Work(2, 0, 0, 0, 1024*2));
        list.add(new Work(3, 0, 0, 0, 1024*3));
        list.add(new Work(2, 0, 0, 0, 1024*2));
        list.add(new Work(4, 0, 0, 0, 1024*4));
        list.add(new Work(2, 0, 0, 0, 1024*2));
        list.add(new Work(1, 0, 0, 0, 1024*1));
        list.add(new Work(4, 0, 0, 0, 1024*4));

        System.out.println("作业开始前状态:\n" + list.toString().toString());
        System.out.println("-------------------------------");

        //主存大小为3
        int sizeInter = 3;
        //主存作业
        ArrayList<Work> listInter = new ArrayList<Work>();

        //读入该内存首逻辑地址
        System.out.println("请输入逻辑首地址");
        int firstInter = scanner.nextInt();
        if (0 == firstInter) {
    
    
            System.out.println("不能为0,退出。");
        } else {
    
    
            //给内存装入作业
            //先把内存装满,默认前三个作业不重复
            for (int i = 0; i < sizeInter; i++) {
    
    
                listInter.add(list.get(i));
                //已在内存,标记设置
                listInter.get(listInter.size() - 1).setExistFlag(1);
                //分配主存块号
                listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size());
                System.out.print("第" + (i+1) + "行\t内存状态:");
                for (int j = 0; j < listInter.size(); j++) {
    
    
                    System.out.print(listInter.get(j).getPageId() + "\t");
                }
                System.out.println();
            }
            //先进先出
            for (int i = sizeInter; i < list.size()-1; i++) {
    
    
                int j = 0;
                for (; j < listInter.size(); j++) {
    
    
                    //如果内存中已经有该作业,则直接输出并进行下一个作业
                    if (listInter.get(j).getPageId() == list.get(i).getPageId()) {
    
    
                        System.out.println("第" + (i+1) + "行\t内存状态:" + listInter.get(0).getPageId() + "\t" + listInter.get(1).getPageId() + "\t" + listInter.get(2).getPageId());
                        break;
                    }
                }
                if (j == 3) {
    
    
                    //移除页后面的页往前走,内存块页号也要走
                    listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size()-1);
                    listInter.get(listInter.size() - 2).setInterId(firstInter+listInter.size()-2);
                    listInter.get(0).setInterId(0);
                    listInter.get(0).setExistFlag(0);
                    listInter.remove(0);

                    listInter.add(list.get(i));
                    //已在内存,标记设置
                    listInter.get(listInter.size() - 1).setExistFlag(1);
                    //分配主存块号
                    listInter.get(listInter.size() - 1).setInterId(firstInter+listInter.size());

                    System.out.println("第" + (i+1) + "行\t内存状态:" + listInter.get(0).getPageId() + "\t" + listInter.get(1).getPageId() + "\t" + listInter.get(2).getPageId());
                }
            }
        }
        System.out.println("--------------------------------");
        System.out.println("作业结束,当前状态:\n" + list.toString().toString());
    }
}

class Work{
    
    
    private int pageId;
    private int existFlag;
    private int interId;
    private int modifierFlag;
    private int hark;


    @Override
    public String toString() {
    
    
        return "Work{" +
                "pageId=" + pageId +
                ", existFlag=" + existFlag +
                ", interId=" + interId +
                ", modifierFlag=" + modifierFlag +
                ", hark=" + hark +
                '}' + "\n";
    }

    public Work(int pageId, int existFlag, int interId, int modifierFlag, int hark) {
    
    
        this.pageId = pageId;
        this.existFlag = existFlag;
        this.interId = interId;
        this.modifierFlag = modifierFlag;
        this.hark = hark;
    }

    public int getPageId() {
    
    
        return pageId;
    }

    public void setPageId(int pageId) {
    
    
        this.pageId = pageId;
    }

    public int getExistFlag() {
    
    
        return existFlag;
    }

    public void setExistFlag(int existFlag) {
    
    
        this.existFlag = existFlag;
    }

    public int getInterId() {
    
    
        return interId;
    }

    public void setInterId(int interId) {
    
    
        this.interId = interId;
    }

    public int getModifierFlag() {
    
    
        return modifierFlag;
    }

    public void setModifierFlag(int modifierFlag) {
    
    
        this.modifierFlag = modifierFlag;
    }

    public int getHark() {
    
    
        return hark;
    }

    public void setHark(int hark) {
    
    
        this.hark = hark;
    }
}

May your heart be like flowers and trees

Guess you like

Origin blog.csdn.net/nbcsdn/article/details/103027158