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

📄 os3.java

📁 用java界面模拟操作系统内存分配与回收的功能。直观易懂。
💻 JAVA
字号:
import  java.io.*;
import  java.awt.*;
import  java.awt.event.*;
import  java.util.Arrays;

class  DrawMem  extends  Canvas
{
	private String str = "主存空间的分配和回收";
	private String unit  = "(单位:K)";

	public void paint (Graphics g) {
		g.setFont (new Font(str, Font.PLAIN+Font.BOLD, 32));
		g.drawString (str, 90, 60);
		g.drawRect (15, 100, 512, 40);
		g.setFont (new Font(unit, Font.PLAIN, 10));
		g.drawString (unit, 3, 163);
		for (int i=0; i<=120; i+=10)  {
			g.drawString (String.valueOf(i), 11+i*4, 153);
			g.drawLine (15+i*4, 140, 15+i*4, 143);
		}
		//g.drawString ("0", 15, 152);
		g.drawString ("128", 530, 153);
	}

	public void draw (int x, int width) {
		Graphics gr = getGraphics();
		gr.setColor (Color.red);
		gr.fillRect (x, 100, width, 40);
		//gr.fill3DRect (x, 100, width, 40, true);
		gr.setColor (Color.black);
		gr.drawLine (x, 100, x, 140);
		gr.drawLine (x+width-1, 100, x+width-1, 140);
	}

	public void clear (int x, int width) {
		Graphics gg = getGraphics();
		gg.clearRect (x, 100, width, 40);
		gg.setColor (Color.black);
		gg.drawRect (15, 100, 512, 40);
	}
}


public  class OS3 extends Frame implements ActionListener
{
	private int step = 4;
	private boolean[] flag = new boolean[128];
	private Button add = new Button ("增加作业");
	private Button del = new Button ("回收作业");
	private List list = new List (4, false);
	private TextField name = new TextField (6);
	private TextField size = new TextField (6);
	private Label lab1 = new Label ("   作业名:");
	private Label lab2 = new Label ("   作业大小(K):");
	private Label lab3 = new Label ("内存中的作业:");
	public  DrawMem drawing = new DrawMem ();
	static int[]  s = new int[100];
	static int[]  w = new int[100];
	private String str, str1, str2, str3, str4;
	private int start, end, len, t=0;
	private boolean find = false;
	
	private class WindowCloser extends WindowAdapter {
		public void windowClosing (WindowEvent we) {
			System.exit (0);
		}
	}
	
	private void setup () {
		Panel buttons = new Panel ();
		buttons.setLayout (new FlowLayout ());
		buttons.add (add);  buttons.add (del);

		Panel input = new Panel ();
		input.setLayout (new FlowLayout ());
		input.add (lab1); input.add (name);
		input.add (lab2); input.add (size); 

		Panel bottom = new Panel ();
		bottom.setLayout (new GridLayout (1, 5));
		bottom.add (lab3);

		Panel tag = new Panel ();
		tag.setLayout (new BorderLayout ());
		tag.add ("North", input);
		tag.add ("South", bottom);

		Panel con = new Panel ();
		con.setLayout (new BorderLayout ());
		con.add ("North", tag);
		con.add ("Center", list);

		Panel cen = new Panel ();
		cen.setLayout (new GridLayout (2, 1));
		cen.add (drawing);
		cen.add (con);

		setLayout (new BorderLayout ());
		add ("Center", cen);
		add ("South", buttons);
	}
	
	public OS3 () {
		super ("Memery Allocate and Recycle");
		setup ();
		add.addActionListener (this);
		del.addActionListener (this);
		addWindowListener (new WindowCloser ());
		setSize (555, 400);
		show ();
		setResizable (false);
		for (int i=0; i<128; i++)  flag[i] = false;
	}

	public void actionPerformed (ActionEvent ae) {
		if ((ae.getSource() == add) && (!name.getText().equals(" ")) && (!size.getText().equals(" "))) {
				str1 = name.getText().trim();
				str2 = size.getText().trim();
				process_Add ();
				if (find == false)  {
					ConfirmDialog ensure = new ConfirmDialog (this);
				}
				else {
					str3 = String.valueOf (start);
					str4 = String.valueOf (end);
					str = "作业名:" + str1 + ",大小为:" + str2 + "K,起始地址为:" + str3 + "K,结束地址为:" + str4 + "K-1";
					t++;
					handleAdd (str);
					drawing.draw (15+start*step, len*step);
				}
		}
		else if ((ae.getSource() == del) && (list.getSelectedIndex() >= 0))  {
			int m = list.getSelectedIndex ();
			t--;
			drawing.clear (15+s[m]*step, w[m]*step);
			process_Del (m);
			handleDel (m);
		}
		name.requestFocus ();
	}

	public void process_Add () {
		len = Integer.parseInt (str2);
		int  sum, i;
		find = false;
		for (i=0; i<128 && !find; i++)  {
			sum = 0;
			if (flag[i])  {
				while (i<128 && flag[i])  i++;
			}
			while (i<128 && !flag[i] && sum < len)  {
					i++;  sum++;
			}
			if (sum == len)  {
				find = true;
				start = i - len;
				end = i;
				for (int j=start; j<end; j++)  flag[j] = true;
			}
		}
	}

	public void process_Del (int m) {
		for (int i=s[m]; i<s[m]+w[m]; i++) {
			flag[i] = false;
		}
		for (int i=m; i<t; i++) {
			s[i] = s[i+1];
			w[i] = w[i+1];
		}
	}

	public void handleAdd (String job)  {
		int  m = list.getItemCount();
		list.add (job);
		list.select (m);
		s[m] = start;
		w[m] = len;
		name.setText("");
		size.setText("");
	}
	
	public void handleDel (int p)  {
		list.remove (p);
		list.select (p);
	}

	public static void main (String[] args) {
		OS3 sample = new OS3 ();
	}

};

⌨️ 快捷键说明

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