diff --git a/allocate.c b/allocate.c index 6548d0876742c6d93caacf87857d35449e93a82b..462e4da82a08973e5eedf0c43ceebf541dc28347 100644 --- a/allocate.c +++ b/allocate.c @@ -28,7 +28,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); @@ -38,7 +38,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); @@ -102,15 +102,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)) { //printf("process id:%s process arrival time: %d\n", newProcess->processID, newProcess->timeArrived); @@ -125,7 +122,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 { @@ -146,6 +143,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; @@ -167,6 +165,8 @@ int main(int argc, char *argv[]) { parableProcess[i].timeRemaining = parableProcess[i].executionTime; parableProcess[i].timeRemAtStartTime = newProcess->timeRemAtStartTime; addProcessToQueue(CPUs[i].processQueue, ¶bleProcess[i], currentTime, i); + CPUs[i].totalExecutionTimeRemaining += newProcess->executionTime; + CPUs[i].numProcessesRemaining += 1; } numProcessesLeft += 1; llist_push(paralellizedProcesses, newProcess); @@ -213,7 +213,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 { @@ -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. 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]; @@ -362,6 +362,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; @@ -377,6 +378,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;