Basic Framework
- 进程调度算法
进程调度采用随机算法,这与进程输出信息的随机性相一致。两个请求输出的用户进程的调度概率各为45%,SP00LING输出进程为10%,这由随机数发生器产生的随机数来模拟决定。
进程状态
进程有5种状态:0为可执行态;
1为等待状态1,表示输出井满,请求输出的用户进程等待;
2为等待状态2,表示请求输出井空,SP00LING输出进程等待;
3为等待状态3,表示请求输出井满,请求输出的用户进程等待;
4为结束态,进程执行完成。进程基本状态有3种,分别为可执行、等待和结束。可执行态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1、等待状态2和等待状态3。
状态变化的条件为:
①进程执行完成时,置为“结束”态。
②服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。
③SP00LING进程在进行输出时,若输出井空,则进入“等待状态2”。
④SP00LING进程输出一个信息块后,应立即释放该信息块所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。
⑤服务程序在输出信息到输出井并形成输出请求信息块后,若SP00LING进程处于等待态,则将其置为“可执行状态”。
⑥当用户进程申请请求输出块时,若没有可用请求块时,调用进程进人“等待状态3”。
PCB.java
package Spooling;
public class PCB {
int ID;//进程标识数
int status;//进程状态
int outputFileCount;//要输出的文件数
int outPut_X;//进程输出时的临时变量
}
requireBlock.java
package Spooling;
public class requireBlock {
int requireName; //请求进程名
int length;//本次输出信息长度
int outputHeadAddress;//信息在输出井的首地址
}
Manage.java
package Spooling;
import java.util.Random;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Manage extends Thread{
PCB pcb[];
requireBlock requireblock[];
int buffer[][];
int outputBufferSpace[];//可使用的输出井buffer空间
int outputBufferPointer[][]; //输出井buffer空闲和满指针
int requireblockNumber; //requireblock的剩余数量
int requireblockOutputPointer; //要输出的第一个reqblock指针
int requireblockFreePointer; //第一个空闲reqblock指针
double random; //用于调度三个进程的控制随机数
int output1; //用户进程1已生成的文件数
int output2; //用户进程2已生成的文件数
int output_1; //用户进程1已输出的文件数
int output_2; //用户进程2已输出的文件数
int x; //随机生成的数据0~9
int i; //临时控制变量
Random x1; //辅助生成随机数据x:0~9
Spooling spooling;
public Manage( Spooling spooling ){
//对各进程的数据初始化
output1 = 0;
output2 = 0;
output_1 = 0;
output_2 = 0;
pcb = new PCB[4];
requireblock = new requireBlock[10];
buffer = new int[3][100];
outputBufferSpace = new int[3];
outputBufferSpace[1] = 100;
outputBufferSpace[2] = 100;
outputBufferPointer = new int[3][4];
outputBufferPointer[1][0] = 0;
outputBufferPointer[2][0] = 0;
requireblockNumber = 10;
requireblockOutputPointer = 0;
requireblockFreePointer = 0;
x1 = new Random();
for( i = 0; i < 4; i++ ){
pcb[ i ] = new PCB();
}
for( i =