/** * * Grapher is used to generate data files for graphing from a process file. * */ import java.io.*; import java.util.*; class Grapher { protected static Process[] _processes; protected static Scheduler _scheduler; public static void main ( String[] args) throws IOException{ if ( args.length != 2 ) { System.out.println( "Arguments should take the form: " + " " ); System.exit(1); } File file = new File( args[0] ); Integer runTime = -1; if ( !file.exists() ) { System.out.println( "Invalid filename." ); System.exit(1); } _processes = initProcesses( file ); System.out.print("Running Start-End Scheduler... "); _scheduler = new StartEndScheduler( _processes, new Integer(args[1]) ); _scheduler.makeFiles( args[0] ); System.out.println("done."); _scheduler.reset(); System.out.print("Running Simple Linear Scheduler... "); _scheduler = new SimpleLinearScheduler( _processes, new Integer(args[1]) ); _scheduler.makeFiles( args[0] ); System.out.println("done."); _scheduler.reset(); System.out.print("Running In Order Scheduler... "); _scheduler = new InOrderScheduler( _processes, new Integer(args[1]) ); _scheduler.makeFiles( args[0] ); System.out.println("done."); _scheduler.reset(); System.out.print("Running Two Heap Scheduler... "); _scheduler = new TwoHeapScheduler( _processes, new Integer(args[1]) ); _scheduler.makeFiles( args[0] ); System.out.println("done."); } // end main // Reads information from the file and initializes the processes // accordingly protected static Process[] initProcesses( File file ) throws IOException { BufferedReader inFile = new BufferedReader( new FileReader( file ) ); String line = inFile.readLine(); if (line == null) throw new EOFException(); Process[] processes = new Process[new Integer(line)]; int pCount = 0, totalShares = 0; String[] tokens; // Read through the file and initialize each Process line = inFile.readLine(); while (line != null) { tokens = line.split("\\s"); if (tokens.length != 4 || pCount >= processes.length) throw new FileFormatException( "The file's format is incorrect." ); processes[pCount] = new Process( new Integer(tokens[0]), new Integer(tokens[1]), new Integer(tokens[2]), new Integer(tokens[3]) ); totalShares += processes[pCount].getShare(); pCount++; line = inFile.readLine(); } // Run through each Process and calculate its shareFrom1 for ( int loop = 0; loop < pCount; loop++ ) { double shareFrom1 = (double)processes[loop].getShare() / totalShares; processes[loop].setShareFrom1( shareFrom1 ); } return processes; } }