/* David P. Turnbull ITCS3146 group project this class sets up a First Fit memory scheme */ import java.lang.reflect.*; //this section sets up the Car class class FirstFit implements baseAlgorithm { //this section sets up the private elements of the class private int jobId, jobSize, jobTime, startLoc, endLoc, blkSize, memSize = memoryManagement.MEMORYSIZE, active, noJobs=0, s1=0, compMemTest=0, jobLoaded=0, tableEntries=1; private int[] tempVal = new int[6]; private int[][] memTable = new int[memSize+2][6]; private int[] memory = new int[memSize]; private Job[] jobArray = new Job[memoryManagement.JOBAMOUNT+10]; //this is a no argument constructor public FirstFit() { memTable[0][0]=0; //job number memTable[0][1]=0; //job size memTable[0][2]=0; //start location in memory memTable[0][3]=memSize-1; //end location in memory memTable[0][4]=memSize; //mem blk size size memTable[0][5]=-1; //status, 0=not active, 1=active, -1=special } //this method sets the job up public void allocate(int ID, int size, int jTime) { //synchronized(memTable){ jobId = ID; jobSize = size; jobTime = jTime; noJobs++; s1=0; //Bradlee's code *********************************************************************************** try { Method deallocateMethod = this.getClass().getMethod("deallocate", new Class[]{int.class, int.class}); //checks to see if the job will fit in memory if(jobSize>memSize) { System.out.println("\n\n*********************************************************"+ " THIS JOB IS TOO LARGE TO FIT INTO MEMORY"+ "*********************************************************"); System.exit(0); } //this will loop until job is loaded into memory do { //this section looks for a place to put the new job do { if(memTable[s1][5]==-1 && memTable[s1][4]>=jobSize && memTable[s1][3]==memSize-1) { //runs only for the first job if(noJobs==1) { synchronized(memTable){ memTable[s1][0] = jobId; memTable[s1][1] = jobSize; memTable[s1][2] = 0; memTable[s1][3] = jobSize-1; memTable[s1][4] = memTable[0][3]-memTable[0][2]+1; memTable[s1][5] = 1; Job newJob = new Job(jobTime, jobId, jobSize, memTable[s1][2], deallocateMethod, this); fillMemory(jobId, jobSize, memTable[s1][2]); jobArray[jobId - 1] = newJob; newJob.start(); memTable[s1+1][0] = 0; memTable[s1+1][1] = 0; memTable[s1+1][2] = memTable[s1][3]+1; memTable[s1+1][3] = memSize-1; memTable[s1+1][4] = memSize-memTable[s1+1][2]; memTable[s1+1][5] = -1; tableEntries++; jobLoaded=1; s1=memSize*2; } } //runs after the first job and if the only available slot is at the end of memory else { synchronized(memTable){ memTable[s1][0] = jobId; memTable[s1][1] = jobSize; memTable[s1][2] = memTable[s1-1][3]+1; memTable[s1][3] = jobSize+memTable[s1][2]-1; memTable[s1][4] = memTable[s1][3]-memTable[s1][2]+1; memTable[s1][5] = 1; Job newJob = new Job(jobTime, jobId, jobSize, memTable[s1][2], deallocateMethod, this); fillMemory(jobId, jobSize, memTable[s1][2]); jobArray[jobId - 1] = newJob; newJob.start(); memTable[s1+1][0] = 0; memTable[s1+1][1] = 0; memTable[s1+1][2] = memTable[s1][3]+1; memTable[s1+1][3] = memSize-1; memTable[s1+1][4] = memSize-memTable[s1+1][2]; memTable[s1+1][5] = -1; tableEntries++; jobLoaded=1; s1=memSize*2; } } } //checks for first available free block that has been deallocated else if(memTable[s1][4]>=jobSize && memTable[s1][5]==0) { synchronized(memTable){ memTable[s1][0] = jobId; memTable[s1][1] = jobSize; memTable[s1][5] = 1; Job newJob = new Job(jobTime, jobId, jobSize, memTable[s1][2], deallocateMethod, this); fillMemory(jobId, jobSize, memTable[s1][2]); jobArray[jobId - 1] = newJob; newJob.start(); jobLoaded=1; s1=memSize*2; } } else { s1++; } }while(s1