📄 pagetable.java
字号:
/*******************************************
*页表类
*页表结构:[页数][硬盘中的首地址][是否空(0为空)][最近使用次数][内存中的页地址]
*2004-9-18 编写者:赖卫国
*******************************************/
package memory;
import Global.*;
import myException.*;
public class PageTable
{
private int Pages;
private int Page_Size;
private int Page_table[][];
public PageTable()
{
int j = 0;
Pages = Global.PAGES;
Page_Size = Global.PAGE_SIZE;
Page_table = new int[Pages][5];
//初始化页表
for(int i=0;i<Pages;i++)
{
Page_table[i][0] = i;
Page_table[i][1] = -1;
Page_table[i][2] = 0;
Page_table[i][3] = 0;
Page_table[i][4] = -1;
//j = j + Page_Size;
}
}
/******************************************************
*功能描述: 为一个作业新建一个页表
*参数说明: jobSize:作业大小
********************************************************/
public void addNew(int jobSize)
throws myException
{
int jobpage = (int)jobSize/Global.PAGE_SIZE+1;
int minsize,j=0;
int memspace=Global.MEMORY.count();
if(jobpage>Pages)
minsize=Pages;
else minsize=jobpage;
if(memspace>=minsize)
{
for(int i=0;i<minsize;i++)
{
Page_table[i][0] = i;
Page_table[i][1] = j;
Page_table[i][2] = 1;
Page_table[i][3] = 1;
Page_table[i][4] = Global.MEMORY.findBest();
Global.MEMORY.useAgain(Page_table[i][4]);
j = j + Page_Size;
}
}
else throw new myException("没有足够内存创建作业页表");
}
/*********************************************
*功能描述: 查找页表中的空页或最近使用最少的页面
*返回值: 查找到的页面的起始地址
*********************************************/
public int find()
{
int i,j;
int max = Page_table[0][3];
int minPage[] = new int[5];
minPage[0] = Page_table[0][0];
minPage[1] = Page_table[0][1];
minPage[2] = Page_table[0][2];
minPage[3] = Page_table[0][3];
minPage[4] = 0;
for (i=0;i<Pages ;i++ )
{
if(Page_table[i][2]==0)
return i;
}
for (i=1;i<Pages ;i++ )
{
if (Page_table[i][3]<minPage[3])
{
minPage[0] = Page_table[i][0];
minPage[1] = Page_table[i][1];
minPage[2] = Page_table[i][2];
minPage[3] = Page_table[i][3];
minPage[4] = i;
}
}
//this.setNull(minPage[4]);
return minPage[4];
}
public void setValue(int index1,int index2,int value)
{
Page_table[index1][index2] = value;
}
/*********************************************
*功能描述: 设置index页表项的属性为初始值
*参数说明: index:页号
*********************************************/
private void setNull(int index)
{
Page_table[index][2] = 0;
Page_table[index][3] = 0;
}
/*********************************************
*功能描述: 当调用新的页面时设置被调用页面的属性
*参数说明: index:页号
**********************************************/
public void setNewUse(int index)
{
Page_table[index][2] = 1;
Page_table[index][3] = 1;
}
/**********************************************
*功能描述: 恢复页表到初始状态
**********************************************/
public void clearAll()
{
for (int i=0;i<Pages ;i++ )
{
this.setNull(i);
}
}
public int getValue(int index1,int index2)
{
return Page_table[index1][index2];
}
public void UseAgain(int index)
{
int times = Page_table[index][3];
times++;
Page_table[index][3] = times;
//System.out.println(""+Page_table[index][3]);
}
/*public int[] getMemAdd(int HDAdd)
{
int sub;
int[] add = new int[2];
for(int i=0;i<Pages;i++)
{
sub = HDAdd - Page_table[i][1];
if(sub>=0&&sub<Page_Size)
{
add[0] = Page_table[i][4];
add[1] = sub;
break;
}
}
return add;
}*/
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -