From 3233b868cee8dedb3e320e9a33218785a176a2f1 Mon Sep 17 00:00:00 2001
From: bakere1 <bakere1@student.unimelb.edu.au>
Date: Mon, 29 Mar 2021 12:33:32 +1100
Subject: [PATCH] Sub proc execution times rounded up. Trying to fix procs
 remaining.

---
 allocate.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/allocate.c b/allocate.c
index b383ca3..90edf67 100644
--- a/allocate.c
+++ b/allocate.c
@@ -27,7 +27,7 @@ typedef struct {
     //int CPUi;
     int totalExecutionTimeRemaining; //add all the times of the process
     llist *processQueue;
-    int numPorc;
+    int numProcessesRemaining;
 } CPU;
 
 void initializeProcess(char data[], process *newProcess);
@@ -37,7 +37,7 @@ process *headData(llist *q);
 process *parallelParent(llist *processQueue, char *parentPid);
 
 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);
 
@@ -101,15 +101,12 @@ int main(int argc, char *argv[]) {
     for (int i = 0; i < numCPU; i++) {
         CPUs[i].totalExecutionTimeRemaining = 0;
         CPUs[i].processQueue = llist_create(NULL);// is making list
+        CPUs[i].numProcessesRemaining = 0;
     }
 
     //main loop
     if (f != NULL) {
-
-        //iterate over arriving processes
-
-
-        //while (fgets(line, sizeof line, f) != NULL) {
+        //  iterate over arriving processes
         while (newProcess = getNextProcessB(f, arrivalLounge, readAhead)) {
             deltaTime = newProcess->timeArrived - currentTime;
             //update currentTime
@@ -120,7 +117,7 @@ int main(int argc, char *argv[]) {
                 advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses,
                                     paralellizedProcesses,
                                     &numProcessesLeft,
-                                    &numberProcessesFinished, j);
+                                    &numberProcessesFinished, CPUs, j);
                 if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
                     CPUs[j].totalExecutionTimeRemaining = 0;
                 } else {
@@ -141,6 +138,7 @@ int main(int argc, char *argv[]) {
                                   currentTime, shortestTimeRemaining);
                 numProcessesLeft += 1;
                 CPUs[shortestTimeRemaining].totalExecutionTimeRemaining += newProcess->executionTime;
+                CPUs[shortestTimeRemaining].numProcessesRemaining += 1;
             } else if (newProcess->parallelisable == 'p') { // Parallelizable processes need to be split up
                 // calculate number of sub processes and execution times for sub processes
                 int quot = newProcess->executionTime / numCPU;
@@ -162,6 +160,8 @@ int main(int argc, char *argv[]) {
                     parableProcess[i].timeRemaining = parableProcess[i].executionTime;
                     parableProcess[i].startTime = newProcess->startTime;
                     addProcessToQueue(CPUs[i].processQueue, &parableProcess[i], currentTime, i);
+                    CPUs[i].totalExecutionTimeRemaining += newProcess->executionTime;
+                    CPUs[i].numProcessesRemaining += 1;
                 }
                 numProcessesLeft += 1;
                 llist_push(paralellizedProcesses, newProcess);
@@ -205,7 +205,7 @@ int main(int argc, char *argv[]) {
         for (int j = 0; j < numCPU; j++) {
             advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses, paralellizedProcesses,
                                 &numProcessesLeft,
-                                &numberProcessesFinished, j);
+                                &numberProcessesFinished, CPUs, j);
             if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
                 CPUs[j].totalExecutionTimeRemaining = 0;
             } else {
@@ -319,7 +319,7 @@ process *parallelParent(llist *q, char *parentPid) {
 // 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,
                          llist *paralellProcesses,
-                         int *numProcessesLeft, int *numProcessComplete, int cpuID) {
+                         int *numProcessesLeft, int *numProcessComplete, CPU * CPUs, int cpuID) {
     process *headProcess;
     process *paralizedProcess;
     char parentPid[11];
@@ -352,6 +352,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
                 }
                 llist_pop(processQueue);
                 headProcess = headData(processQueue);
+                CPUs[cpuID].numProcessesRemaining -= 1;
                 if (headProcess){
                     headProcess->justStarted = -1;
                     headProcess->startTime = currentTime - deltaTime;
@@ -366,6 +367,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
                 llist_push(processesComplete, headProcess);
                 llist_pop(processQueue);
                 headProcess = headData(processQueue);
+                CPUs[cpuID].numProcessesRemaining -= 1;
                 if (headProcess){
                     headProcess->justStarted = -1;
                     headProcess->startTime = currentTime - deltaTime;
-- 
GitLab