diff --git a/allocate.c b/allocate.c index 275a8429a9cc9335c9056943b2b915c832ef49d9..290c4e6f9468862c81fc6137c436c349f01a5520 100644 --- a/allocate.c +++ b/allocate.c @@ -20,7 +20,7 @@ typedef struct { int timeRemaining; int subProcsRunning; int justStarted; - int deltaTime; + int startTime; } process; typedef struct { @@ -111,11 +111,7 @@ int main(int argc, char *argv[]) { //while (fgets(line, sizeof line, f) != NULL) { while (newProcess = getNextProcessB(f, arrivalLounge, readAhead)) { - - //printf("process id:%s process arrival time: %d\n", newProcess->processID, newProcess->timeArrived); - deltaTime = newProcess->timeArrived - currentTime; - //update currentTime currentTime += deltaTime; @@ -167,9 +163,6 @@ int main(int argc, char *argv[]) { } numProcessesLeft += 1; llist_push(paralellizedProcesses, newProcess); - } else { - printf("Error in test file "); - exit(1); } // Log started processes. for (int j = 0; j < numCPU; j++) { @@ -177,9 +170,9 @@ int main(int argc, char *argv[]) { //next process in queue started if (headProcess != NULL && headProcess->justStarted) { // printf("current time: %d\n", currentTime); + printf("%d,RUNNING,pid=%s,remaining_time=%d,cpu=%d - AAAA line 181\n", + headProcess->startTime, headProcess->processID, headProcess->timeRemaining, j); headProcess->justStarted = 0; - printf("%d,RUNNING,pid=%s,remaining_time=%d,cpu=%d - AAAA line 184\n", - currentTime + headProcess->deltaTime, headProcess->processID, headProcess->timeRemaining, j); } } @@ -223,13 +216,13 @@ int main(int argc, char *argv[]) { //next process in queue started if (headProcess != NULL && headProcess->justStarted) { // printf("current time: %d\n", currentTime); - headProcess->justStarted = 0; printf("%d,RUNNING,pid=%s,remaining_time=%d,cpu=%d\n", - currentTime, headProcess->processID, headProcess->timeRemaining, j); + headProcess->startTime, headProcess->processID, headProcess->timeRemaining, j); + headProcess->justStarted = 0; } } -// currentTime += deltaTime; +// currentTime += startTime; } // printf("Completed Queue:"); // llist_print(completedProcesses, (void (*)(void *)) &printQEntry); @@ -293,9 +286,10 @@ void initializeProcess(char data[], process *newProcess) { if (token != NULL) { newProcess->parallelisable = token[0]; } - newProcess->deltaTime =0; + newProcess->startTime = 0; newProcess->timeCompleted = -1; newProcess->timeRemaining = newProcess->executionTime; + newProcess->justStarted = 0; } process *headData(llist *q) { @@ -333,12 +327,11 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll while (headProcess != NULL && deltaTime != 0) { if (deltaTime >= headProcess->timeRemaining) { // Process has finished deltaTime -= headProcess->timeRemaining; - headProcess->timeCompleted = currentTime - deltaTime; //+ headProcess->timeRemaining; -// int t = headProcess->timeRemaining; + headProcess->timeCompleted = currentTime - deltaTime; headProcess->timeRemaining = 0; if (headProcess->parallelisable == 'p') { //printf("process had finished, and was a paralized subprocess\n"); - parentPid[0] = strtok(headProcess->processID, ".");//todo to get rid of warning strncopy + parentPid[0] = strtok(headProcess->processID, "."); paralizedProcess = parallelParent(paralellProcesses, parentPid); paralizedProcess->subProcsRunning -= 1; if (paralizedProcess->subProcsRunning == 0) { @@ -346,10 +339,10 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll // parallelized process has completed. *numProcessesLeft -= 1; *numProcessComplete += 1; - paralizedProcess->timeCompleted = currentTime - deltaTime;//todo error on calculation here + paralizedProcess->timeCompleted = currentTime - deltaTime; paralizedProcess->timeRemaining = 0; headProcess->timeRemaining = 0; - //printf("process had finished: Current time: %d, deltaTime: %d\n", currentTime, deltaTime); + //printf("process had finished: Current time: %d, startTime: %d\n", currentTime, startTime); printf("%d,FINISHED,pid=%s,proc_remaining=%d\n", paralizedProcess->timeCompleted, paralizedProcess->processID, *numProcessesLeft); // Could accumulate statistics here instead of keeping list of completed processes @@ -359,7 +352,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll headProcess = headData(processQueue); if (headProcess){ headProcess->justStarted = -1; - headProcess->deltaTime = deltaTime; + headProcess->startTime = currentTime - deltaTime; } } else { // finishedprocess is not parallelisable @@ -373,13 +366,12 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll headProcess = headData(processQueue); if (headProcess){ headProcess->justStarted = -1; - headProcess->deltaTime = deltaTime; + headProcess->startTime = currentTime - deltaTime; } } } else { // head process not finished headProcess->timeRemaining -= deltaTime; - headProcess->deltaTime = deltaTime; deltaTime = 0; // llist_print( processQueue, (void (*)(void *)) &printQEntry ); } @@ -420,8 +412,11 @@ void addProcessToQueue(llist *processQueue, process *newProcess, int currentTime process *headProcess; llist_add_inorder(newProcess, processQueue, (int (*)(void *, void *)) &leastTimeRemaining); headProcess = headData(processQueue); - if (strncmp(headProcess->processID, newProcess->processID, sizeof (newProcess->processID))) - headProcess->justStarted=-1; +// llist_print(processQueue, (void (*)(void *)) &printQEntry); + if (strncmp(headProcess->processID, newProcess->processID, sizeof (newProcess->processID))) { + headProcess->justStarted = -1; + headProcess->startTime = currentTime; + } }