資源簡介
在可變分區管理方式下,采用最先適應算法實現主存空間的分配和回收。
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
評論
共有 條評論