FCFS内存列表

时间:2016-11-20 08:13:34

标签: job-scheduling

嗨,我是java编程的新手。我创建了一个程序,在10个内存中分配20个块。 这是代码

import java.util.*;
import java.io.*;

public class BestFit
{
    private int[] job;//f
    private int[] memBlock;//b
    private int[] jobStatus;
    private int[] jobAT;
    static private int[] memTaken;
    static int[] ff;
    private int[] jobCC;
    private int[] ArrivalTime;
    private int[] waitingTime;
    private int[] turnaroundTime;


    public BestFit()
    {
        job = new int[]{5040,4600,1060,1950,6950,6410,2960,3070,2770,7790,5680,9150,7880,3870,7160,8880,4410,6130,6750,2560};
        memBlock = new int[]{4400,6200,9300,1000,4200,8200,4600,3700,6300,2900};
        memTaken = new int[20];
        ff = new int[20];//to store no. of block that used by particular file
        jobCC = new int[]{2,8,10,1,10,8,4,2,6,7,1,1,1,8,8,2,5,7,6,7};//cpu cycle
        ArrivalTime = new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        waitingTime = new int[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        turnaroundTime = new int[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    }
    public void BestFitAlgo()
    {
        int[] frag = new int[25];
        int i,j,nb,nf,sizeDifference;
        int lowest = 10000;
        nf = 20;
        nb = 10;
        int startTime = 1;
        int complete = 1;
        int totalTime = 1;
        int waitTime;
        int tTime = 1;
        Arrays.sort(memBlock);
        for (i=0;i<nf;i++)
        {
            if (complete != 20)
            {
                for (j=0;j<nb;j++)
                {
                    sizeDifference = memBlock[j] - job[i];
                    if (sizeDifference>=0)
                    if (lowest>sizeDifference)
                    {
                        ff[i] = j;//no of block = j
                        lowest = sizeDifference;
                        complete++;
                        System.out.println("Job: "+i+" is added to block: "+ff[i]+" and being process");
                        for (int k = 1;k<jobCC[i];k++)
                        {
                            startTime++;
                        }
                        if(startTime == jobCC[i])
                        {
                            waitingTime[i] = tTime - ArrivalTime[i];
                            turnaroundTime[i] = jobCC[i] + waitingTime[i];
                            System.out.println("Job: "+i+" is fully processed.Block: "+ff[i]+" is free");
                            System.out.println("Arrival Time: "+ArrivalTime[i]);
                            System.out.println("Start time: "+totalTime);
                            System.out.println("CPU cycle: "+jobCC[i]);
                            totalTime +=startTime;
                            startTime = 1;
                            tTime = totalTime;
                            System.out.println("Waiting time: "+waitingTime[i]);
                            System.out.println("Turnaround time: "+turnaroundTime[i]+"\n");
                        }
                    }
                }
            }
            frag[i]=lowest;
            lowest = 10000;
        }
        System.out.println("File No:\tFile_Size:\tBlock_No:\tBlock_Size:\tFragment");
        for (i=0;i<nf&&ff[i]!=0;i++)
        {
            System.out.println(i+"\t\t"+job[i]+"\t\t"+ff[i]+"\t\t"+memBlock[ff[i]]+"\t\t"+frag[i]);
        }
        System.out.println("\nTotal time: "+totalTime);
    }
    public static void main (String[] args)
    {
        BestFit b = new BestFit();
        b.BestFitAlgo();
    }

}

现在可以通过fcfs将作业分配给内存块,但现在的问题是下一个作业将无法进入内存列表(所有块),直到上一个作业完成。每次作业进入时都有9个空闲内存块。 如何使作业可以同时进入块(条件是所需的mem块未被占用并且基于到达时间)。 我知道fcfs是如何工作的,但只有1个内存块。我一整天都在谷歌搜索试图找到fcfs在多个内存块中如何工作但无济于事。 我希望任何人都可以帮助我理解它是如何工作的,也许可以暗示如何在编码中实现。 提前致谢 编辑:我改为使用我的代码,这样任何人都可以清楚地了解我的问题。

0 个答案:

没有答案