⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagetable.java

📁 这是一份标准的课程设计文档
💻 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 + -