首页 > 其他 > 详细

请求分页内存管理的模拟

时间:2019-12-03 01:00:56      阅读:158      评论:0      收藏:0      [点我收藏+]

一、实验题目

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

二、代码

技术分享图片

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

请求分页内存管理的模拟

原文:https://www.cnblogs.com/JustNo/p/11973542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!