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

Sub proc execution times rounded up.

Trying to fix procs remaining.
parent e1a1b26b
Branches
No related tags found
No related merge requests found
...@@ -27,7 +27,7 @@ typedef struct { ...@@ -27,7 +27,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);
...@@ -37,7 +37,7 @@ process *headData(llist *q); ...@@ -37,7 +37,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);
...@@ -101,15 +101,12 @@ int main(int argc, char *argv[]) { ...@@ -101,15 +101,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)) {
deltaTime = newProcess->timeArrived - currentTime; deltaTime = newProcess->timeArrived - currentTime;
//update currentTime //update currentTime
...@@ -120,7 +117,7 @@ int main(int argc, char *argv[]) { ...@@ -120,7 +117,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 {
...@@ -141,6 +138,7 @@ int main(int argc, char *argv[]) { ...@@ -141,6 +138,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;
...@@ -162,6 +160,8 @@ int main(int argc, char *argv[]) { ...@@ -162,6 +160,8 @@ int main(int argc, char *argv[]) {
parableProcess[i].timeRemaining = parableProcess[i].executionTime; parableProcess[i].timeRemaining = parableProcess[i].executionTime;
parableProcess[i].startTime = newProcess->startTime; parableProcess[i].startTime = newProcess->startTime;
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);
...@@ -205,7 +205,7 @@ int main(int argc, char *argv[]) { ...@@ -205,7 +205,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 {
...@@ -319,7 +319,7 @@ process *parallelParent(llist *q, char *parentPid) { ...@@ -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. // 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];
...@@ -352,6 +352,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll ...@@ -352,6 +352,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;
...@@ -366,6 +367,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll ...@@ -366,6 +367,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