-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueue_functions.c
150 lines (103 loc) · 2.35 KB
/
queue_functions.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <stdlib.h>
int total_processes = 0;
/////////////////////Structs
//event structure
//type:
// 1 = arrival of process
// 2 = completion of process
// 3 = time slice
struct event{
float time;
int type;
struct event* next;
};
//Process structure
struct process{
float burst_time;
float arrival_time;
float remaining_time;
//To determine where it is in the queue
int position;
struct process* next;
};
event* new_event(float t, int ty)
{
event* temp = (event*)malloc(sizeof(event));
temp->time = t;
temp->type = ty;
temp->next = NULL;
return temp;
}
process* new_process(float b, float arrival)
{
process* temp = (process*)malloc(sizeof(process));
temp->burst_time = b;
temp->next = NULL;
temp->position = 0;
temp->arrival_time = arrival;
return temp;
}
//////////////////////////////////////////////////Event Queue functions
void pop_event(event** head)
{
event* temp = *head;
(*head) = (*head)->next;
free(temp);
}
void push_event(event** head, float t, int ty, int schedule)
{
//FCFS
if(schedule == 1){
event* start = (*head);
// Create new event
event* temp = new_event(t, ty);
while (start->next != NULL) {
start = start->next;
}
temp->next = start->next;
start->next = temp;
}
}
/////////////////////////////////////////////Process queue functions
void pop_process(process** head)
{
process* temp = *head;
(*head) = (*head)->next;
free(temp);
}
//push based on schedule
void push_process(process** head, float b, int schedule, float a)
{
process* start = (*head);
// Create new process
process* temp = new_process(b,a);
//FCFS
if(schedule == 1){
while (start->next != NULL) {
start = start->next;
}
temp->next = start->next;
start->next = temp;
total_processes++;
}
//Shortest run time first
if(schedule == 2){
if ((*head)->burst_time > b) {
// Insert New Node before head
temp->next = *head;
(*head) = temp;
}
else {
while (start->next != NULL &&
start->next->burst_time < b) {
start = start->next;
//keeps track of what position it is in the list
temp->position++;
}
temp->next = start->next;
start->next = temp;
total_processes++;
}
}
}