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

📄 os.java

📁 操作系统课程设计
💻 JAVA
字号:
import java.awt.*;
import java.awt.List;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;



public class os extends JFrame {
	private static int DELAY = 100;
	int maxmem=100;//最大内存
	int memvalue=0;
	int runtime=1;
	 boolean flag = true;
	 int omgtime=0;
	JProgressBar aJProgressBar = new JProgressBar(0, 10);//进度条类哦
	 List Lready;
	List Lwaiting;
	 List Lsuspend;
	List L_cpus_info, L_memory_table, L_memory_gra;
	
	JButton BCpuscheduler,BRestore, Bgetp_r, BgetP_s, Bgetp_s_r,random;

	JTextField tp_name, tp_time, tp_priority, tp_memory_size;
	 JTextField tcpuinfo;

	JLabel p_name, p_time, p_priority, p_memory_size, r_queue, w_queue, s_queue,
			memory_gra, memory_table, cpus_info;

	JPanel p1, p2, p3, p4,p5,p6;
	PCB FirstPcb = new PCB();

	 ArrayList<PCB> pcbs = new ArrayList<PCB>();
	 ArrayList<PCB> Gpcbs = new ArrayList<PCB>();
	ArrayList<PCB> Hpcbs = new ArrayList<PCB>();
	
	Timer timer = new Timer();
	
	void sort(ArrayList<PCB> pcbs){
		  for(int i=0;i<pcbs.size()-1;i++){
			    
			    for(int j = i+1 ; j<pcbs.size();j++){
					 
			    	if(pcbs.get(i).getPriority() >pcbs.get(j).getPriority()){
				    		
				    		 PCB  d = pcbs.get(i);
				    		 pcbs.set(i,pcbs.get(j));	
				    		 pcbs.set(j,d);
				      }
			
			    }
		  }
	}
	
	class MyTask extends java.util.TimerTask{
        @Override
        public void run() {
            int Ftime = 0;
			int Fpri = FirstPcb.getPriority()+1;
			if (Ftime > 0) {
				FirstPcb.setTime(Ftime);
				FirstPcb.setPriority(Fpri);
			} else {
				if(flag){
					memvalue = memvalue-FirstPcb.getSize();
					FirstPcb.setState("ready");
					
				}
				else{
					flag = true;
				}
				
				
				pcbs.remove(FirstPcb);// 不能用remove(j) 感觉是不能用这个方法移除第一个类
			}
			
			if(pcbs.size()>0){
				tcpuinfo.setText(" 调度成功!");
			}
			else{
				tcpuinfo.setText(" 无进程在就绪队列中 !");
			}
            
            BCpuscheduler.setEnabled(true);
            BgetP_s.setEnabled(true);
			Bgetp_s_r.setEnabled(true);
				repaint();
				
        }
        
    }
    
	// Panel a = new Panel();
	// Panel b = new Panel();
	public static void main(String[] args) {
		new os().View();
		// new ChatClient().reView();
		// new ChatClient().information();
	}

	void View() {
		aJProgressBar.setStringPainted(true); // 显示百分比字符   
		aJProgressBar.setIndeterminate(false); // 不确定的进度条
		this.setSize(800, 600);
		this.setLocation(100, 100);
		this.setLayout(null);
		this.setBackground(Color.pink);
		this.setLayout(null/*new GridLayout(2, 1, 0, 200)*/);
		p_name = new JLabel("进程名");// 第一行,输入进程信息面板;
		tp_name = new JTextField(10);
		p_time = new JLabel("运行时间(s)");
		tp_time = new JTextField(10);
		p_priority = new JLabel("优先权");
		tp_priority = new JTextField(10);
		p_memory_size = new JLabel("所需主存大小(MB)");
		tp_memory_size = new JTextField(15);
		Bgetp_r = new JButton("置入就绪队列");
		BRestore = new JButton("置入后备队列"); 
		random = new JButton("随机产生就绪队列");
		p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p1.setBounds(0, 0, 800, 60);
		p1.add(p_name);
		p1.add(tp_name);
		p1.add(p_time);
		p1.add(tp_time);
		p1.add(p_priority);
		p1.add(tp_priority);
		p1.add(p_memory_size);
		p1.add(tp_memory_size);
		p1.add(Bgetp_r);
		p1.add(BRestore);
		p1.add(random);
		r_queue = new JLabel("就绪队列");// 第二行,队列名面板;
		w_queue = new JLabel("后备队列");
		s_queue = new JLabel("挂起队列");
		memory_gra = new JLabel("内存状态图");
		p2 = new JPanel(new FlowLayout(FlowLayout.CENTER, 130, 10));
		p2.setBounds(0, 70, 800, 70);
		p2.add(r_queue);
		p2.add(w_queue);
		p2.add(s_queue);
		p2.add(memory_gra);
		p2.add(aJProgressBar);
		Lready = new List(5);
		// 第三行,队列状态面板;
		//Lready.setSize(200, 40);
		Lwaiting = new List(5);
		//  Lwaiting.setSize(200, 40);
		Lsuspend = new List(5);
		//  Lsuspend.setSize(200, 40);
		L_memory_gra = new List(5);

		p3 = new JPanel(new GridLayout(1,4 ,0, 0));
		p3.setBounds(0, 400, 800, 100);
		p3.add(Lready);
		p3.add(Lwaiting);
		p3.add(Lsuspend);
		//p3.add(L_memory_gra);
		BCpuscheduler = new JButton("进行调度");// 第四行,调度面板;

		BgetP_s = new JButton("挂起");

		Bgetp_s_r = new JButton("解挂");

		tcpuinfo = new JTextField("info", 30);
		p4 = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 0));
		p4.setBounds(0, 520, 800, 70);
		p4.add(BCpuscheduler);
		p4.add(BgetP_s);
		p4.add(Bgetp_s_r);
		p4.add(tcpuinfo);
		//p5 = new JPanel(new GridLayout(2,1 ,0, 0));
		//p6 = new JPanel(new GridLayout(2,1 ,0, 20));
		//p5.add(p1);
		//p5.add(p2);
		//p6.add(p3);
		this.add(p4);
		this.add(p1);
		this.add(p2);
		this.add(p3);
		//this.add(p5);// 窗口面板;
		//this.add(p6);
		
		this.setVisible(true);
		this.setResizable(false);
		this.addWindowListener(new MyWindowMonitor());
		BgetLis b1 = new BgetLis();
		BCpuLis b2 = new BCpuLis();
		BgetP_sLis b3=new BgetP_sLis();
		Bgetp_s_rLis b4=new Bgetp_s_rLis();
		BRestoreLis b5=new BRestoreLis();
		randomLis b6=new randomLis();
		Bgetp_r.addActionListener(b1);
		BCpuscheduler.addActionListener(b2);
		BgetP_s.addActionListener(b3);
		Bgetp_s_r.addActionListener(b4);
		BRestore.addActionListener(b5);
		random.addActionListener(b6);
	}
	
	 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);
						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");
						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);
			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");
			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;
					pcbs.add(pcb);
				}
				sort(pcbs);
				repaint();
			}
		}
	}
	
	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.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();
			String s = "name=" + name + ",time=" + time + ",Priority="
					+ pri+"state=" + state;
			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 + -