added base for FCFS algorithm
This commit is contained in:
parent
4a0e1d3209
commit
7120fe0509
4
execution_example.csv
Normal file
4
execution_example.csv
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
1 10 0 0
|
||||||
|
2 103 3 0
|
||||||
|
3 108 96 0
|
||||||
|
...
|
|
86
simulator.c
86
simulator.c
@ -1,8 +1,94 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#define RR_QUANTUM 2
|
#define RR_QUANTUM 2
|
||||||
#define CNTXT_SWITCH 1
|
#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() {
|
int main() {
|
||||||
|
struct pinfo * processes = read_file();
|
||||||
|
|
||||||
|
struct perf_info * perf = schedule_FCFS(processes);
|
||||||
|
|
||||||
|
write_file(processes, perf);
|
||||||
|
print_perf(perf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user