From 20a6731ee2ae8e77c318f2a9d3c822105b822cd6 Mon Sep 17 00:00:00 2001 From: cdez Date: Sun, 10 Mar 2024 16:46:18 -0700 Subject: [PATCH] Fixed many issues with Simulator 2, trying to fix the beginning and end of CPU/IO subprocesses +- StandardConstants.h +- simulator.c/h --- Sim02/StandardConstants.h | 3 ++ Sim02/logfile_1.lgf | 1 + Sim02/sim02 | Bin 62064 -> 62176 bytes Sim02/simulator.c | 70 +++++++++++++++++++++++--------------- Sim02/simulator.h | 1 + 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/Sim02/StandardConstants.h b/Sim02/StandardConstants.h index 1a91d6c..7b00d4c 100644 --- a/Sim02/StandardConstants.h +++ b/Sim02/StandardConstants.h @@ -22,6 +22,9 @@ //Constant to print a dash #define DASH '-' +// constant for equivalent strings +#define EQUIV 0 + // highest printable character #define HIGHEST_PRINTABLE_CHAR '~' diff --git a/Sim02/logfile_1.lgf b/Sim02/logfile_1.lgf index 30a650a..ba01ba2 100644 --- a/Sim02/logfile_1.lgf +++ b/Sim02/logfile_1.lgf @@ -2,3 +2,4 @@ READY state from NEW state ate tate + diff --git a/Sim02/sim02 b/Sim02/sim02 index 89c95d0000293b4d3fe3b29c435eb8e4b013dcbf..79de3429b83a0da9bfe8f1bf690f321ea1a13063 100755 GIT binary patch delta 19968 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 delta 19279 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 Q0_!WEX%sh$)feOcH{Y^)A^-pY diff --git a/Sim02/simulator.c b/Sim02/simulator.c index f0ad96d..bcb877f 100644 --- a/Sim02/simulator.c +++ b/Sim02/simulator.c @@ -1,8 +1,4 @@ -#include "configops.h" -#include "metadataops.h" -#include "StandardConstants.h" #include "simulator.h" -#include /* Name: addProcess @@ -17,8 +13,11 @@ Dependencies: malloc, sizeof, ??? */ ProcessControlBlock *addProcess(const ProcessControlBlock source) { + // declare a pointer to working node ProcessControlBlock *workingNode; + // make some space that the pointer is pointing to workingNode = malloc(sizeof(ProcessControlBlock)); + // get each value from the source, and set their values workingNode->uniquePid = source.uniquePid; workingNode->cpuCycles = source.cpuCycles; workingNode->ioCycles = source.ioCycles; @@ -26,6 +25,7 @@ ProcessControlBlock *addProcess(const ProcessControlBlock source) workingNode->process_state = source.process_state; workingNode->timeLeft = source.timeLeft; workingNode->totalCycles = source.totalCycles; + // make sure to set the next pointer to NULL! workingNode->nextPtr = NULL; // return workingNode return workingNode; @@ -114,6 +114,7 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me OpCodeType *wkgMetaPtr; ProcessControlBlock currentPCB; ProcessControlBlock *wkgPCBPtr; + OpCodeType *wkgInsPtr; // need a variable to count how many IO cycles are in the process int ioCycleCount = 0; // need a variable to count how many CPU cycles are in the process @@ -132,6 +133,7 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me // set the working pointer to the first part of the metadata pointer wkgMetaPtr = metadataPtr; + wkgInsPtr = metadataPtr; // set another working pointer to the first part of the PCB list wkgPCBPtr = headPointer->headPtr; @@ -144,7 +146,7 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me //integerArgumentTwo = wkgMetaPtr->intArg3; // loop through the process list, until you hit a sys end. - while(wkgMetaPtr->nextNode != NULL && !(compareString(argument, "end") == 0 && compareString(command, "sys") == 0)) + while(wkgMetaPtr->nextNode != NULL && !(compareString(argument, "end") == EQUIV && compareString(command, "sys") == EQUIV)) { integerArgumentOne = wkgMetaPtr->intArg2; // printf("%s command, %s argument, %d\n", command, argument, integerArgumentOne); @@ -157,13 +159,13 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me // set the process state to PROCESS_STATE_NEW currentPCB.process_state = PROCESS_STATE_NEW; // set the nextOpCode as a pointer to the first place metadataPtr started - currentPCB.nextOpCode = wkgMetaPtr->nextNode; + // currentPCB.nextOpCode = wkgMetaPtr->nextNode; // broken? } // count number of io cycles - if(compareString(command, "dev") == 0) + if(compareString(command, "dev") == EQUIV) { integerArgumentOne = wkgMetaPtr->intArg2; - if(compareString(inOutArg, "in") == 0) + if(compareString(inOutArg, "in") == EQUIV) { // ioCycleCount = ioCycleCount + integerArgumentOne; @@ -175,13 +177,13 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me } } // count number of cpu cycles - if ((compareString(argument, "process") == 0 && compareString(command, "cpu") == 0)) + if ((compareString(argument, "process") == EQUIV && compareString(command, "cpu") == EQUIV)) { integerArgumentOne = wkgMetaPtr->intArg2; cpuCycleCount = cpuCycleCount + integerArgumentOne; } - if ((compareString(argument, "end") == 0 && compareString(command, "app") == 0)) + if ((compareString(argument, "end") == EQUIV && compareString(command, "app") == EQUIV)) { // set the ioCycles from variable currentPCB.ioCycles = ioCycleCount; @@ -189,6 +191,11 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me currentPCB.cpuCycles = cpuCycleCount; // set totalCycles from adding both IO/CPU currentPCB.totalCycles = ioCycleCount + cpuCycleCount; + + // currentPCB must have the starting instruction from wkgInsPtr + currentPCB.nextOpCode = wkgInsPtr->nextNode; + + // set the time left from (ioCycles * ioCycleRate) + (cpuCycles * procCyclesRate) // this gets the number of ms in the process. timeLeftCount = (ioCycleCount * configPtr->ioCycleRate) + (cpuCycleCount * configPtr->procCycleRate); @@ -217,6 +224,7 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me command = wkgMetaPtr->command; argument = wkgMetaPtr->strArg1; inOutArg = wkgMetaPtr->inOutArg; + wkgInsPtr = wkgMetaPtr; } // return headPointer @@ -233,7 +241,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: sprintf, ??? +Dependencies: fprintf, ??? */ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) { @@ -241,7 +249,7 @@ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) { // FILE *fileWritePtr; - fileWritePtr = fopen(configPtr->logToFileName, "w"); + fileWritePtr = fopen(configPtr->logToFileName, "w+"); if (fileWritePtr != NULL) { fprintf(fileWritePtr, "%s", logStr); @@ -260,7 +268,7 @@ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) // printf("\nSimulator will output to a file.\n"); FILE *fileWritePtr; - fileWritePtr = fopen(configPtr->logToFileName, "w"); + fileWritePtr = fopen(configPtr->logToFileName, "w+"); if (fileWritePtr != NULL) { fprintf(fileWritePtr, "%s", logStr); @@ -287,7 +295,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: pthreads, sprintf, logOutput, ??? */ void runCPU(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) { @@ -317,7 +325,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: pthreads, sprintf, logOutput, ??? */ void runIO(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) { @@ -342,7 +350,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: accessTimer, compareString, runCPU, runIO, ??? */ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr) { @@ -358,15 +366,17 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr) argument = workingMeta->strArg1; intArg = workingMeta->intArg2; inOutArg = workingMeta->inOutArg; - while (!(compareString(command, "app") == 0 && compareString(argument, "end") == 0)) + printf("\n%s is the current command in this process.\n", command); + printf("\n%s is the current argument in this process.\n", argument); + while (!(compareString(command, "app") == EQUIV && compareString(argument, "end") == EQUIV) && !(compareString(command, "sys") == EQUIV && compareString(argument, "end") == EQUIV)) { // - if (compareString(command, "cpu") == 0 && compareString(argument, "process") == 0) + if (compareString(command, "cpu") == EQUIV && compareString(argument, "process") == EQUIV) { // runCPU(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); } - if(compareString(command, "dev") == 0) + if(compareString(command, "dev") == EQUIV) { // runIO(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); @@ -389,7 +399,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: pthreads, accessTimer, sprintf, logOutput, runProcess, destroyProcessList, ??? */ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) { @@ -430,7 +440,6 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) pthread_t cpuThread; pthread_create(&cpuThread, NULL, (void *)&simThread, (void *)totalPCBTime); - pthread_join(cpuThread, NULL); // int processTimeLeft = pcbPtr->timeLeft; @@ -444,7 +453,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) { // needs to set from READY to RUNNING pcbPtr->process_state = PROCESS_STATE_READY; - sprintf(simulatorOutput, "%f, OS: Process %d set to RUNNING state from READY state\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); + sprintf(simulatorOutput, "%f, OS: Process %d set to RUNNING state from READY state\n\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); logOutput(configPtr, simulatorOutput, false); pthread_t runThread; pthread_create(&runThread, NULL, (void *)&simThread, (void *)processTimeLeft); @@ -452,7 +461,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // runCPU(pcbPtr, configPtr); runProcess(pcbPtr, configPtr); // when finished, set to terminated - sprintf(simulatorOutput, "%f, OS: Process %d set to TERMINATED state from RUNNING state\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); + sprintf(simulatorOutput, "%f, OS: Process %d set to TERMINATED state from RUNNING state\n\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); logOutput(configPtr, simulatorOutput, false); pcbPtr->process_state = PROCESS_STATE_TERMINATED; @@ -461,11 +470,16 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) pcbPtr = pcbPtr->nextPtr; currentPid = scheduleProcess(pcbList, configPtr); } + sprintf(simulatorOutput, "%f, OS: System Stop\n", accessTimer(LAP_TIMER, timeStringy)); + logOutput(configPtr, simulatorOutput, false); + sprintf(simulatorOutput, "%f, OS: Simulation End\n", accessTimer(LAP_TIMER, timeStringy)); + logOutput(configPtr, simulatorOutput, true); + pthread_join(cpuThread, NULL); // deallocate the process list with destroyProcessList destroyProcessList(pcbList); // once complete, log the output to FILE if required logOutput(configPtr, "", true); - pthread_exit(NULL); + // pthread_exit(NULL); // this line seems to make the program execution stop short... no warning either // void function, no return. } @@ -478,7 +492,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: sprintf, logOutput, ??? */ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr) { @@ -503,13 +517,13 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // if(wkgPtr->process_state != PROCESS_STATE_READY && wkgPtr->process_state != PROCESS_STATE_TERMINATED) { - // + // set the process within the PCB to the ready state, report in ready state. wkgPtr->process_state = PROCESS_STATE_READY; // printf("Process %d set to READY from NEW\n", wkgPtr->uniquePid); sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid); logOutput(configPtr, loggingStr, false); } - + // move to the next pointer wkgPtr = wkgPtr->nextPtr; } @@ -554,7 +568,7 @@ Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none -Dependencies: ??? +Dependencies: pthreads, runTimer */ void *simThread(int milSec) { diff --git a/Sim02/simulator.h b/Sim02/simulator.h index 02be3a6..0a07783 100644 --- a/Sim02/simulator.h +++ b/Sim02/simulator.h @@ -5,6 +5,7 @@ #include "configops.h" #include "metadataops.h" #include "simtimer.h" +#include // data structures