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

📄 memory.java

📁 操作系统课程设计
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}
	 class BarThread extends Thread {
		

		JProgressBar progressBar;

		public BarThread(JProgressBar bar) {
			progressBar = bar;
		}

		public void run() {
			int minimum = progressBar.getMinimum();
			int maximum = progressBar.getMaximum();
			Runnable runner = new Runnable() {
				public void run() {
					int value = progressBar.getValue();
					progressBar.setValue(value + 1);
				}
			};
			for (int i = minimum; i < maximum; i++) {
				if(flag){
					omgtime = i;
				}
				try {
					SwingUtilities.invokeAndWait(runner); // Our task for each step is to just sleep          
					Thread.sleep(DELAY);
				} catch (InterruptedException ignoredException) {
				} catch (InvocationTargetException ignoredException) {
				}
			}
		}
	}
	
	class MyWindowMonitor extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
			setVisible(false);
			// notconnect();
			System.exit(0);
		}
	}

	/*class BgetLis implements ActionListener {
		@SuppressWarnings("deprecation")
		public void actionPerformed(ActionEvent e) {
			try {
				String name1 = tp_name.getText();
				
				int time1 = Integer.parseInt(tp_time.getText());
				int pri1 = Integer.parseInt(tp_priority.getText());
				String state1 = "ready";
				int mem=Integer.parseInt(tp_memory_size.getText());
				if((memvalue+mem)>maxmem){
					tcpuinfo.setText(" 内存溢出!");
					repaint();
				}
				else{
					if (tp_name.getText().equalsIgnoreCase("")) {
					}// NAME输入不能为空
					else {
						memvalue=memvalue+mem;
						System.out.println(name1);
						Lready.removeAll();
						PCB rrpcb = new PCB(name1, time1, pri1, state1,mem);
						fenpei(rrpcb);
						tp_name.setText("");
						tp_priority.setText("");
						tp_time.setText("");
						tp_memory_size.setText("");
						pcbs.add(rrpcb);
						tcpuinfo.setText("置入就绪队列成功!");
						sort(pcbs);
						repaint();
					}
				}
				
				
			} catch (Exception e1) {

			}
		}

	}*/

	class BCpuLis implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			
			//if(pcbs.size()<5){
				if(Hpcbs.size()>0){
					int mem=0;
					while((Hpcbs.size())>0&&((memvalue+mem)<maxmem)/*&&pcbs.size()<5*/){
						 mem=Hpcbs.get(0).getSize();
						if((memvalue+mem)>maxmem){
							tcpuinfo.setText(" 内存溢出!");
						}
						else{
						memvalue=memvalue+mem;
						Hpcbs.get(0).setState("ready");
						fenpei(Hpcbs.get(0));
						pcbs.add(Hpcbs.get(0));
						Hpcbs.remove(0);
						}
					}
				}
				
			//}
			
			
			
			int j = 40000, k;
	        for (int i = 0; i < pcbs.size(); i++) {
					k = pcbs.get(i).getPriority();
					if (j > k) {
						FirstPcb = pcbs.get(i);
						j = k;
					}
				}
	        if(pcbs.size()>0){
	        	timer.schedule(new MyTask(), FirstPcb.getTime()*1000);
	        }
	        //在1秒后执行此任务,每次间隔2秒,假如传递一个Data参数,就可以在某个固定的时间执行这个任务.
			BCpuscheduler.setEnabled(false);
			//BgetP_s.setEnabled(false);
			//Bgetp_s_r.setEnabled(false);
	        if(pcbs.size()>0){
	        	DELAY= 100* FirstPcb.getTime();
				aJProgressBar.setValue(0);
				Thread stepper = new BarThread(aJProgressBar);
				stepper.start();
				aJProgressBar.setValue(0);
				Lwaiting.removeAll();
			}
	        FirstPcb.setState("running");
	        sort(pcbs);
	        repaint();
	      
		}
	}
	
	class BgetP_sLis implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			flag = false;
			System.out.println("omgtime="+omgtime);
			try {
			int Gua=Lready.getSelectedIndex(); 
			PCB GuaPcb=new PCB();
			GuaPcb=pcbs.get(Gua);
			int time = (int) (GuaPcb.getTime()*0.1*omgtime);
			GuaPcb.setTime(GuaPcb.getTime()-time);
			pcbs.remove(GuaPcb);
			huishou(GuaPcb);
			GuaPcb.setState("waiting");
			Gpcbs.add(GuaPcb);
			memvalue = memvalue-GuaPcb.getSize();
			//aJProgressBar.setValue(0);
			repaint();
			tcpuinfo.setText(" 挂起成功!");               //里面执行的工程只有将就绪队列选中的进程去到 然后添加到挂起中 内存也释放
			}catch (Exception e1) {
			}
		}
	}
	
	class Bgetp_s_rLis implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			try {
			int JGua=Lsuspend.getSelectedIndex();
			PCB JGuaPcb=new PCB();
			JGuaPcb=Gpcbs.get(JGua);
			Gpcbs.remove(JGuaPcb);
			JGuaPcb.setState("ready");
			fenpei(JGuaPcb);
			pcbs.add(JGuaPcb);
			Lready.removeAll();
			sort(pcbs);
			repaint();
			tcpuinfo.setText(" 解挂成功!");
			memvalue = memvalue+JGuaPcb.getSize();
			}catch (Exception e1) {
			}
		}
	}
	
	class BRestoreLis implements ActionListener{

			@SuppressWarnings("deprecation")
		public void actionPerformed(ActionEvent e) {
				try {
					String name1 = tp_name.getText();

					int time1 = Integer.parseInt(tp_time.getText());
					int pri1 = Integer.parseInt(tp_priority.getText());
					String state1 = "Restore";
					int mem=Integer.parseInt(tp_memory_size.getText());
					if(mem>maxmem){
						tcpuinfo.setText(" 内存过大,错误进程!");
						return;
					}
					if ((tp_name.getText().equalsIgnoreCase(""))) {
					}// NAME输入不能为空
					else {
						System.out.println(name1);
						Lwaiting.removeAll();
						PCB rrpcb = new PCB(name1, time1, pri1, state1,mem);
						tp_name.setText("");
						tp_priority.setText("");
						tp_time.setText("");
						tp_memory_size.setText("");
						Hpcbs.add(rrpcb);
						tcpuinfo.setText("置入后备队列成功!");
						repaint();
					}
				} catch (Exception e1) {

				}
			}

	}
	
	class randomLis implements ActionListener{ // 随机按钮监听

		@SuppressWarnings("deprecation")
		public void actionPerformed(ActionEvent e) {
			
			if(pcbs.size()<=0){
				for(int i=1;i<6;i++){
					String name = "pro"+i;
					int timenum = (int) (Math.random()*10)+1;
					int prinum = (int) (Math.random()*19)+1;
					int memnum = (int) (Math.random()*10)+1;   //为1~20的随机数
					String state="ready";
					PCB pcb = new PCB(name,timenum,prinum,state,memnum);
					memvalue = memvalue+memnum;
					fenpei(pcb);
					pcbs.add(pcb);
				}
				sort(pcbs);
				repaint();
			}
		}
	}
/*	
	private class PaintThread implements Runnable {

		public void run() {
			while(true) {
				repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}*/
	
	public void paint(Graphics g){
		Color c =g.getColor();
		Color c1= new Color(0,0,0);
		g.setColor(c1);
		g.fillRoundRect(165,250-60,400,20,5,5);
		g.fillRoundRect(165,300-80,400,20,5,5);
		g.fillRoundRect(165,220-60,400,20,5,5);
		g.fillRoundRect(640,220-60,100,20,5,5);
		g.fillRoundRect(100, 300-80, 60, 20, 5, 5);
		g.fillRoundRect(100, 250-60, 60, 20, 5, 5);
		g.fillRoundRect(100, 220-60, 60, 20, 5, 5);
		g.fillRoundRect(150, 300, 400, 50, 5, 5);
		g.setColor(Color.green);
		g.drawLine(150, 300, 150, 350);
		g.drawLine(150, 300, 550, 300);
		g.drawLine(550, 300, 550, 350);
		g.drawLine(150, 350, 550, 350);
		g.setColor(Color.red);
		g.fillRoundRect(150, 300, 40, 50, 5, 5);
		g.setColor(Color.green);
		for(int i=0;i<notables.size();i++){
			notable ta=notables.get(i);
			if(!ta.isState()){
				int st=ta.getStmem();
				int size= ta.getSize();
				g.fillRoundRect(150+st*4, 300, size*4, 50, 5, 5);
			}
		}
		g.setColor(Color.white);
		for(int i=1;i<20;i++){
			g.drawLine(150+i*20, 300, 150+i*20,350);
		}
		g.setColor(Color.orange);
		g.drawString("后备队列", 100, 315-80);	
		g.drawString("就绪队列", 100, 265-60);
		g.drawString("CPU", 100, 235-60);
		g.setColor(Color.BLUE);
		g.fillRoundRect(640,220-60,memvalue,20,5,5);
		g.setColor(Color.orange);
		g.drawString(memvalue+"%", 680, 235-60);
		
		for(int i=0;i<pcbs.size();i++){
			PCB pro = new PCB();
			pro = pcbs.get(i);
			if(pro.getState().equalsIgnoreCase("ready")){
				pro.draw(g, i*50+165, 250-60, 50, 20);
			}
			else{
				pro.draw(g, 165, 220-60, 130, 20);
			}
		}
		for(int i=0;i<Hpcbs.size();i++){
			PCB pro = new PCB();
			pro = Hpcbs.get(i);
			pro.draw(g, i*50+165, 220, 50, 20);
		}
		
		Lready.removeAll();
		for (int i = 0; i < pcbs.size(); i++) {
			
			PCB rpcb = pcbs.get(i);
			String name = rpcb.getName();
			int time = rpcb.getTime();
			int pri = rpcb.getPriority();
			String state=rpcb.getState();
			int size=rpcb.getSize();
			String s = "name=" + name + ",time=" + time + ",Priority="
					+ pri+"state=" + state +","+size+"MB";
			System.out.println(s);
			Lready.add(s);
			if(state.equalsIgnoreCase("running")){
				Lready.select(i);
			}
		}
		Lsuspend.removeAll();
		for (int i = 0; i < Gpcbs.size(); i++) {
			PCB rpcb = Gpcbs.get(i);
			String name = rpcb.getName();
			int time = rpcb.getTime();
			int pri = rpcb.getPriority();
			String state=rpcb.getState();
			String s = "name=" + name + ",time=" + time + ",Priority="
					+ pri+"state=" + state;
			System.out.println(s);
			Lsuspend.add(s);
		}
		Lwaiting.removeAll();
		for (int i = 0; i < Hpcbs.size(); i++) {
			PCB rpcb = Hpcbs.get(i);
			String name = rpcb.getName();
			int time = rpcb.getTime();
			int pri = rpcb.getPriority();
			String state=rpcb.getState();
			String s = "name=" + name + ",time=" + time + ",Priority="
					+ pri+"state=" + state;
			System.out.println(s);
			Lwaiting.add(s);

		}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -