94 lines
1.9 KiB
C
94 lines
1.9 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
#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;
|
|
} |