From 3d022b276d197d5dd7fe538ec13c4100c7e189b2 Mon Sep 17 00:00:00 2001 From: dpturnbull Date: Mon, 12 Nov 2012 15:38:37 -0500 Subject: [PATCH] Added NextFit Algorithm --- NextFit.java | 296 ++++++++++++++++++++++++++++++++++++++++++ memoryManagement.java | 2 + 2 files changed, 298 insertions(+) create mode 100644 NextFit.java diff --git a/NextFit.java b/NextFit.java new file mode 100644 index 0000000..bff1a3d --- /dev/null +++ b/NextFit.java @@ -0,0 +1,296 @@ +/* David P. Turnbull + ITCS3146 + group project + this class sets up a First Fit memory scheme +*/ + +//this section sets up the Car class +class NextFit implements baseAlgorithm +{ + + //this section sets up the private elements of the class + private int jobId, + jobSize, + jobTime, + startLoc, + endLoc, + blkSize, + memSize = memoryManagement.memory, + active, + noJobs=0, + s1=0, + currentPosition=0, + positionToCompress=0, + loopCount, + compMemTest=0, + tableEntries=1; + private int[] tempVal = new int[6]; + private int[][] memTable = new int[memSize+2][6]; + private int[] memory = new int[memSize]; + + //this is a no argument constructor + public NextFit() + { + 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) + { + jobId = ID; + jobSize = size; + jobTime = jTime; + noJobs++; + s1=0; + loopCount=0; + + //checks to see if the job will fit in memory + if(jobSize>memSize) + { + System.out.println("\n\n*********************************************************"+ + " THIS JOB IS TO LARGE TO FIT INTO MEMORY"+ + "*********************************************************"); + System.exit(0); + } + + //this section looks for a place to put the new job + do + { + if(memTable[currentPosition][5]==-1 && memTable[currentPosition][4]>=jobSize && + memTable[currentPosition][3]==memSize-1) + { + //runs only for the first job + if(noJobs==1) + { + memTable[currentPosition][0] = jobId; + memTable[currentPosition][1] = jobSize; + memTable[currentPosition][2] = 0; + memTable[currentPosition][3] = jobSize-1; + memTable[currentPosition][4] = memTable[0][3]-memTable[0][2]+1; + memTable[currentPosition][5] = 1; + fillMemory(jobId, jobSize, memTable[currentPosition][2]); + memTable[currentPosition+1][0] = 0; + memTable[currentPosition+1][1] = 0; + memTable[currentPosition+1][2] = memTable[currentPosition][3]+1; + memTable[currentPosition+1][3] = memSize-1; + memTable[currentPosition+1][4] = memSize-memTable[currentPosition+1][2]; + memTable[currentPosition+1][5] = -1; + currentPosition++; + positionToCompress=currentPosition; + tableEntries++; + s1=memSize*2; + } + //runs after the first job and if the only available slot is at the end of memory + else + { + memTable[currentPosition][0] = jobId; + memTable[currentPosition][1] = jobSize; + memTable[currentPosition][2] = memTable[currentPosition-1][3]+1; + memTable[currentPosition][3] = jobSize+memTable[currentPosition][2]-1; + memTable[currentPosition][4] = memTable[currentPosition][3]-memTable[currentPosition][2]+1; + memTable[currentPosition][5] = 1; + fillMemory(jobId, jobSize, memTable[currentPosition][2]); + memTable[currentPosition+1][0] = 0; + memTable[currentPosition+1][1] = 0; + memTable[currentPosition+1][2] = memTable[currentPosition][3]+1; + memTable[currentPosition+1][3] = memSize-1; + memTable[currentPosition+1][4] = memSize-memTable[currentPosition+1][2]; + memTable[currentPosition+1][5] = -1; + tableEntries++; + currentPosition++; + positionToCompress=currentPosition; + s1=memSize*2; + } + } + //checks for first available free block that has been deallocated + else if(memTable[currentPosition][4]>=jobSize && memTable[currentPosition][5]==0) + { + memTable[currentPosition][0] = jobId; + memTable[currentPosition][1] = jobSize; + memTable[currentPosition][5] = 1; + fillMemory(jobId, jobSize, memTable[currentPosition][2]); + currentPosition++; + positionToCompress=currentPosition; + s1=memSize*2; + } + else if(currentPosition==tableEntries-1) + { + currentPosition=0; + s1++; + } + else + { + s1++; + currentPosition++; + } + + }while(s1