📄 pcb.java
字号:
/************************************************************************************
*进程控制块链表:[作业ID][作业状态(0:等待.1:运行)][优先级][当前pc][当前AX][当前BX][当前CX][当前DX][当前在硬盘中的地址]
*************************************************************************************/
package job;
import java.util.*;
public class PCB
{
private LinkedList PCBList;
// private static boolean firstRun = true;
private static int SIZE = 9;
public PCB()
{
//if(firstRun)
//{
this.Init();
//}
}
public void Init()
{
PCBList = new LinkedList();
}
/**************************************************
*功能描述: 在链表开始处加入一个结点
***************************************************/
public void addFirst(int[] pcbValue)
{
String pcb[] = new String[SIZE];
for(int i=0;i<SIZE;i++)
{
pcb[i] = ""+pcbValue[i];
}
PCBList.addFirst(pcb);
}
/****************************************************
*功能描述: 删除莲表最后一个结点
*****************************************************/
public void removeLast()
{
PCBList.removeLast();
}
/****************************************************
*功能描述: 把最后的结点移到链表最前面的位置
****************************************************/
public void Change()
{
String pcbString[] = new String[SIZE];
pcbString = (String[])PCBList.getLast();
PCBList.removeLast();
PCBList.addFirst(pcbString);
}
/****************************************************
*功能描述: 获取链表最后一个结点的值
*****************************************************/
public int[] getLast()
{
int pcbInt[] = new int[SIZE];
if(PCBList.size()!=0)
{
String pcbString[] = new String[SIZE];
pcbString = (String[])PCBList.getLast();
for(int i=0;i<SIZE;i++)
{
pcbInt[i] = Integer.parseInt(pcbString[i]);
}
}
return pcbInt;
}
/*****************************************************
*功能描述: 设置链表最后一个结点的值
*******************************************************/
public void setLast(int[] value)
{
String pcbString[] = new String[SIZE];
for(int i=0;i<SIZE;i++)
{
pcbString[i] = ""+value[i];
}
int size = PCBList.size();
if(size>0)
PCBList.set(size-1,pcbString);
}
/***********************************************
*功能描述: 获取链表的大小,即结点个数
***********************************************/
public int Size()
{
return PCBList.size();
}
/**************************************************
*功能描述: 获取链表中index位置的结点的值
*************************************************/
public int[] Get(int index)
{
int pcbInt1[] = new int[SIZE];
for(int i=0;i<SIZE;i++)
{
pcbInt1[i]=0;
}
if(index>0)
{
String pcbString[] = new String[SIZE];
pcbString = (String[])PCBList.get(index);
int pcbInt[] = new int[SIZE];
for(int i=0;i<SIZE;i++)
{
pcbInt[i] = Integer.parseInt(pcbString[i]);
}
return pcbInt;
}
else return pcbInt1;
}
/***************************************************
*功能描述: 删除作业ID为id的作业的PCB结点
****************************************************/
public void Remove(int id)
{
for(int i=0;i<PCBList.size();i++)
{
String pcbString[] = new String[SIZE];
int jobid;
pcbString = (String[])PCBList.get(i);
jobid = Integer.parseInt(pcbString[0]);
if(jobid==id)
{
PCBList.remove(i);
break;
}
}
}
/***********************************************
*功能描述: 获取作业在链表中的序号
************************************************/
public int getIndex(int id)
{
for(int i=0;i<PCBList.size();i++)
{
String pcbString[] = new String[SIZE];
int jobid;
pcbString = (String[])PCBList.get(i);
jobid = Integer.parseInt(pcbString[0]);
if(jobid==id)
{
return i;
}
}
return -1;
}
public int getValue(int id,int pos)
{
int index = this.getIndex(id);
if(index==-1)
return -1;
String s[]=(String[])PCBList.get(index);
int value =Integer.parseInt(s[pos]);
return value;
}
public void setValue(int id,int pos,int value)
{
int index = this.getIndex(id);
String s[]=(String[])PCBList.get(index);
s[pos]=""+value;
PCBList.set(index,s);
}
public int PCBSize()
{
return SIZE;
}
public int getLastID()
{
int pcbInt[] = new int[SIZE];
if(PCBList.size()!=0)
{
String pcbString[] = new String[SIZE];
pcbString = (String[])PCBList.getLast();
for(int i=0;i<SIZE;i++)
{
pcbInt[i] = Integer.parseInt(pcbString[i]);
}
}
return pcbInt[0];
}
public void sort()
{
if(PCBList.size()>0)
{
String s[]=(String[])PCBList.getLast();
int int_s=Integer.parseInt(s[2]);
int index=PCBList.size()-1;
for(int i=0;i<PCBList.size()-2;i++)
{
String ss[]=(String[])PCBList.get(i);
int int_ss=Integer.parseInt(ss[2]);
//desktop.Desktop.addTextToStateTextField(""+PCBList+">"+int_s+"\n");
if(int_ss>int_s)
{
index=i;
int_s=int_ss;
}
}
if(index!=PCBList.size()-1)
{
String sss[]=(String[])PCBList.remove(index);
PCBList.addLast(sss);
}
//int aa[] = this.getLast();
//desktop.Desktop.addTextToStateTextField(""+aa[0]+">"+aa[2]+"\n");
}//end if
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -