操作系统---简单页式管理「Java」

本文介绍了如何设计一个内存分配模拟程序,采用简单页式管理,处理6个等待调度的作业,内存总量32KB,页帧大小1KB。程序需要进行内存分配和回收,并打印内存分配表。文章包含代码实现及效果演示。

 

题目描述:

设计一个内存分配模拟程序。假定在计算机系统作业后备队列中有六个等待调度运行的作业,参与分配的内存大小为32KB,采用简单页式管理,每个页帧的大小为1KB。根据要求进行内存的分配和回收。要求打印内存分配表。有关作业的组织和作业有关参数的设置请自行设计,要大致符合实际情况。

效果演示图:

1.测试数据

作业信息
作业序号作业大小作业完成所需时间使用何种颜色表示该作业
         1154

黄色

         213

红色 

         322

绿色

         4181

橙色

         5102

蓝色

         6113红色

                                                             

2.效果图:(传不了.mp4,暴风哭泣)

 代码:

Block类:

       一共有32个页帧,一个格子代表一个页帧  

package PageStorageManagement3;

import java.awt.Color;

import javax.swing.Spring;

public class Block {
//格子编号
public int number;
//初始颜色。白色
public Color  c=Color.white;
//初始状态。空闲
public String stateblock="free";
}

 JobMessage类:

            每个作业的信息

package PageStorageManagement3;

import java.awt.Color;

import javax.swing.Spring;

public class JobMessage {
public JobMessage(int id2, int saneed, int i,int coc) {
		this.id=id2;
		size=saneed;
		this.needtime=i;
			if(coc==1)  color=Color.YELLOW;
			if(coc==2)  color=Color.red;
			if(coc==3)  color=Color.green;
			if(coc==4)  color=Color.orange;
			if(coc==5)  color=Color.BLUE;
			if(coc==6)  color=Color.decode("#9370DB");
	}
public  int id;
public int needtime;//所需时间
public int  size;//大小,同时包括被划分多少块
public String state="wait";
public Color color;

}

 

 PageStorageManagement类:

            界面显示

package PageStorageManagement3;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PageStorageManagement extends JFrame {
	public static void main(String[] args) {
		PageStorageManagement p = new PageStorageManagement();
		p.show();
	}
	private int num;
	private ArrayList<JobMessage> list = new ArrayList<JobMessage>();
	private Graphics gr;
	private int size;
	private Color c=Color.white;
	private Color color;
    private int x1, y1, x2, y2;
//画最初32格子
	public void paint(Graphics gr,int start,int end) {
		super.paint(gr);
		x1 = 0;
		y1 = 0;
		x2 = 0;
		y2 = 0;
		size=100;
		gr.setColor(Color.BLACK);
		gr.drawRect(0, 0, 800, 400);
		// 4*8=32个格子 四行8列 一个格子100*100, 长100*8=800 宽4*100=400 行line
		for (int l = 1; l <= 3; ++l) {
			gr.drawLine(x1, y1 + 100 * l, 800, y2 + 100 * l);
		}
		for(int i=0;i<8;++i) {
			for(int j=0;j<4;++j) {
				gr.setColor(Color.white);
				gr.fillRect(size*i, size*j,size, size);
			}
		}
	}
	
//界面
	public void show() {
		list.add(new JobMessage(1, 15,4,1));
		list.add(new JobMessage(2, 1,3,2));
		list.add(new JobMessage(3, 2,2,3));
		list.add(new JobMessage(4, 18,1,4));
		list.add(new JobMessage(5, 10,2,5));
		list.add(new JobMessage(6, 11,3,6));
		JFrame jf = new JFrame();
		jf.setTitle(" 页式存储管理 ");
		jf.setSize(800, 410);
		jf.setDefaultCloseOperation(3);
		jf.setLocationRelativeTo(null);
		jf.getContentPane().setBackground(Color.gray);
		this.setPreferredSize(new Dimension(800,400));
		JPanel jp=new JPanel();
		jp.setPreferredSize(new Dimension(800,400));
		jp.setBackground(Color.gray);
		jf.add(jp, BorderLayout.CENTER);
		jf.setVisible(true);
		gr = jp.getGraphics();
		paint(gr,1,32);
		ProcessSchedul pro=new ProcessSchedul(this,gr,list,num,this);
	}
}

 

package PageStorageManagement3;

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class ProcessSchedul extends Thread {

	private PageStorageManagement page;
	private Graphics gr;
	private ArrayList<JobMessage> list;
	private ArrayList<JobMessage> use;
	private int count;
	private boolean flag = true;
	private ArrayList<JobMessage> finish = new ArrayList<JobMessage>();
	public ArrayList<Block> block = new ArrayList<Block>();
	private int num=6;
	private int size = 100;
	public int i;
	public Block j;
	private int a = 0;
	private int busy;
	private PageStorageManagement jf;
    //构造函数传参
	public ProcessSchedul(PageStorageManagement pageStorageManagement, Graphics gr, ArrayList<JobMessage> list,
			int num, PageStorageManagement pageStorageManagement2) {
		this.jf = pageStorageManagement;
		this.gr = gr;
		this.list = list;
		use = list;
		this.num = num;
		num=6;
        //页帧初始化
		for (i = 0; i < 32; i++) {
			Block b = new Block();
			b.stateblock = "free";
			block.add(b);
		}
        //线程启动
		run();
	}

	public int g = 0;
	public void run() {
		while (flag) {
			for(int h=0;h<finish.size();++h) {
				for(int tt=0;tt<block.size();++tt) {
					if(block.get(tt).number==finish.get(h).id) {
					block.get(tt).stateblock="free";
					block.get(tt).c=Color.white;
					block.get(tt).number=0;
			}
				}
				}
			System.out.println("finish  大小"+finish.size());
					for( g=0;g<use.size();++g) {
						if(!use.get(g).state.equals("finish")&&use.get(g).needtime>0) {
							if (use.get(g).size<=free()&&use.get(g).state.equals("wait")) {
								use.get(g).needtime--;
								draw(use.get(g).size, use.get(g).color, use.get(g).id);
								use.get(g).state="run";
							}
							else if(use.get(g).state.equals("run"))
							{
								use.get(g).needtime--;
							}
							else if(use.get(g).size>free()&&use.get(g).state.equals("wait"))
							{
								break;
							}
							}
							else if(!use.get(g).state.equals("finish")&&use.get(g).needtime<=0) {
							finish.add(use.get(g));
							use.get(g).state = "finish";
						}
							
					
					}
						
				if (finish.size() ==6) {
					flag = false;
					System.out.println("进程全部执行");
					JOptionPane.showMessageDialog(jf,"进程全部执行");
				}
				for(int h=0;h<use.size();++h) {
					System.out.println("use"+(h+1)+"的时间为"+use.get(h).needtime);
				}
		
				for(int k=0;k<use.size();++k) {
					System.out.println(use.get(k).id+"状态"+use.get(k).state);
					}
	

			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
    //返回空闲页帧数
	public int free() {
		
		int free = 0;
		for (int h = 0; h < 32; h++) {
			if (block.get(h).stateblock.equals("free")) {
				free++;
			}
		}
		System.out.println("free=="+free);
		return free;
	}

	private void draw(int size, Color color, int n) {
		System.out.println("draw big color ");
		System.out.println("大小=="+size);
		for (int l = 1; l <= 3; ++l) {
			gr.drawLine(0,  100 * l, 800, 100 * l);
		}
		int finishgezi=0;
		for (int h = 0; h < 32; h++) {
			if(finishgezi<size) {
			if (block.get(h).stateblock.equals("free")) {
				block.get(h).stateblock = "busy";
				block.get(h).c = color;
				block.get(h).number = n;
			finishgezi++;
			}
			}
		}
		for (i = 0; i < block.size(); i++) {
			System.out.println("block"+i+"状态"+block.get(i).stateblock+"      bianhuan"+block.get(i).number);
			j = block.get(i);
			gr.setColor(j.c);
				gr.fillRect((int)(100 * (i - 8 *((int) (i / 8)))), (int)(100 *((int) (i / 8))), 100, 100);
				gr.setColor(color.black);
				gr.drawRect((int)(100 * (i - 8 *(int) (i / 8))), (int)(100 *(int) (i / 8)), 100, 100);
				}
		    //画格子的规律
			// 0-7 x=i*size y=0
			// s8-15 x=(i-8)*size y=100*1=100*(i/8)
			// 16-23 x=size*(i-8*(i/8)) y=100*(i/8)
		}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值