赞
踩
先初始化页面大小,和物理块数。连续输入页面的逻辑地址,以“-1”作为结束标志,采用LRU页面置换算法、固定分配局部置换分配策略。输出该页面的页号和页内位移,若该页不在内存,并且还有剩余的物理块,将该页调入内存,输出“该页不在内存中,调入!”输出当前在内存的物理块号和对应的页号(若当前物理块为空,则输出void);若该页不在内存,并且没有剩余的物理块,按照FIFO算法选择一页调出后将该页调入内存,输出“已无空闲物理块,置换!”并输出当前在内存的物理块号和对应的页号(若当前物理块为空,则输出void)。
输入页面大小和物理块数,连续输入页面的逻辑地址,以“-1”作为结束标志。
第一行输出页号和页内偏移,第二行若不在内存,按照要求输出提示,若在内存则什么都不输出,随后输出“物理块号 页号”,再连续输出每个逻辑地址页面的物理块号和页内位移,以及当前内存的物理块号和页号的对应关系。请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
在这里给出一组输入。例如:
1024 3
1
-1
在这里给出相应的输出。例如:
页号:0 页内偏移:1
该页不在内存中,调入!
物理块号 页号
0 0
1 void
2 void
在这里给出一组输入。例如:
1024 3
1
1056
2096
3175
-1
在这里给出相应的输出。例如:
页号:0 页内偏移:1 该页不在内存中,调入! 物理块号 页号 0 0 1 void 2 void 页号:1 页内偏移:32 该页不在内存中,调入! 物理块号 页号 0 0 1 1 2 void 页号:2 页内偏移:48 该页不在内存中,调入! 物理块号 页号 0 0 1 1 2 2 页号:3 页内偏移:103 已无空闲物理块,置换! 物理块号 页号 0 3 1 1 2 2
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List<Page> pages = new ArrayList<>(); List<Integer> pageAddr = new ArrayList<>(); int pageSize,blockNumber,pageAddress,i=0,j; pageSize = sc.nextInt(); blockNumber = sc.nextInt(); pageAddress = sc.nextInt(); for (j = 0;j<blockNumber;j++){ pages.add(new Page(i,-1,i)); i++; } while (pageAddress != -1){ pageAddr.add(pageAddress); pageAddress = sc.nextInt(); } for (Integer integer : pageAddr) { int min = getMin(pages,integer,pageSize); System.out.println("页号:"+integer / pageSize+" 页内偏移:"+integer % pageSize); if (min != -3) { if (pages.get(min).pageNumber == -1) { System.out.println("该页不在内存中,调入!"); }else { System.out.println("已无空闲物理块,置换!"); } pages.get(min).flag = i; i++; pages.get(min).pageNumber = integer / pageSize; } else if (min == -3){ for (Page page : pages) { if (page.pageNumber == integer / pageSize){ page.flag = i; i++; break; } } } printf(pages); } } static class Page{ private int blockNumber; private int pageNumber; private int flag; public Page(int blockNumber, int pageNumber, int flag) { this.blockNumber = blockNumber; this.pageNumber = pageNumber; this.flag = flag; } public int getBlockNumber() { return blockNumber; } public void setBlockNumber(int blockNumber) { this.blockNumber = blockNumber; } public int getPageNumber() { return pageNumber; } public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; } public int getFlag() { return flag; } public void setFlag(int flag) { this.flag = flag; } } public static int getMin(List<Page> pages,int integer,int pageSize){ int tmp = 1000,tmp01 = -1; for (int i = 0; i < pages.size(); i++) { if (pages.get(i).flag < tmp){ tmp = pages.get(i).flag; tmp01 = i; } if (pages.get(i).pageNumber == integer / pageSize) { tmp01 = -3; break; } } return tmp01; } public static void printf(List<Page> pages){ System.out.println("物理块号 页号"); for (int i = 0; i < pages.size(); i++) { System.out.print(i+" "); if (pages.get(i).pageNumber == -1) System.out.println("void"); else System.out.println(pages.get(i).pageNumber); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。