📄 memory.java
字号:
for(int i=0; i<128; i++){ //内存中连续块容量不足以分配给该作业,尝试进入等待队列
if(bufferType[i] == 0)
{
waitown++;
}
else{
waitown = 0;
waitfirst = i+1;
}
if(waitown == prolength){
waitlast = i;
int memoryID = -1;
for(int k=0; k<wait.length; k++){
if(wait[k][0] == -1){
memoryID = k;
break;
}
}
wait[memoryID][0] = waitfirst;
wait[memoryID][1] = waitlast;
wait[memoryID][2] = codeindex;
codeindex = codeindex+fileline;
for(int j=waitfirst; j<=waitlast; j++){
buffer[j].setBackground(Color.blue);
bufferType[j] = 1;
}
buffercount = buffercount - (wait[memoryID][1]-wait[memoryID][0]+1);
value2=(128-buffercount)*100/128;
jProgressBar2.setValue((int)value2);
jProgressBar2.setString(String.valueOf(value2)+"%");
int r[] ={memoryID,2}; //2表示进入等待队列
return r;
}
}
//等待队列也不足以分配给作业空间
JOptionPane.showMessageDialog(null, "内存以分配完", "注意",JOptionPane.WARNING_MESSAGE);
int r[] ={-1,-1};
return r;
}
else{
JOptionPane.showMessageDialog(null, "内存已分配完", "注意",JOptionPane.WARNING_MESSAGE);
int r[] ={-1,-1};
return r;
}
}
}
else
{
JOptionPane.showMessageDialog(null, "内存已分配完", "注意",JOptionPane.WARNING_MESSAGE);
int r[] ={-1,-1};
return r;
}
}
void cleanMemory(int memoryID)
{
int t=0;
for(int i=0;i<128;i++)
{
if(memoryType[i] == 1)
t++;
}
for(int j=t-1; j>=(t-run[memoryID][1]+run[memoryID][0]-1); j--)
{
memory[j].setBackground(Color.green);
memoryType[j] = 0; //0表示该内存单位未分配
}
memorycount = memorycount + run[memoryID][1]-run[memoryID][0]+ 1;//增加剩余内存量
value1=(128-memorycount)*100/128;
jProgressBar1.setValue((int)value1);
jProgressBar1.setString(String.valueOf(value1)+"%");
run[memoryID][0] = -1; //置队列数据结构为未记录状态
run[memoryID][1] = -1;
run[memoryID][2] = -1;
}
int waitTOrunnable(int waitID)
{ //等待队列尝试进入就绪队列
if((wait[waitID][1]-wait[waitID][0]+1) <= memorycount){ //如果主内存剩余长度大于等于作业长度则尝试
int has = 0;
int runfirst = 0,runlast = 0;
for(int i=0; i<128; i++){
if(memoryType[i] == 0){
has++;
}
else{
has = 0;
runfirst = i+1;
}
if(has == wait[waitID][1]-wait[waitID][0]+1){
runlast = i;
int memoryID = -1;
for(int k=0; k<run.length; k++){
if(run[k][0] == -1){
memoryID = k;
break;
}
}
run[memoryID][0] = runfirst;
run[memoryID][1] = runlast;
run[memoryID][2] = wait[waitID][2];
for(int j=runfirst; j<=runlast; j++){
memory[j].setBackground(Color.blue);
memoryType[j] = 1;
}
memorycount = memorycount - (run[memoryID][1]-run[memoryID][0]+1);
value1=(128-memorycount)*100/128;
for(int j=wait[waitID][0]; j<=wait[waitID][1]; j++)
{
buffer[j].setBackground(Color.green);
bufferType[j] = 0;
}
buffercount = buffercount + wait[waitID][1]-wait[waitID][0]+1;
value2=(128-buffercount)*100/128;
jProgressBar2.setValue((int)value2);
jProgressBar2.setString(String.valueOf(value2)+"%");
wait[waitID][0] = -1;
wait[waitID][1] = -1;
wait[waitID][2] = -1;
return memoryID;
}
}
}
return -1;
}
private void jbInit() throws Exception
{
this.setBackground(Color.orange);
this.setLayout(borderLayout1);
jPanel1.setPreferredSize(new Dimension(10, 150));
jPanel1.setLayout(borderLayout2);
jPanel2.setMinimumSize(new Dimension(124, 54));
jPanel2.setPreferredSize(new Dimension(10, 150));
jPanel2.setLayout(borderLayout3);
jPanel3.setBackground(SystemColor.controlHighlight);
jPanel3.setBorder(BorderFactory.createLoweredBevelBorder());
jPanel3.setLayout(flowLayout1);
jPanel5.setBackground(SystemColor.controlHighlight);
jPanel5.setBorder(BorderFactory.createLoweredBevelBorder());
jPanel5.setMinimumSize(new Dimension(204, 32));
jPanel5.setPreferredSize(new Dimension(221, 32));
jPanel5.setLayout(flowLayout2);
jPanel4.setLayout(gridLayout1);
gridLayout1.setHgap(4);
gridLayout1.setVgap(4);
jPanel6.setLayout(gridLayout2);
gridLayout2.setHgap(4);
gridLayout2.setVgap(4);
jProgressBar1.setForeground(Color.orange);
jProgressBar1.setBorder(BorderFactory.createRaisedBevelBorder());
jProgressBar1.setPreferredSize(new Dimension(150, 18));
jProgressBar1.setStringPainted(true);
jProgressBar2.setForeground(Color.orange);
jProgressBar2.setBorder(BorderFactory.createRaisedBevelBorder());
jProgressBar2.setPreferredSize(new Dimension(150, 18));
jProgressBar2.setStringPainted(true);
this.add(jPanel1, java.awt.BorderLayout.NORTH);
jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);
jPanel1.add(jPanel4, java.awt.BorderLayout.CENTER);
jPanel2.add(jPanel6, java.awt.BorderLayout.CENTER);
jPanel2.add(jPanel5, java.awt.BorderLayout.NORTH);
this.add(jPanel2, java.awt.BorderLayout.SOUTH);
jPanel3.add(store, null);
jPanel3.add(jProgressBar1, null);
jPanel5.add(queue, null);
jPanel5.add(jProgressBar2, null);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -