资源简介
在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。
1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;
表目内容:起址、长度、状态(未分/空表目)
2、结合实验一,PCB增加为:
{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}
3、采用最先适应算法分配主存空间;
4、进程完成后,回收主存,并与相邻空闲分区合并。
代码片段和文件信息
/**
* @(#)Main.java
*
*
* @author 杨启帆
* @version 1.00 2010/11/16
*/
package os;
import java.util.Vector;
import javax.swing.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
import javax.swing.table.*;
public class Mainframe1 {
Jframe jf;
JPanel jp;
//注册组件
JLabel nameLabreseverLabreadyLabrunLabruntableLabtableLabrunCPULabfinishLabpcbNameLabruntimeLabpriorityLabmemoryLabnoteLab;
JButton setJbinputJbexitJb;
JList reseverJLreadyJLrunJLrunCPUJLfinishJL;
JScrollPane reseverJSPreadyJSPrunJSPrunCPUJSPfinishJSP;
DefaultListModel reseverModelreadyModelrunModelrunCPUModelfinishModelmemoryModel;
JTextField pcbTf;
JComboBox runtimeJCBpriorityJCBmemoryJCB;
JTable runtabletable;
//用以实现table的方法
DefaultTableModel runtableModeltableModel;
//i用作记录当前在runModel中的进程数
int i = 0;
//y用作记录当前runModel中优先权最高的进程
int y = 0;
//用作记录创建进程的编号
int count = 0;
//用作记录未分分区表内的行数
int u = 0;
//记录进程的内存长度
int size = 0;
//获取当前未分分区表的起始地址
int address = 0;
//获取当前未分分区表的长度
int Long = 0;
//用作记录在未分分区表中的起始地址的数组
int a[] = new int[10];
//用作记录在未分分区表中的长度的数组
int b[] = new int[10];
//记录分配点
int Dpoint = 0;
//记录新的未分分区表的起址
int tablestart = 0;
//记录新的未分分区表的长度
int tablesize = 0;
//记录cpu运行队列中的进程起址
int start = 0;
PCB pcb = new PCB();
String c = String.valueOf(count);
//启动线程
Thread listen = new Listen();
Thread listen1 = new Listen1();
String[] Names= {“起址““长度““状态“};
String[][] data = new String[0][3];
String[][] data1 = new String[0][3];
//构造函数
public Mainframe1()
{
jf = new Jframe(“主存储器空间的分配和回收“);
jp = new JPanel();
Container c = jf.getContentPane();
pcbTf = new JTextField(20);
reseverModel=new DefaultListModel();
readyModel =new DefaultListModel();
runModel=new DefaultListModel();
runCPUModel = new DefaultListModel();
finishModel=new DefaultListModel();
//创建一个table的Model的属性
runtableModel = new DefaultTableModel(dataNames);
tableModel = new DefaultTableModel(data1Names);
//创建组建
nameLab = new JLabel(“主存储器空间的分配和回收“);
reseverLab = new JLabel(“后备队列“);
readyLab = new JLabel(“就绪队列“);
runLab = new JLabel(“内存中进程“);
runtableLab = new JLabel(“CPU运行进程内存分配“);
tableLab = new JLabel(“未分分区表“);
runCPULab = new JLabel(“CPU运行进程“);
finishLab = new JLabel(“完成队列“);
pcbNameLab = new JLabel(“PCB名:“);
runtimeLab = new JLabel(“运行时间:“);
priorityLab = new JLabel(“优先权:“);
memoryLab = new JLabel(“内存大小:“);
noteLab = new JLabel(“注释:PCB名运行时间优先权内存大小起址地址“);
setJb = new JButton(“创建“);
inputJb = new JButton(“增加“);
exitJb = new JButton(“退出“);
//给runtable实例化
runtable = new JTable(runtableMode
- 上一篇:java基于udp的聊天服务端
- 下一篇:JSP API chm
评论
共有 条评论