Skip to content
Snippets Groups Projects
Commit 5d5f723b authored by Elizabeth Baker's avatar Elizabeth Baker
Browse files

Merge remote-tracking branch 'origin/master'

parents 90b2e89e 3233b868
Branches
No related tags found
No related merge requests found
...@@ -28,7 +28,7 @@ typedef struct { ...@@ -28,7 +28,7 @@ typedef struct {
//int CPUi; //int CPUi;
int totalExecutionTimeRemaining; //add all the times of the process int totalExecutionTimeRemaining; //add all the times of the process
llist *processQueue; llist *processQueue;
int numPorc; int numProcessesRemaining;
} CPU; } CPU;
void initializeProcess(char data[], process *newProcess); void initializeProcess(char data[], process *newProcess);
...@@ -38,7 +38,7 @@ process *headData(llist *q); ...@@ -38,7 +38,7 @@ process *headData(llist *q);
process *parallelParent(llist *processQueue, char *parentPid); process *parallelParent(llist *processQueue, char *parentPid);
void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete, void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete,
llist *parallelProcesses, int *numProcessesLeft, int *numProcessComplete, int cpuID); llist *parallelProcesses, int *numProcessesLeft, int *numProcessComplete, CPU * CPUs, int cpuID);
void printQEntry(process *p); void printQEntry(process *p);
...@@ -102,15 +102,12 @@ int main(int argc, char *argv[]) { ...@@ -102,15 +102,12 @@ int main(int argc, char *argv[]) {
for (int i = 0; i < numCPU; i++) { for (int i = 0; i < numCPU; i++) {
CPUs[i].totalExecutionTimeRemaining = 0; CPUs[i].totalExecutionTimeRemaining = 0;
CPUs[i].processQueue = llist_create(NULL);// is making list CPUs[i].processQueue = llist_create(NULL);// is making list
CPUs[i].numProcessesRemaining = 0;
} }
//main loop //main loop
if (f != NULL) { if (f != NULL) {
// iterate over arriving processes // iterate over arriving processes
//while (fgets(line, sizeof line, f) != NULL) {
while (newProcess = getNextProcessB(f, arrivalLounge, readAhead)) { while (newProcess = getNextProcessB(f, arrivalLounge, readAhead)) {
//printf("process id:%s process arrival time: %d\n", newProcess->processID, newProcess->timeArrived); //printf("process id:%s process arrival time: %d\n", newProcess->processID, newProcess->timeArrived);
...@@ -125,7 +122,7 @@ int main(int argc, char *argv[]) { ...@@ -125,7 +122,7 @@ int main(int argc, char *argv[]) {
advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses, advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses,
paralellizedProcesses, paralellizedProcesses,
&numProcessesLeft, &numProcessesLeft,
&numberProcessesFinished, j); &numberProcessesFinished, CPUs, j);
if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) { if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
CPUs[j].totalExecutionTimeRemaining = 0; CPUs[j].totalExecutionTimeRemaining = 0;
} else { } else {
...@@ -146,6 +143,7 @@ int main(int argc, char *argv[]) { ...@@ -146,6 +143,7 @@ int main(int argc, char *argv[]) {
currentTime, shortestTimeRemaining); currentTime, shortestTimeRemaining);
numProcessesLeft += 1; numProcessesLeft += 1;
CPUs[shortestTimeRemaining].totalExecutionTimeRemaining += newProcess->executionTime; CPUs[shortestTimeRemaining].totalExecutionTimeRemaining += newProcess->executionTime;
CPUs[shortestTimeRemaining].numProcessesRemaining += 1;
} else if (newProcess->parallelisable == 'p') { // Parallelizable processes need to be split up } else if (newProcess->parallelisable == 'p') { // Parallelizable processes need to be split up
// calculate number of sub processes and execution times for sub processes // calculate number of sub processes and execution times for sub processes
int quot = newProcess->executionTime / numCPU; int quot = newProcess->executionTime / numCPU;
...@@ -167,6 +165,8 @@ int main(int argc, char *argv[]) { ...@@ -167,6 +165,8 @@ int main(int argc, char *argv[]) {
parableProcess[i].timeRemaining = parableProcess[i].executionTime; parableProcess[i].timeRemaining = parableProcess[i].executionTime;
parableProcess[i].timeRemAtStartTime = newProcess->timeRemAtStartTime; parableProcess[i].timeRemAtStartTime = newProcess->timeRemAtStartTime;
addProcessToQueue(CPUs[i].processQueue, &parableProcess[i], currentTime, i); addProcessToQueue(CPUs[i].processQueue, &parableProcess[i], currentTime, i);
CPUs[i].totalExecutionTimeRemaining += newProcess->executionTime;
CPUs[i].numProcessesRemaining += 1;
} }
numProcessesLeft += 1; numProcessesLeft += 1;
llist_push(paralellizedProcesses, newProcess); llist_push(paralellizedProcesses, newProcess);
...@@ -213,7 +213,7 @@ int main(int argc, char *argv[]) { ...@@ -213,7 +213,7 @@ int main(int argc, char *argv[]) {
for (int j = 0; j < numCPU; j++) { for (int j = 0; j < numCPU; j++) {
advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses, paralellizedProcesses, advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses, paralellizedProcesses,
&numProcessesLeft, &numProcessesLeft,
&numberProcessesFinished, j); &numberProcessesFinished, CPUs, j);
if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) { if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
CPUs[j].totalExecutionTimeRemaining = 0; CPUs[j].totalExecutionTimeRemaining = 0;
} else { } else {
...@@ -328,7 +328,7 @@ process *parallelParent(llist *q, char *parentPid) { ...@@ -328,7 +328,7 @@ process *parallelParent(llist *q, char *parentPid) {
// period then pop them off the queue and add them to a completed processes list. // period then pop them off the queue and add them to a completed processes list.
void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete, void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete,
llist *paralellProcesses, llist *paralellProcesses,
int *numProcessesLeft, int *numProcessComplete, int cpuID) { int *numProcessesLeft, int *numProcessComplete, CPU * CPUs, int cpuID) {
process *headProcess; process *headProcess;
process *paralizedProcess; process *paralizedProcess;
char parentPid[11]; char parentPid[11];
...@@ -362,6 +362,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll ...@@ -362,6 +362,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
} }
llist_pop(processQueue); llist_pop(processQueue);
headProcess = headData(processQueue); headProcess = headData(processQueue);
CPUs[cpuID].numProcessesRemaining -= 1;
if (headProcess){ if (headProcess){
headProcess->justStarted = -1; headProcess->justStarted = -1;
headProcess->startTime = currentTime - deltaTime; headProcess->startTime = currentTime - deltaTime;
...@@ -377,6 +378,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll ...@@ -377,6 +378,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
llist_push(processesComplete, headProcess); llist_push(processesComplete, headProcess);
llist_pop(processQueue); llist_pop(processQueue);
headProcess = headData(processQueue); headProcess = headData(processQueue);
CPUs[cpuID].numProcessesRemaining -= 1;
if (headProcess){ if (headProcess){
headProcess->justStarted = -1; headProcess->justStarted = -1;
headProcess->startTime = currentTime - deltaTime; headProcess->startTime = currentTime - deltaTime;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment