Mercurial > hg > y16 > e165725 > os > ex4.1
changeset 11:6279a5104cac
try to add chart
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 13 Jan 2017 23:00:45 +0900 |
parents | b2db777ac8dc |
children | ec108940a0da |
files | src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Cpu.java src/main/java/jp/ac/uryukyu/ie/schedularSimulator/PeriodicalRun.java src/main/java/jp/ac/uryukyu/ie/schedularSimulator/RateMonotonicEvent.java src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Run.java src/main/java/jp/ac/uryukyu/ie/schedularSimulator/SchedChart.java src/main/java/jp/ac/uryukyu/ie/schedularSimulator/SchedulerInterface.java |
diffstat | 6 files changed, 207 insertions(+), 74 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Cpu.java Fri Jan 13 00:48:33 2017 +0900 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Cpu.java Fri Jan 13 23:00:45 2017 +0900 @@ -36,6 +36,7 @@ } if (t.prev_end != 0) t.waiting += task_clock - t.prev_end; + t.cpu = cpu; // 実行時間を、シミュレータのクロックに足す task_clock += exec_time;
--- a/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/PeriodicalRun.java Fri Jan 13 00:48:33 2017 +0900 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/PeriodicalRun.java Fri Jan 13 23:00:45 2017 +0900 @@ -8,7 +8,7 @@ import java.util.Scanner; -public class PeriodicalRun { +public class PeriodicalRun implements SchedulerInterface { private PriorityQueue<Task> task_list; private PriorityQueue<EventInterface> event_list; @@ -27,6 +27,70 @@ cpu = new Cpu[1]; } + @Override + public void runScheduler(String[] args) { + try { + periodicSecheduler(args); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + public void periodicSecheduler(String[] args) throws FileNotFoundException { + String dataFile = ""; + Runnable doRun = new Runnable() { + public void run() { + run(); + } + }; + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case "--cpu": + case "-c": + if (i >= args.length) { + System.err.println("no cpu num."); + return; + } + int cpu = Integer.parseInt(args[++i]); + if (cpu <= 0) { + System.err.println("bad cpu num."); + return; + } + setNum_cpu(cpu); + break; + case "--quantum": + case "-q": + if (i >= args.length) { + System.err.println("no quantum time."); + return; + } + int quantum = Integer.parseInt(args[++i]); + if (quantum <= 0) { + System.err.println("bad quantum num."); + return; + } + setQuantum(quantum); + break; + case "--data": + case "-d": + if (i >= args.length) { + System.err.println("no data file name."); + return; + } + dataFile = args[++i]; + break; + case "-h": + case "--help": + default: + System.err.println("Usage: [--cpu numCpu] [--data dataFileName]"); + return; + } + } + task_init(dataFile); + doRun.run(); + return; + } + public void setNum_cpu(int num) { num_cpu = num; cpu = new Cpu[num_cpu]; @@ -54,58 +118,8 @@ p periodic */ public static void main(String []args) throws FileNotFoundException { - String dataFile = ""; PeriodicalRun scheduler = new PeriodicalRun(); - Runnable doRun = new Runnable() { - public void run() { - scheduler.run(); - } - }; - for (int i = 0; i < args.length; i++) { - switch (args[i]) { - case "--cpu": - case "-c": - if (i >= args.length) { - System.err.println("no cpu num."); - return; - } - int cpu = Integer.parseInt(args[++i]); - if (cpu <= 0) { - System.err.println("bad cpu num."); - return; - } - scheduler.setNum_cpu(cpu); - break; - case "--quantum": - case "-q": - if (i >= args.length) { - System.err.println("no quantum time."); - return; - } - int quantum = Integer.parseInt(args[++i]); - if (quantum <= 0) { - System.err.println("bad quantum num."); - return; - } - scheduler.setQuantum(quantum); - break; - case "--data": - case "-d": - if (i >= args.length) { - System.err.println("no data file name."); - return; - } - dataFile = args[++i]; - break; - case "-h": - case "--help": - default: - System.err.println("Usage: [--cpu numCpu] [--data dataFileName]"); - return; - } - } - scheduler.task_init(dataFile); - doRun.run(); + scheduler.periodicSecheduler(args); scheduler.report(); } @@ -114,12 +128,12 @@ cpu[i].report(); } - public LinkedList<Task> getFinishedTask() { - return finishedTask; + @Override + public LinkedList<Task> getFinishedTaskList() { + return null; } - /* task の sort 用の関数 */
--- a/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/RateMonotonicEvent.java Fri Jan 13 00:48:33 2017 +0900 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/RateMonotonicEvent.java Fri Jan 13 23:00:45 2017 +0900 @@ -59,7 +59,7 @@ } } run.cpu[q.cpu].quantum -= run.cpu[q.cpu].exec_task(q,run.cpu[q.cpu].quantum); - run.getFinishedTask().add(q.copy()); + run.getFinishedTaskList().add(q.copy()); } }
--- a/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Run.java Fri Jan 13 00:48:33 2017 +0900 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/Run.java Fri Jan 13 23:00:45 2017 +0900 @@ -4,7 +4,7 @@ import java.io.FileNotFoundException; import java.util.*; -public class Run { +public class Run implements SchedulerInterface { int quantum = 0; int num_cpu = 1; Cpu [] cpu; @@ -40,43 +40,66 @@ p periodic */ public static void main(String args[]) throws FileNotFoundException { + Run scheduler = new Run(); + scheduler.aperiodicScheduler(args); + scheduler.report(); + } + + @Override + public void runScheduler(String[] args) { + try { + aperiodicScheduler(args); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + public void aperiodicScheduler(String[] args) throws FileNotFoundException { String dataFile = ""; - Run scheduler = new Run(); - Runnable doRun = new Runnable() { public void run() { scheduler.sjf(); }} ; + Runnable doRun = new Runnable() { public void run() { sjf(); }} ; for(int i = 0; i < args.length; i++ ) { switch (args[i]) { case "--cpu" :case "-c" : - if (i >= args.length) { System.err.println("no cpu num."); return; } + if (i >= args.length) { System.err.println("no cpu num."); + return; + } int cpu = Integer.parseInt(args[++i]); - if (cpu <= 0) { System.err.println("bad cpu num."); return; } - scheduler.setNum_cpu(cpu); + if (cpu <= 0) { System.err.println("bad cpu num."); + return; + } + setNum_cpu(cpu); break; case "--quantum" :case "-q" : - if (i >= args.length) { System.err.println("no quantum time."); return; } + if (i >= args.length) { System.err.println("no quantum time."); + return; + } int quantum = Integer.parseInt(args[++i]); - if (quantum <= 0) { System.err.println("bad quantum num."); return; } - scheduler.setQuantum(quantum); + if (quantum <= 0) { System.err.println("bad quantum num."); + return; + } + setQuantum(quantum); break; case "--data" :case "-d" : - if (i >= args.length) { System.err.println("no data file name."); return; } + if (i >= args.length) { System.err.println("no data file name."); + return; + } dataFile = args[++i]; break; - case "--fifo" : doRun = new Runnable() { public void run() { scheduler.fifo(); }} ; break; - case "--sjf" : doRun = new Runnable() { public void run() { scheduler.sjf(); }} ; break; - case "--roundRobbin" : doRun = new Runnable() { public void run() { scheduler.roundRobbin(); }} ; break; + case "--fifo" : doRun = new Runnable() { public void run() { fifo(); }} ; break; + case "--sjf" : doRun = new Runnable() { public void run() { sjf(); }} ; break; + case "--roundRobbin" : doRun = new Runnable() { public void run() { roundRobbin(); }} ; break; case "-h":case "--help" : default: System.err.println("Usage: [--cpu numCpu] [--data dataFileName] [--fifo] [--sjf] "); return; } } - scheduler.task_init(dataFile); + task_init(dataFile); doRun.run(); - scheduler.report(); + return; + } - } - - public void report() { + public void report() { for(int i = 0; i< num_cpu; i++) cpu[i].report(); } @@ -164,4 +187,8 @@ } + @Override + public LinkedList<Task> getFinishedTaskList() { + return finishedTask; + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/SchedChart.java Fri Jan 13 23:00:45 2017 +0900 @@ -0,0 +1,80 @@ +package jp.ac.uryukyu.ie.schedularSimulator; + +import javafx.application.Application; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.chart.BarChart; +import javafx.scene.chart.CategoryAxis; +import javafx.scene.chart.NumberAxis; +import javafx.scene.chart.StackedBarChart; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + +import java.util.LinkedList; + +/** + * Created by kono on 2017/01/13. + */ +public class SchedChart extends Application { + private static LinkedList<Task> taskList; + + static Node createBarChart(boolean horizontal, boolean simple, boolean stacked) { + ObservableList<String> cpuList = FXCollections.observableArrayList(); + LinkedList<LinkedList<Task>> cpuTaskList = new LinkedList<LinkedList<Task>>(); + for(Task t : taskList) { + while (t.cpu >= cpuList.size()) { + cpuList.add("cpu"+ Integer.toString(t.cpu)); + cpuTaskList.add(new LinkedList<Task>()); + } + cpuTaskList.get(t.cpu).add(t); + } + CategoryAxis xAxis = new CategoryAxis(cpuList); + NumberAxis yAxis = new NumberAxis(); + yAxis.setLabel("Clock"); + ObservableList<BarChart.Series> barChartData = FXCollections.observableArrayList(); + int i = 0; + for(String cpuName : cpuList) { + int lastClock = 0; + ObservableList<BarChart.Data> chart = FXCollections.observableArrayList(); + for(Task t : cpuTaskList.get(i)) { + if (lastClock < t.start ) { + // insert empty task + // chart.add(new BarChart.Data(t.start - lastClock, "empty")); + } + chart.add(new BarChart.Data(t.end - t.start, t.name)); + lastClock = t.end; + } + barChartData.add(new BarChart.Series(cpuName,chart)); + i++; + } + return new StackedBarChart(yAxis, xAxis, barChartData); + } + + public static void main(String args[]) { + SchedulerInterface sched = new Run(); + sched.runScheduler(args); + taskList = sched.getFinishedTaskList(); + launch(args); + } + + @Override + public void start(final Stage stage) { + stage.setTitle(""); + stage.setWidth(500); + stage.setHeight(500); + Scene scene = new Scene(new Group()); + + VBox root = new VBox(); + + Node barChart = createBarChart(true, true, true); + + root.getChildren().addAll(barChart); + scene.setRoot(root); + + stage.setScene(scene); + stage.show(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/uryukyu/ie/schedularSimulator/SchedulerInterface.java Fri Jan 13 23:00:45 2017 +0900 @@ -0,0 +1,11 @@ +package jp.ac.uryukyu.ie.schedularSimulator; + +import java.util.LinkedList; + +/** + * Created by kono on 2017/01/13. + */ +public interface SchedulerInterface { + void runScheduler(String[] args); + LinkedList<Task> getFinishedTaskList(); +}