diff --git a/execution_example.csv b/execution_example.csv new file mode 100644 index 0000000..aed220c --- /dev/null +++ b/execution_example.csv @@ -0,0 +1,4 @@ +1 10 0 0 +2 103 3 0 +3 108 96 0 +... diff --git a/simulator.c b/simulator.c index 380dc00..0bcd6a6 100644 --- a/simulator.c +++ b/simulator.c @@ -1,8 +1,94 @@ +#include +#include + #define RR_QUANTUM 2 #define CNTXT_SWITCH 1 +enum pstate { + WAITING, + READY, + FINISHED +}; + +struct pinfo { + int id; + int arrival_time; + int execution_time; + int priority; + + int wait_time; + int completion_time; + enum pstate state; + + struct pinfo * next_pinfo; +}; + +struct perf_info { + int total_time; + int total_nr_ctxt_switch; + int total_time_ctxt_switch; +}; + +struct pinfo * create_process(int id, int arrival_time, int execution_time, int priority) { + struct pinfo * info = { + id, + arrival_time, + execution_time, + priority, + 0, + 0, + WAITING, + NULL + }; + return info; +} + +struct perf_info * schedule_FCFS(struct pinfo * processes) { + int current_time = 0; + struct pinfo * process = processes; + + struct perf_info * perf = {0, 0, 0}; + + while (process != NULL) { + int wait_time = current_time - process->arrival_time; + if (wait_time < 0) { + wait_time = 0; + } + process->wait_time = wait_time; + process->completion_time = process->execution_time + process->wait_time; + current_time = process->arrival_time + process->completion_time; + + process = process->next_pinfo; + } + perf->total_time = current_time; + + return perf; +} + + +struct pinfo * read_file() { + // TODO + +} + +void write_file(struct pinfo * process, struct perf_info * perf) { + // TODO +} + +void print_perf(struct perf_info * perf) { + println("Total time: %d\n", perf->total_time); + println("Total number of context switches: %d\n", perf->total_nr_ctxt_switch); + println("Total time spent on context switching: %d\n", perf->total_time_ctxt_switch); +} + int main() { + struct pinfo * processes = read_file(); + + struct perf_info * perf = schedule_FCFS(processes); + + write_file(processes, perf); + print_perf(perf); return 0; } \ No newline at end of file