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

📄 page.java

📁 这是一个对操作系统中分页技术的模拟
💻 JAVA
字号:
package work4;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Page extends JFrame implements ActionListener{

	JLabel label1,label2,label3,label4,label5;
	JTextField text,text2,text3;
	JButton button1,button2,button3,button4,button5,button6,button7,button8,button9,button10;
	DefaultListModel model1=new DefaultListModel();		
	JList li1=new JList(model1);
	DefaultListModel model2=new DefaultListModel();		
	JList li2=new JList(model2);
	JFrame addframe,deFrame,checkframe;
	int memory,delnum,num=0,checknum,threadnum=0,delclick=0;	
	static final int size=4;
	public void actionPerformed(ActionEvent e){
		if(e.getSource()==button1){
			add_thread_frame();
		}
		if(e.getSource()==button2){
			System.exit(0);
		}
		if(e.getSource()==button3){
			String str=text.getText().trim();
			memory=Integer.parseInt(str);
			addframe.setVisible(false);
			threadnum++;
			if(delclick==0){
			table_frame();
			memory_frame();	
			}
			else {
				add_after_click();
			}
			
		}
		if(e.getSource()==button4){
			addframe.setVisible(false);
		}
		if(e.getSource()==button5){
			destroy_thread_frame();
		}
		if(e.getSource()==button6){
			String str=text2.getText().trim();
			delnum=Integer.parseInt(str);
			deFrame.setVisible(false);
			delclick++;
			destroy_thread();
			
		}
		if(e.getSource()==button7){
			deFrame.setVisible(false);
		}
		if(e.getSource()==button8){
					
			check_frame();
		}
		if(e.getSource()==button9){
			String str=text3.getText().trim();
			checknum=Integer.parseInt(str);
			checkframe.setVisible(false);
			check();
		}
		if(e.getSource()==button10){
			
			checkframe.setVisible(false);
		}
		
	}
	public void memory_frame(){
		int boxnum=memory/size;
		int left=memory%size;
		for(int i=num;i<=boxnum+num-1;i++){
			String box=i+"号被装入"+"进程"+(threadnum-1)+"的"+"  4K";
			model2.addElement(box);
		}
		if(left>0){
		model2.addElement(num+boxnum+"号被装入"+"进程"+(threadnum-1)+"的  "+left+"K");		
		}
		num=num+boxnum+1;
	}
	public void table_frame(){
		int boxnum=memory/size;
		int left=memory%size;
		if(left>0){boxnum=boxnum+1;}
		for(int j=0;j<boxnum;j++){
			model1.addElement("进程"+(threadnum-1)+"页号"+j+"对应内存的地址为"+(num+j));
		}
	}
	public void destroy_thread(){
		for(int k=0;k<model1.getSize();k++){
			String str1=model1.getElementAt(k).toString();
			int i1=str1.indexOf("程");
			String searchnum1=str1.substring(i1+1,i1+2);
			int selectnum1=Integer.parseInt(searchnum1);
			if(delnum==selectnum1){					
					model1.removeElementAt(k);
					k--;
				}			
			}	
		
		for(int j=0;j<model2.getSize();j++){
			String str2=model2.getElementAt(j).toString();
			int i2=str2.indexOf("程");
			String searchnum2=str2.substring(i2+1,i2+2);
			int selectnum2=Integer.parseInt(searchnum2);
			if(delnum==selectnum2){					
					model2.setElementAt(j+"号空闲",j);
					
				}			
			}	
		
	}
	public void add_after_click(){
		int boxnum=memory/size;
		int left=memory%size;
		
		int k=0,i=0;
		for(int j=0;j<model2.getSize();j++){
			String str3=model2.getElementAt(j).toString();
			int i3=str3.indexOf("号");
			String searchnum3=str3.substring(i3+1,i3+3);
			if(searchnum3.equals("空闲")){
				k++;
			  }
		}
		for(int j=0;j<model2.getSize();j++){
			String str3=model2.getElementAt(j).toString();
			int i3=str3.indexOf("号");
			String searchnum3=str3.substring(i3+1,i3+3);
			
			if(memory<=4*k){
				
				if(searchnum3.equals("空闲"))
				{					
					if(i<boxnum){
            	       model2.setElementAt(j+"号被装入"+"进程"+(threadnum-1)+"的"+"  4K",j);            	    
                       i++;
				      }
					if((memory-4*i)<4&&(memory-4*i)>0) {
					model2.setElementAt(j+1+"号被装入"+"进程"+(threadnum-1)+"的  "+left+"K",j+1);
					   i++;
				    }
				}
			}
			else if(memory>4*k){
				if(searchnum3.equals("空闲")){
					model2.setElementAt(j+"号被装入"+"进程"+(threadnum-1)+"的"+"  4K",j);
				}
				
		   }	
							
		}
		if (memory>4*k){
			int  memoryleft=memory-4*k;
			int  leftnum=memoryleft/size;
			int  leftsize=memoryleft%size;
			int  model2Length=model2.getSize();
			for(int i2=0;i2<leftnum;i2++){
				String box1=(model2Length+i2)+"号被装入"+"进程"+(threadnum-1)+"的"+"  4K";
				model2.addElement(box1);
			}
			if(leftsize>0){
				String str4=(model2Length+leftnum)+"号被装入"+"进程"+(threadnum-1)+"的  "	+leftsize+"K";
			    model2.addElement(str4);
		   }
		}
		int address=0;
		int j1=0;
		if(left>0){boxnum=boxnum+1;}
		for(int j=0;j<model2.getSize();j++){
			String str3=model2.getElementAt(j).toString();
			int i2=str3.indexOf("程");
			String searchnum2=str3.substring(i2+1,i2+2);
			int selectnum2=Integer.parseInt(searchnum2);
			int i3=str3.indexOf("号");
			String str4=str3.substring(0,i3);
			int i4=Integer.parseInt(str4);
			if(selectnum2==threadnum-1){
				address=i4;
				if(j1<boxnum){
					
					model1.addElement("进程"+(threadnum-1)+"页号"+j1+"对应内存的地址为"+address);
					j1++;
				}
				
			}
			
		}
		
			
	}
	public void check(){
		String str="";
		for(int k=0;k<model1.getSize();k++){
	    	
		  String str1=model1.getElementAt(k).toString();
		  int i1=str1.indexOf("程");
		  String  str2=str1.substring(i1+1,i1+2);
	      int findnum=Integer.parseInt(str2);
		  int i2=str1.indexOf("为");
		  String str3=str1.substring(i2+1);
		  int addressnum=Integer.parseInt(str3);
		  		  
		  if(findnum==checknum){
			      str=str+addressnum+" ";				  					 
				     
			  }	  
		}
		JOptionPane.showMessageDialog(null,checknum+"号作业"+"对应的地址是:"+str+"");	
	}
	
	public Page(){
		super("实验二:简单分页的模拟");
		setSize(800,700);
    	setLayout(null);
        setLocation(240,50);
        label1=new JLabel("页表分配情况");
        add(label1);
        label1.setBounds(60,50,250,50);
        li1.setVisibleRowCount(6);li1.setFixedCellWidth(200);
		JScrollPane panel1=new JScrollPane(li1);
		add(panel1);
		panel1.setBounds(60,120,350,400);
        label2=new JLabel("主存分配情况");
        add(label2);
        label2.setBounds(450,50,200,50);
        li2.setVisibleRowCount(6);li1.setFixedCellWidth(100);
		JScrollPane panel2=new JScrollPane(li2);
		add(panel2);
		panel2.setBounds(450,120,200,400);
        button1=new JButton("添加作业");
        add(button1);
        button1.setBounds(100,550,100,80);
        button2=new JButton("退出");
        add(button2);
        button2.setBounds(450,550,100,80);
        button5=new JButton("撤销作业");
		add(button5);
		button5.setBounds(275,550,100,80);	
		button8=new JButton("查询");
		add(button8);
		button8.setBounds(625,550,100,80);
        button1.addActionListener(this);
		button2.addActionListener(this);
		button5.addActionListener(this);
		button8.addActionListener(this);
        
		
	}
	public void add_thread_frame(){
		addframe=new JFrame("");
		addframe.setSize(300,200);
		addframe.setLayout(null);
		addframe.setLocation(370,330);
		addframe.setResizable(false);
		label3=new JLabel("请输入作业的大小");
		addframe.add(label3);
		label3.setBounds(20,20,180,25);
		text=new JTextField();
		addframe.add(text);
		text.setBounds(150,20,80,20);
		button3=new JButton("确定");
		addframe.add(button3);
		button3.setBounds(50,70,80,30);
		button3.setCursor(new Cursor(12));
		button4=new JButton("取消");
		addframe.add(button4);
		button4.setBounds(160,70,80,30);
		button4.setCursor(new Cursor(12));
		button3.addActionListener(this);
		button4.addActionListener(this);
		addframe.setVisible(true);
	}
	public void destroy_thread_frame(){
		deFrame=new JFrame("撤销进程");
		deFrame.setSize(300,150);
		deFrame.setLayout(null);
		deFrame.setLocation(370,330);
		deFrame.setResizable(false);
		label4=new JLabel("请输入想要撤消的作业号");
		deFrame.add(label4);
		label4.setBounds(20,20,180,25);
		text2=new JTextField();		
		deFrame.add(text2);
		text2.setBounds(200,20,30,20);
		button6=new JButton("确定");
		deFrame.add(button6);
		button6.setBounds(50,70,80,30);
		button6.setCursor(new Cursor(12));
		button7=new JButton("取消");
		deFrame.add(button7);
		button7.setBounds(160,70,80,30);
		button7.setCursor(new Cursor(12));
		button6.addActionListener(this);
		button7.addActionListener(this);
		deFrame.setVisible(true);
	}
	public void check_frame(){
		checkframe=new JFrame("撤销进程");
		checkframe.setSize(300,150);
		checkframe.setLayout(null);
		checkframe.setLocation(370,330);
		checkframe.setResizable(false);
		label5=new JLabel("请输入想要查询的作业号");
		checkframe.add(label5);
		label5.setBounds(20,20,180,25);
		text3=new JTextField();		
		checkframe.add(text3);
		text3.setBounds(200,20,30,20);
		button9=new JButton("确定");
		checkframe.add(button9);
		button9.setBounds(50,70,80,30);
		button9.setCursor(new Cursor(12));
		button10=new JButton("取消");
		checkframe.add(button10);
		button10.setBounds(160,70,80,30);
		button10.setCursor(new Cursor(12));
		button9.addActionListener(this);
		button10.addActionListener(this);
		checkframe.setVisible(true);
	}
	public static void main(String args[]){
		Page pages=new Page();
		pages.show();
		pages.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

⌨️ 快捷键说明

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