📄 memory.java
字号:
import java.awt.*;
import java.awt.event.*;
class process{
public int pid;
public String name;
public int pri;
public int time;
public int size;
}
class mmemory{
public int address;
public int length;
public boolean state;
public int pid;
}
class Fframe extends WindowAdapter{
Frame frame;
TextField text,t1,t2,t3,text1,text2,text3,text4;
Label l0,l1,l2,l3,l4,l5,P_PID,P_name,P_priority,P_time,P_size;
List message,suspend,ready,wait,completed,memorylist;
Choice priority;
Button ad,sup,resu,run;
final int NR=6;
final int NWS=50;
final int TIME=5;
final int MEMORYSIZE=256;
int timex=TIME;
process pro1[]=new process[NR];
process pro2[]=new process[NWS];
process pro3[]=new process[NWS];
mmemory mem[]=new mmemory[NWS];
public void createFrame(){
Panel p,p0;
mem[0]=new mmemory();
mem[0].address=56;
mem[0].length=200;
mem[0].state=false;
frame=new Frame("操作系统CPU进程调度");
frame.setSize(800,450);
frame.setLocation(20,100);
frame.setBackground(Color.lightGray);
GridBagLayout gridbag=new GridBagLayout();
GridBagConstraints c=new GridBagConstraints();
c.fill=GridBagConstraints.BOTH;
text=new TextField(80);
text.setEditable(false);
p0=new Panel(new FlowLayout(FlowLayout.LEFT,5,5));
p0.add(new Label("进程状态"));
p0.add(text);
frame.add(p0,"North");
p=new Panel();
p.setLayout(gridbag);
frame.add(p,"Center");
l0=new Label(" 主存空间分配信息");memorylist=new List();
memorylist.add("起始地址 长度 状态 进程PID");
memorylist.add(" 0 56 分配 操作系统");
memorylist.add(" 56 200 未分配 ");
l1=new Label(" 操作输出信息");message=new List();
l2=new Label(" 已经完成进程");completed=new List();
completed.add("进程PID 进程名 优先权 时间 大小");
run=new Button("运行");
run.addActionListener(new runProcess());
l3=new Label(" 挂起进程队列");suspend=new List();
suspend.add("进程PID 进程名 优先权 时间 大小");
t1=new TextField(2);resu=new Button("解挂<PID>");
resu.addActionListener(new modifyProcess());
l4=new Label(" 就绪进程队列");ready=new List(7);
ready.add("进程PID 进程名 优先权 时间 大小");
t2=new TextField(1);sup=new Button("挂起<PID>");
sup.addActionListener(new modifyProcess());
l5=new Label(" 后备进程队列");wait=new List();
wait.add("进程PID 进程名 优先权 时间 大小");
P_PID=new Label("进程PID<int>!=0");P_name=new Label("进程名");
P_priority=new Label("优先权");P_time=new Label("运行时间");
P_size=new Label("所需主存大小");
text1=new TextField(2);text2=new TextField();
text3=new TextField(2);text4=new TextField();
priority=new Choice();
for(int i=0;i<10;i++)
priority.add(""+i);
ad=new Button("添加");
ad.addActionListener(new addProcess());
c.weightx=1.0;c.weighty=1.0;
c.gridwidth=4;
gridbag.setConstraints(l1,c);p.add(l1);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(l0,c);p.add(l0);
c.gridwidth=4;c.gridheight=4;
gridbag.setConstraints(message,c);p.add(message);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(memorylist,c);p.add(memorylist);
c.gridwidth=2;c.gridheight=1;
gridbag.setConstraints(l2,c);p.add(l2);
gridbag.setConstraints(l3,c);p.add(l3);
gridbag.setConstraints(l4,c);p.add(l4);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(l5,c);p.add(l5);
c.gridwidth=2;c.gridheight=4;
gridbag.setConstraints(completed,c);p.add(completed);
gridbag.setConstraints(suspend,c);p.add(suspend);
gridbag.setConstraints(ready,c);p.add(ready);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(wait,c);p.add(wait);
c.gridwidth=2;c.gridheight=1;
Label ll1=new Label("");
gridbag.setConstraints(ll1,c);p.add(ll1);
c.gridwidth=1;
gridbag.setConstraints(t1,c);p.add(t1);
gridbag.setConstraints(resu,c);p.add(resu);
gridbag.setConstraints(t2,c);p.add(t2);
gridbag.setConstraints(sup,c);p.add(sup);
Label ll0=new Label("");
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(ll0,c);p.add(ll0);
c.gridwidth=2;
gridbag.setConstraints(P_PID,c);p.add(P_PID);
gridbag.setConstraints(text1,c);p.add(text1);
gridbag.setConstraints(P_name,c);p.add(P_name);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(text2,c);p.add(text2);
c.gridwidth=2;
gridbag.setConstraints(P_priority,c);p.add(P_priority);
gridbag.setConstraints(priority,c);p.add(priority);
gridbag.setConstraints(P_time,c);p.add(P_time);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(text3,c);p.add(text3);
c.gridwidth=2;
gridbag.setConstraints(P_size,c);p.add(P_size);
gridbag.setConstraints(text4,c);p.add(text4);
c.gridwidth=GridBagConstraints.REMAINDER;
gridbag.setConstraints(ad,c);p.add(ad);
Label ll4=new Label("");
gridbag.setConstraints(ll4,c);p.add(ll4);
Label ll5=new Label("");c.gridwidth=2;
gridbag.setConstraints(ll5,c);p.add(ll5);
c.gridwidth=4;gridbag.setConstraints(run,c);p.add(run);
frame.addWindowListener(this);
frame.setVisible(true);
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
public int insert(process a[],process pp,int lastp){
int p=lastp-1,newp;
while(p>=0&&a[p].pri>pp.pri)
p--;
newp=p+1;
for(p=lastp-1;p>=newp;p--){
a[p+1]=new process();a[p+1]=a[p];
}
a[newp]=new process();a[newp]=pp;
return newp;
}
public int findLocation(process a[],int x,int lastp){
for(int i=0;i<lastp;i++)
if(x==a[i].pid)
return i;
return -1;
}
public process modify(process a[],int lastp,int location){
process p=new process();
p=a[location];
for(int i=location;i<lastp-1;i++){
a[i]=new process();a[i]=a[i+1];
}
return p;
}
public int RunProcess(int time,int quantum,String str){
if(time<=quantum){
for(int i=0;i<time;i++){
for(int j=0;j<99999;j++)
for(int k=0;k<10000;k++) ;
int k=i+1;String s="进程信息:"+str+"已经运行"+k+"时间单位!";
text.setText(s);message.add(s,0);
}
}
else{
for(int i=0;i<quantum;i++){
for(int j=0;j<99999;j++)
for(int k=0;k<10000;k++) ;
int k=i+1;String s="进程信息:"+str+"已经运行"+k+"时间单位!";
text.setText(s);message.add(s,0);
}
}
return quantum-time;
}
public int findMemoryLocation(mmemory a[],process pp,int lastp,boolean state){
if(state){
int count=0;int b[]=new int[NWS];
for(int i=0;i<lastp;i++)
if(a[i].state==false && pp.size<=a[i].length)
b[count++]=i;
if(count!=0){
int tempmin=b[0];
for(int j=0;j<count;j++)
if(a[tempmin].length>=a[b[j]].length) tempmin=b[j];
return tempmin;
}
else return -1;
}
else{
for(int i=0;i<lastp;i++)
if(a[i].state==true && pp.pid==a[i].pid)
return i;
return -1;
}
}
public void upModifyMemory(mmemory a[],process pp,int lastp,int loc){
for(int i=lastp-1;i>loc;i--){
a[i+1]=new mmemory();a[i+1]=a[i];
}
a[loc+1]=new mmemory();a[loc+1].address=a[loc].address+pp.size;
a[loc+1].length=a[loc].length-pp.size;a[loc+1].state=false;
a[loc].length=pp.size;a[loc].state=true;a[loc].pid=pp.pid;
String s0=" "+a[loc].address+" "+a[loc].length+" 分配 "+a[loc].pid;
memorylist.delItem(loc+2);memorylist.add(s0,loc+2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -