当前位置:
文档之家› 模拟操作系统的请求分页存储管理JAVA代码
模拟操作系统的请求分页存储管理JAVA代码
return this.physicsnumb; } public boolean getState(){
return this.state; } public int getVisitcount(){
return this.visitcount; } public boolean getChange(){
System.out.println("请输入一个页面的页号(0-19):"); k1=a.nextInt(); if(k1>=20||k1<0){
System.out.println("输入数据有错,将退出程序!!"); System.exit(0); }
//检测快表,快表存储当前的页表项,即当快表满时采用最近最久未被使用算法置换快表 System.out.println("进入快表检测"); if(TLB.getCurrent()>0){
this.pagenumb=pagenumb; this.physicsnumb=physicsnumb; this.state=state; this.visitcount=visitcount; this.change=change; this.CRTaddress=CRTaddress; } public void setPagenumb(int pagenumb){ this.pagenumb=pagenumb; } public void setPhysicsnumb(int physicsnumb){ this.physicsnumb=physicsnumb; } public void setState(boolean state){ this.state=state; } public void setVisitcount(int visitcount){ this.visitcount=visitcount; } public void setChange(boolean change){ this.change=change;
Scanner a=new Scanner(System.in); int i,number=-10,k1,k2,result; int k3=0;//当前存储的内存地址 int t;//页表中访问次数最小的索引 int b[]=new int[10];//内存中存储的数据 String ch; int slength,plength,Tlength,data;
this.printPageShell(); }else if(i==2){
TLB.printKShell(); }else if(i==3){
System.out.println("外存:"); System.out.println("外存地址\t"+"页号\t"+"数据\n"); for(int k=0;k<20;k++){
data=(int)(100*Math.random()); System.out.print(data+"\t"); s[i]=new Source(i,data); }
System.out.println("\n外存设置成功"); //请求页面 do{
//TLB.printKShell();//打印当前快表的情况 //pageshell.printPageShell();//打印当前页表的情况
t=i; }
} return t; } public int Ischange(int number){ if(this.shell[number].getChange()==true){
return 1; } else return 0; } public void printPageShell(){ System.out.println("页表:"); System.out.println("索引\t"+"页号\t"+"物理块号\t"+"状态\t"+"访问次数 \t"+"修改\t"+"外存地址\t"); for(int i=0;i<this.length;i++){
int i=0; if(this.current==0){
return -2; } else{
while(i<this.current){ if(this.shell[i].getPagenumb()==pagenumb){ return i; } i++;
} return -1; } } public void Inchange(int b[],String ch,int number){ Scanner a=new Scanner(System.in); switch(ch){ case "yes":{System.out.println("请输入一个新的数据"); b[this.shell[number].getPhysicsnumb()]=a.nextInt(); this.shell[number].setChange(true); System.out.println("修改成功!"); break; } case "no":{ break; } default:{ System.out.println("输入字符有误,将退出程序!!"); System.exit(0); } } } public int Isover(){ if(this.current>=this.length){ return 1; } else return 0; } public int MinVisitcount(){ int i,t=0; for(i=1;i<this.current;i++){ if(this.shell[i].getVisitcount()<this.shell[t].getVisitcount()){
请求分页存储管理的实现
写出方案实现代码 (1)page 类
package homework;
public class Page { private int pagenumb;//页号 private int physicsnumb;//物理块号 private boolean state;//状态位 private int visitcount;//访问字段 private boolean change;//修改位 private int CRTaddress;//外存地址
System.out.println("内存中没有此页号"); }else{
this.Inchange(b, ch,numb); } }else if(i==6){ System.out.println("结束程序"); System.exit(0); } }
public static void main(String[] args){
} } public void programFunction(){
System.out.println("****************************请求分页存储系统 ****************************");
System.out.println("功能:"); System.out.println("\t 1.查看页表"); System.out.println("\t 2.查看快表"); System.out.println("\t 3.查看外存"); System.out.println("\t 4.在内存修改数据"); System.out.println("\t 5.继续访问页面"); System.out.println("\t 6.退出程序"); } public void Dealfunction(int i,KShell TLB,Source s[],int b[]){ if(i==1){
number=TLB.searchpage(k1); if(number!=-1&&number!=-2){
result=b[TLB.shell[number].getPhysicsnumb()]; System.out.println("在快表中找到,结果为:"+result); //找出该页号在页表中的位置并修改访问字段 number=TLB.shell[number].getIndex();
return this.change; } public int getCRTaddress(){
return this.CRTaddress; } }
(2)Shell类:页表 package homework;
import java.util.Scanner;
public class Shell { Page shell[]; private int current; private int length; public Shell(){ }; public Shell(int length){ this.length=length; this.current=0; shell=new Page[length]; for(int i=0;i<length;i++){ this.shell[i]=new Page(); } } public void setCurrent(int current){this.current=current;} public int getCurrent(){return this.current;} public int searchpage(int pagenumb){