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

📄 ps.java

📁 进程调度的设计与实现1. 综合应用下列知识点设计并实现操作系统的进程调度:邻接表
💻 JAVA
字号:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Vector;
import java.util.EventObject;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;

public class ps
{
	Vector<Vector>  data = new Vector<Vector>();
	Vector c = new Vector();
	Thread ts;
	boolean flag3;
	boolean flag4;
	boolean flag5;
	boolean flag6;

// 调度的进程

	Vector<LinkedList> list =  new Vector<LinkedList>();
	Vector<Integer> pns = new Vector<Integer>();
	Vector<Integer> priorities = new Vector<Integer>();
	Vector<Integer> lives = new Vector<Integer>();
	Vector<String> status = new Vector<String>();
	LinkedList<Vector> order = new LinkedList<Vector>();
	HashSet<Integer> hs = new HashSet<Integer>();

	
DefaultTableModel tm;


	private JFrame frame;
	JTable table;

	public static void main(String args[])
	{
		try
		{
			ps window = new ps();
			window.frame.setVisible(true);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	class schedule implements Runnable
	{
		schedule()
		{
		}

		public void run()
		{
			sort();
			while (true)
			{
				try
				{
					if (flag5 == true&&flag6 == true)
					{
						build();
						sort();
						flag5 = false;
						flag6 = false;
						flag4 = true;
					}
					

					if (flag3 == false)break;


					execute();
				}
				catch (Exception e){}
			}
		}
	}




//**************************************************************************************************************************
	
	private void execute() throws InterruptedException
	{
		Vector t = data.get(0);
		Integer i = (Integer)(t.get(2));
		if ( i.intValue() > 1)
		{
			t.set(3,"RUNIN");
			t.set(2,i.intValue()-1);
			java.lang.Thread.sleep((long)400);
		}
		else 
		{
			java.lang.Thread.sleep((long)400);
			t.set(2,i.intValue()-1);
			Integer i2 = (Integer)(t.get(1));
			Integer i3 = (Integer)(t.get(0));
			hs.remove(i3.intValue());

			data.remove(0);
			(list.get(i2.intValue())).poll();
		}

		flag6 = true;

		table.updateUI();

		if (data.size() == 0)
		{
			flag3  = false;
		}
	}


//**************************************************************************************************************************

	private void sort()
	{
		int n = data.size();
		
		Vector runnin = data.get(0);
		runnin.set(3,"READY");
		
		int[] o = new int[n];
		int count = 0;
		int temp;
		LinkedList l = new LinkedList();

		for (int i = 49 ;i >= 0 ;i-- )
		{
			l = list.get(i);
			for (int j = 0 ;j < l.size() ;j++ )
			{
				o[count] = (Integer)(l.get(j));
				count++;
			}
		}
		
		int now;
		Integer iTemp = new Integer(0);
		for (int i = 0 ;i < n ;i++ )
		{
			now = o[i];
			for (int j = 0;j < data.size() ;j++ )
			{
				iTemp = (Integer)(data.get(j).get(0));
				if (iTemp.intValue() == now)now = j;

			}
			order.offer(data.get(now));
			data.remove(now);
		}

		for (int i = 0 ;i < n ;i++ )
		{
			data.add(order.poll());
		}
		
	}


//**************************************************************************************************************************

	private void build()
	{
		buildor(1);

		int n = pns.size();
		Vector temp = new Vector();
		temp.add(pns.get(n-1));
		temp.add(priorities.get(n-1));
		temp.add(lives.get(n-1));
		temp.add(status.get(n-1));

		data.add(temp);
	}


//**************************************************************************************************************************


	public ps()
	{
		initialize();
	}

	private void initialize()
	{

		c.add("PID");
		c.add("PRIORITY");
		c.add("LIFE");
		c.add("STATUS");

		tm = new DefaultTableModel(data,c);

		frame = new JFrame();
		frame.setTitle("ProcessSchedule");
		frame.getContentPane().setLayout(null);
		frame.setBounds(100, 100, 500, 375);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

		final JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(46, 90, 399, 173);
		frame.getContentPane().add(scrollPane);

		table = new JTable();
		table.setVerifyInputWhenFocusTarget(false);
		table.setEditingColumn(-1);
		table.setEditingRow(-1);
		table.setFocusable(false);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
		table.setRequestFocusEnabled(false);
		table.setBorder(new BevelBorder(BevelBorder.LOWERED));
		table.setModel(tm);
		scrollPane.setViewportView(table);

		final JTextField pNum = new JTextField();
		
		pNum.setBounds(132, 53, 95, 20);
		pNum.setText("8");
		frame.getContentPane().add(pNum);

		final JButton start = new JButton();
		start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				if (flag3)show();
				else
				{
					initial(pNum, start);
					ts = new Thread(new schedule());
					ts.start();
				}
			}
		});
		start.setText("START");
		start.setBounds(46, 289, 99, 23);
		frame.getContentPane().add(start);

		final JButton insert = new JButton();
		insert.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				if (flag4 == true)
				{
					flag4 = false;
					flag5 = true;
				}
				else show();
			}
		});
		insert.setText("NEW PROCESS");
		insert.setBounds(244, 289, 99, 23);
		frame.getContentPane().add(insert);

		final JLabel label = new JLabel();
		label.setText("开始的进程数");
		label.setBounds(46, 55, 80, 15);
		frame.getContentPane().add(label);
		
		
	}

	
	private void show()
	{
		String message = "Slower Please!";
		JOptionPane.showMessageDialog(frame, message);
	}

//**************************************************************************************************************************
	private void initial(JTextField pNum, JButton start)
	{
		hs.clear();
		pns.clear();
		priorities.clear();
		lives.clear();
		status.clear();		
		flag3 = true;
		flag4 = true;
		flag5 = false;
		flag6 = false;
		list.clear();

		int pn = Integer.parseInt(pNum.getText());
				
		for (int i = 0 ; i < 50 ; i++)
		{
			LinkedList<Integer> p = new LinkedList<Integer>();
			list.add(p);
		}
		
		buildor(pn);
		
		for (int i = 0 ;i < pn ;i++ )
		{
			Vector temp = new Vector();
			temp.add(pns.get(i));
			temp.add(priorities.get(i));
			temp.add(lives.get(i));
			temp.add(status.get(i));

			data.add(temp);
		}
		table.updateUI();
	}






//**************************************************************************************************************************
	private void buildor(int pn)
	{
		boolean flag = true;
		int temp = 0;

		java.util.Random r=new java.util.Random();

		for (int i = 0 ; i < pn ; i++)
		{
			while (flag)
			{
				
				temp =(r.nextInt() >>> 1) % 99 +1;
				if (hs.contains(temp))continue;
				pns.add(temp);
				hs.add(temp);
				break;
			}
			priorities.add( (r.nextInt() >>> 1) % 49);
			lives.add( (r.nextInt() >>> 1) % 4+1);
			status.add("READY");

			flag = true;
		}

		int t = 0;
		int t2 = 0;
		if (pn == 1)
		{
			t = priorities.get(priorities.size()-1);
			(list.get(t)).offer(pns.get(priorities.size()-1));
		}
		else
		{
			for (int i = 0 ; i < pn ; i++)
			{
				t = priorities.get(i);
				list.get(t).offer(pns.get(i));
			}
		}

	}

}

⌨️ 快捷键说明

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