Analog request paged memory management

First, the experimental subject

Slide 1.JPG

Slide 2.JPG

Slide 3.JPG

Slide 4.JPG

Slide 8.JPG

Slide 5.JPG

Slide 7.JPG

Slide 6.JPG

Second, the code

image.png

1.Main.java

package OS;

import java.util.Scanner;

public class Main {
    public static int pageSize, blockSize,procSize;
    PCB pcb;
    Memeroy mem;
    public static void main(String[] args) {
        Main m=new Main();
        m.SysInit();//系统初始化
        m.pcb=m.NewProc();//模拟队列初始化
        m.Access(m.pcb);
    }
    void SysInit() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请求输入页大小"); // 4K 12位
        Main.pageSize = sc.nextInt();
        System.out.println("请求输入总块数");//32
        Main.blockSize = sc.nextInt();
    }
    PCB NewProc() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请求输入进程大小");//40000

        Main.procSize = sc.nextInt();
        mem=new Memeroy();//初始化内存
        //
        int cnt=(Main.procSize+Main.pageSize-1)/Main.pageSize;      
        return new PCB(cnt);
    }
    void Access(PCB pcb) {
        //模拟访问ַ
        for (int i=0;i<1000;i++){
            int logAddr=(int) (Math.random()*Main.procSize);//随机生成地址
            System.out.printf("逻辑地址:%d ",logAddr);
            System.out.printf("物理地址:%d \n",Memeroy.Relocate(pcb,logAddr));

        }
    }
}

2.Memory.java

package OS;

import java.util.Scanner;

public class Main {
    public static int pageSize, blockSize,procSize;
    PCB pcb;
    Memory mem;
    public static void main(String[] args) {
        Main m=new Main();
        m.SysInit();//系统初始化
        m.pcb=m.NewProc();//模拟队列初始化
        m.Access(m.pcb);
    }
    void SysInit() {
//      Main.pageSize = 4096;
//      Main.blockSize = 8;

        Scanner sc = new Scanner(System.in);
        System.out.println("请求输入页大小"); // 4K 12位
        Main.pageSize = sc.nextInt();
        System.out.println("请求输入总块数");//32
        Main.blockSize = sc.nextInt();
    }
    PCB NewProc() {
//      Main.procSize=40000;
        Scanner sc = new Scanner(System.in);
        System.out.println("请求输入进程大小");//40000

        Main.procSize = sc.nextInt();
        mem=new Memory();//初始化内存
        //
        int cnt=(Main.procSize+Main.pageSize-1)/Main.pageSize;      
        return new PCB(cnt);
    }
    void Access(PCB pcb) {
        //模拟访问ַ
        for (int i=0;i<1000;i++){
            int logAddr=(int) (Math.random()*Main.procSize);//随机生成地址
            System.out.printf("逻辑地址:%d ",logAddr);
            System.out.printf("物理地址:%d \n", Memory.Relocate(pcb,logAddr));

        }
    }
}

3.Page.java

package OS;
import java.util.ArrayList;

public class Page {
    int bNo,pNo,P,A;//块号,页号,中断位,访问位
}
class PCB{
    ArrayList<Page> pTable=new ArrayList<Page>();
    int limit;//页表限长
    public PCB(int len) {
        this.limit=len;
        for (int i=0;i<len;i++) {
            Page p=new Page();
            p.bNo=-1;
            p.pNo=i;
            p.P=0;//P=0表示不再内存中
            p.A=0;
            this.pTable.add(p);
        }
    }
}

Guess you like

Origin www.cnblogs.com/JustNo/p/11973542.html