-
Notifications
You must be signed in to change notification settings - Fork 0
/
coursework.c
91 lines (71 loc) · 2.23 KB
/
coursework.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
#include "coursework.h"
int counter = 0;
int generateProcessTime()
{
return ((rand() % 10) + 1);
}
int generatePriority()
{
return (rand() % PRIORITY);
}
long int getDifferenceInMilliSeconds(struct timeval start, struct timeval end)
{
long int iSeconds = end.tv_sec - start.tv_sec;
long int iUSeconds = end.tv_usec - start.tv_usec;
long int mtime = (iSeconds * 1000 + iUSeconds / 1000.0);
return mtime;
}
struct element generateProcess()
{
struct element e;
e.pid = counter;
counter = counter + 1;
e.pid_time = generateProcessTime();
e.pid_priority = generatePriority();
gettimeofday(&e.created_time, NULL);
sleep(1);
return e;
}
void runProcess(int index, int t)
{
printf("Running: #%d for %d sec ...\n", index, t);
sleep(t);
// use sleep to occupy the process
}
void runNonPreemptiveJob(struct queue *my_arr, int index)
{
runProcess(index, my_arr->e[index].pid_time);
}
void runPreemptiveJob(struct queue *my_arr, int index)
{
long int iDifference = 0;
int t = my_arr->e[index].pid_time;
int iBurstTime = t > TIME_SLICE ? TIME_SLICE : t;
printf("Q #%d >>> pid: %d remain time %d, will be running for %d sec\n",
my_arr->e[index].pid_priority, my_arr->e[index].pid, t, iBurstTime);
runProcess(my_arr->e[index].pid, iBurstTime);
my_arr->e[index].pid_time = my_arr->e[index].pid_time - iBurstTime;
}
// the following functions can be chosen for task 3, 4 and 5
void runProcessv2(int pid, int t)
{
printf("Running: #%d for %d sec ...\n", pid, t);
sleep(t);
// use sleep to occupy the process
}
void runNonPreemptiveJobv2(struct element * tempProcess)
{
int processpid = tempProcess->pid; //both tempProcess->pid and (*tempProcess).pid are applicable
int iBurstTime = tempProcess->pid_time;
runProcessv2(processpid, iBurstTime);
}
void runPreemptiveJobv2(struct element * tempProcess)
{
int remain_t = tempProcess->pid_time;
int processpid = tempProcess->pid;
int iBurstTime = remain_t > TIME_SLICE ? TIME_SLICE : remain_t;
//printf("Q #%d >>> pid: %d remain time %d, will be running for %d sec\n",
//tempProcess->pid_priority, processpid, remain_t, iBurstTime);
runProcessv2(processpid, iBurstTime);
tempProcess->pid_time = remain_t - iBurstTime;
}