Traducción de direcciones y procesamiento de interrupciones de fallas de página en la gestión de búsqueda de solicitudes simulada [Código fuente completo con comentarios] - Algoritmo del sistema operativo de la computadora

Desplácese hacia abajo en el código fuente
. El algoritmo de la clase experimental, los detalles no se han tratado, el núcleo se ha resuelto, puede usarlo como referencia

Ejecutar captura de pantalla

Inserte la descripción de la imagen aquí

Título del experimento

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Código fuente

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;
    }
}

Que tu corazón sea como flores y árboles

Supongo que te gusta

Origin blog.csdn.net/nbcsdn/article/details/103027158
Recomendado
Clasificación