package schedularSimulator; import java.io.File; import java.io.FileNotFoundException; import java.util.*; public class Run { static int quantum = 0; static final int BUFSIZ = 4096; static int task_count; /* 標準入力から与えられたタスクのデータを読み込み、 task のqueue を作成して、 run で実行する。 # type[n/p] clock taskname task-size priority [period] n 0 a 110 5 n non-periodic p periodic */ public static void main(String args[]) throws FileNotFoundException { Run self = new Run(); self.task_init(args); } public void task_init(String args[]) throws FileNotFoundException { int time; String name; int length; int priority; LinkedList<Task> task_list = new LinkedList<Task>() ; Task q; char type; File from = new File(args[0]); Scanner scanner = new Scanner(from); scanner.useDelimiter("\\s+"); task_count = 0; while(scanner.hasNext()) { try { char top = scanner.next().charAt(0); if (top=='#'||top!='n') { scanner.nextLine(); continue; } type = 'n'; // scanner.next().charAt(0); System.out.println("type= "+type); time = scanner.nextInt(); // System.out.println("time= "+time); name = scanner.next(); // System.out.println("name= "+name); length = scanner.nextInt(); // System.out.println("length= "+length); priority = scanner.nextInt(); // System.out.println("priority= "+priority); q = new Task(name, length, priority); q.type = type; task_list.add(q); task_count++; } catch ( java.util.InputMismatchException e) { System.out.print("task list syntax error on "); System.out.println( scanner.nextLine()); continue; } scanner.nextLine(); } run(task_list); Task.report(); } void run(LinkedList<Task> task_list) { // fifo(task_list); sjf(task_list); } /* First in First Out で実行する */ void fifo(LinkedList<Task> task_list) { while (! task_list.isEmpty()) { Task q = task_list.poll(); q.exec_task(quantum,task_list); } } /* task の sort 用の関数 */ class by_length implements Comparator<Task> { public int compare(Task q,Task r) { return q.length==r.length?0:q.length > r.length?1:-1; } } /* Shortest Job First で実行する */ void sjf(LinkedList<Task> task_list) { Comparator<Task> comp = new by_length(); PriorityQueue<Task> list = new PriorityQueue<Task>(1024,comp); for (Task q: task_list) { list.add(q); } while (!list.isEmpty()) { Task q = list.poll(); q.exec_task(quantum,list); } } }