资源简介

操作系统课设做的动态分区分配算法。第一次上传资源,做的有些乱,献丑了,其中循环首次循环和最佳、最坏分配算法其实只是从首次适应算法改了一点东西。 补充几句,是JAVA做的,分配和回收算法都有,使用数组实现

资源截图

代码片段和文件信息

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

import javax.swing.*;

/*
 * 最佳适应算法
 * 算法概述:每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业
 * 实现方法:我们决定每次分配先把空闲分区按从小到大的顺序排列,然后将第一个匹配分区分配给作业
 * 
 */

public class BestFit extends Jframe implements MouseListener {
JTextPane t = new JTextPane();
JPanel p = new JPanel();

// 把空闲分区表按从小到大的顺序排列的方法

public BestFit(int[] ai mem[] bi) {

// 为避免改变传递进来的数组值,影响操作,新建两个相同的数组
int la = ai.length lb = bi.length;
int[] a = new int[la];
mem[] b = new mem[lb];
for (int i = 0; i < la; i++) {
a[i] = ai[i];
}
for (int i = 0; i < lb; i++) {
b[i] = bi[i];
}
add.printJ(a t);
add.insert2(“ 内存分区初始状态:“ + “\n“ t);
Test.print(b t);

mem[] f = mem.lian1(b);
mem.px1(f);
add.printF(f t);
int freeLength = f.length;

// 以下为界面代码
// 界面主体仅为一个TextArea,内容为程序运行时所输出
JScrollPane sp = new JScrollPane(t);

p.setLayout(new GridLayout(1 1));
p.add(sp);
t.addMouseListener(this);
t.setBackground(Color.yellow);
add(p);
setSize(350 250);
setVisible(true);
setLocation(60 40);
settitle(“最佳适应算法“);

// 从这里开始是算法的主要代码
// notIndex用于记录无法找到匹配分区的作业数,数组sav的长度与a相同,用于存储无法分配的作业
int notIndex = 0;
int[] sav = new int[a.length];

if (freeLength == 0) {// 若无空闲分区则不进行后面的运算
add.insert(“内存中无空闲分区“ + “\n“ t);
} else {
// 将各个作业与空闲分区比较
for (int i = 0; i < a.length; i++) {
add.insert(“\n“ t);
// 定义n用于记录不符合的次数
int n = 0;
add.insert(“ - - - - - - - - - - - - - - - - - - - - - - - - -“
+ “\n“ t);
// 此循环将本次的作业与空闲分区比较
for (int j = 0; j < f.length; j++) {
add.insert(“ [“ + a[i] + “] 与分区号为“ + f[j].m1 + “的空闲分区 [“
+ f[j].m2 + “] 比较,“ t);
if (a[i] <= f[j].m2) {// 假如作业小于空闲分区,则可分配
add.insert(“符合,分配“ + “\n“ t);
// 数组对应元素减去作业大小,即表示分配后的大小

int x = f[j].m1 - 1;
mem[] nb = new mem[b.length + 1];
for (int k = 0; k < x; k++) {
nb[k] = b[k];
}
int size = b[x].m2 - a[i];
nb[x] = b[x];
nb[x].m2 = a[i];
nb[x].m4 = 1;
nb[x + 1] = new mem(nb[x].m1 + 1 size nb[x].m2
+ nb[x].m3 0);
for (int k = x + 2; k < nb.length; k++) {
nb[k] = b[k - 1];
nb[k].m1 += 1;
}
b = new mem[nb.length];
for (int k = 0; k < nb.length; k++) {
b[k] = nb[k];
}

Test.print(b t);
f = mem.lian1(b);
mem.px1(f);
add.printF(f t);
freeLength = f.length;

// 得到分配,结束此作业比较循环
break;
} else {
n++;// 每不符一次把n加1
add.insert(“不符,往下找“ + “\n“ t);
}

}
if (n == freeLength) {// 假如n等于空闲数组的长度,则说明找遍空闲分区都无符合项
add.insert(“\n“ t);
add.insert2(“ 未找到符合的空闲分区“ + “\n“ t);
add.insert(“\n“ t);
if ((i + 1) < a.length) {// i+1 add.insert(“ 剩下的待分配作业大小为“ + “\n“ t);
// 将a数组剩下的元素输出,即待分配的作业
for (int j = (i + 1); j < a.length; j++) {
add.insert(“ [

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        232  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\.classpath

     文件        380  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\.project

     文件       1333  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\b.gif

     文件       3694  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\add.class

     文件       4545  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\BestFit.class

     文件       4336  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\FirstFit.class

     文件       2869  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\Main_Window.class

     文件       1251  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\mem.class

     文件       5715  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\NextFit.class

     文件       6919  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\QuickFit.class

     文件       5907  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\Recycle.class

     文件       5688  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\SuanFaMain.class

     文件       2372  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\Test.class

     文件       4548  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin\WorstFit.class

     文件      28795  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\Recycle2.jpg

     文件       5061  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\BestFit.java

     文件       4351  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\FirstFit.java

     文件       2421  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\Main_Window.java

     文件       8019  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\NextFit.java

     文件       8521  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\QuickFit.java

     文件       6483  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\Recycle.java

     文件       5661  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\SuanFaMain.java

     文件       6799  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\Test.java

     文件       5067  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src\WorstFit.java

    ..A.SH.     18432  2008-06-23 09:17  存储管理——动态分区分配算法\CCGL\Thumbs.db

     文件      24013  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\tx_001.png

     文件      19644  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\tx_002.png

     目录          0  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\bin

     目录          0  2008-06-23 09:16  存储管理——动态分区分配算法\CCGL\src

     目录          0  2008-06-23 09:17  存储管理——动态分区分配算法\CCGL

............此处省略4个文件信息

评论

共有 条评论