java实现SP00LING假脱机输入输出技术模拟

本文介绍了使用Java实现SP00LING假脱机输入输出技术的基本框架,包括进程调度算法和进程状态管理。通过PCB.java、requireBlock.java、Manage.java和Spooling.java等文件详细阐述了系统运行效果和源码下载。
摘要由CSDN通过智能技术生成

234.jpg

Basic Framework

缓冲技术.png
屏幕快照 2017-12-22 12.09.12.png

  • 进程调度算法

进程调度采用随机算法,这与进程输出信息的随机性相一致。两个请求输出的用户进程的调度概率各为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 = 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值