zoukankan      html  css  js  c++  java
  • 请求分页内存管理的模拟

    一、实验题目

    完整代码地址: https://github.com/SheepHuan/homework/tree/master/java/java%E5%AE%9E%E8%B7%B5%E8%AF%BE/%E4%B9%B1%E4%B8%83%E5%85%AB%E7%B3%9F/src/OS

    幻灯片1.JPG

    幻灯片2.JPG

    幻灯片3.JPG

    幻灯片4.JPG

    幻灯片8.JPG

    幻灯片5.JPG

    幻灯片7.JPG

    幻灯片6.JPG

    二、代码

    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 
    ",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 
    ", 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);
    		}
    	}
    }
    
    
  • 相关阅读:
    iOS常用的终端指令
    instancesRespondToSelector与respondsToSelector的区别
    Struts2(一)快速入门
    pl/sql快速输入select * from等语句快捷键设置
    win10系统安装oracle11g时遇到INS-13001环境不满足最低要求
    JSP四大作用域
    J2EE开发模式
    JAVA四大域对象总结
    Apache与Tomcat有什么关系和区别
    Junit测试框架
  • 原文地址:https://www.cnblogs.com/JustNo/p/11973542.html
Copyright © 2011-2022 走看看