package schedularSimulator;
import java.util.*;
public class Task {
static int task_count = 0;
static int task_clock = 0;
static int total_wait = 0;
static int total_turn_around = 0;
int priority;
int length;
String name;
int invoke; /* invoke time of the task */
int waiting; /* total waiting time */
int start; /* first execution time */
int end; /* time of job end */
int prev_end; /* previous suspension time */
char type; /* n non-periodic, p periodic */
int period;
int next_time;
int task_length;
static void reset() {
task_count = 0;
task_clock = 0;
total_wait = 0;
total_turn_around = 0;
}
Task(String name_,int length_,int priority_) {
name = name_;
length = length_;
priority = priority_;
}
Task(String name_,int length_,int priority_,int period_) {
name = name_;
task_length = length_;
priority = priority_;
length = 0;
period = period_;
}
int exec_task(int quantum,Collection<Task>list)
{
int exec_time;
if (quantum!=0 && quantum < length) {
length -= quantum;
exec_time = quantum;
} else {
exec_time = length;
length=0;
}
if (start == 0 ) {
start = task_clock;
waiting = task_clock - invoke;
}
if (prev_end != 0) waiting += task_clock - prev_end;
task_clock += exec_time;
if (length == 0) {
end = task_clock;
total_wait += waiting;
total_turn_around += end - invoke;
} else {
prev_end = task_clock;
}
print_task(exec_time);
return exec_time;
}
void
print_task(int exec_time)
{
System.out.printf("%d\t%s: %d\n",task_clock-exec_time,name,exec_time);
}
void
report_dead_line_miss()
{
System.out.printf("%d\t%s: missed\n",task_clock,name);
}
static void report()
{
if (task_count==0) return;
System.out.printf("%d\tend:\n",task_clock);
System.out.printf("\naverage waiting time = %d\naverage turn around time = %d\n",
total_wait / task_count,
total_turn_around / task_count);
}
}