From eb87c7f9b998a359e69f886e490f1c05c3a4cced Mon Sep 17 00:00:00 2001 From: cdez Date: Sat, 16 Mar 2024 19:52:33 -0700 Subject: [PATCH] Finished with SJF Scheduling, minus one tiny bug. Otherwise, memory operations can be started on. --- Sim03/logfile_1.lgf | 2 +- Sim03/sim03 | Bin 66712 -> 66800 bytes Sim03/simulator.c | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/Sim03/logfile_1.lgf b/Sim03/logfile_1.lgf index 0a374fe..52b0e91 100644 --- a/Sim03/logfile_1.lgf +++ b/Sim03/logfile_1.lgf @@ -1,4 +1,4 @@ -0.000001, OS: Simulator start +0.000000, OS: Simulator start READY state from NEW state ate diff --git a/Sim03/sim03 b/Sim03/sim03 index 2cba5917951551929709eb745a4d7b5d565d89e3..562b3c6506a93762dbe0d0c2eaacffcbf9ff6b45 100755 GIT binary patch delta 6241 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 delta 6059 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 == currentPid) + // printf("Current Process Number is: %d\n", pcbPtr->uniquePid); + // printf("Process Status is: %d\n", pcbPtr->process_state); + // printf("Scheduled Process is: %d\n", currentPid); + if (pcbPtr->process_state != PROCESS_STATE_TERMINATED && pcbPtr->uniquePid == currentPid) { // needs to set from READY to RUNNING pcbPtr->process_state = PROCESS_STATE_RUNNING; @@ -547,6 +550,19 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt wkgPtr = headPointer->headPtr; char loggingStr[MAX_STR_LEN]; char timeStringy[MAX_STR_LEN]; + int processCount = 0; + + while (wkgPtr != NULL) + { + if(wkgPtr->process_state != PROCESS_STATE_TERMINATED) + { + // + processCount = processCount + 1; + } + wkgPtr = wkgPtr->nextPtr; + } + wkgPtr = headPointer->headPtr; + // switch case for each scheduling algorithm switch (configPtr->cpuSchedCode) { @@ -640,6 +656,22 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // move to next pointer wkgPtr = wkgPtr->nextPtr; } + // check the number of processes, if there is one left, then + wkgPtr = headPointer->headPtr; + if(processCount == 1) + { + // find the last process that is READY but not TERMINATED, set it's PID as the return. + while(wkgPtr != NULL) + { + // + if (wkgPtr->process_state != PROCESS_STATE_TERMINATED) + { + // + shortestJobProcNum = wkgPtr->uniquePid; + } + wkgPtr = wkgPtr->nextPtr; + } + } // printf("Process %d Selected with %.0f ms remaining\n", wkgPtr->uniquePid, wkgPtr->timeLeft); sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", accessTimer(LAP_TIMER, timeStringy), shortestJobProcNum, (double)shortestJob); logOutput(configPtr, loggingStr, false);