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

📄 memory.java

📁 操作系统的cpu调度以及内存管理的java实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -