From 79db35ade54fb9bd4e43eddc78bf716629dadf34 Mon Sep 17 00:00:00 2001 From: cdez Date: Thu, 22 Feb 2024 02:36:52 -0700 Subject: [PATCH] Sim02 somewhat working? Unclear as of this commit. +- simulator.c/h +- simtimer.c/h --- Sim02/sim02 | Bin 60096 -> 61080 bytes Sim02/simtimer.c | 4 +- Sim02/simtimer.h | 2 +- Sim02/simulator.c | 169 +++++++++++++++++++++++++++++++++++----------- Sim02/simulator.h | 38 ++++++++++- 5 files changed, 168 insertions(+), 45 deletions(-) diff --git a/Sim02/sim02 b/Sim02/sim02 index 4f7a00d2afc3df0f325d4f7776b4c7dabcb5e5a1..9270528213d854e78d6c2a845dfc7ff9be6a7a64 100755 GIT binary patch delta 19304 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±=8LbB1RUzk~g_(Xbq#?=i?(8ZcI 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 YXgg2-7VUi|p$a|&(D`!`noF+zKWq~ZH~;_u delta 17615 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 J_|9+Q{s(lyKcD~r diff --git a/Sim02/simtimer.c b/Sim02/simtimer.c index 8e04e54..c3fbd23 100644 --- a/Sim02/simtimer.c +++ b/Sim02/simtimer.c @@ -30,7 +30,7 @@ const char RADIX_POINT = '.'; const char SPACED = ' '; -void *runTimer( int milliSeconds ) +void runTimer( int milliSeconds ) { struct timeval startTime, endTime; int startSec, startUSec, endSec, endUSec; @@ -62,7 +62,7 @@ void *runTimer( int milliSeconds ) secDiff = ( endSec - startSec ) * 1000; timeDiff = secDiff + mSecDiff; } - return NULL; + // return NULL; } double accessTimer( int controlCode, char *timeStr ) diff --git a/Sim02/simtimer.h b/Sim02/simtimer.h index 4539c3b..fe0496a 100644 --- a/Sim02/simtimer.h +++ b/Sim02/simtimer.h @@ -35,7 +35,7 @@ extern const char SPACED; // Function Prototyp ///////////////////////////////////////////////////////// -void *runTimer( int milliSeconds ); +void runTimer( int milliSeconds ); // will run a timer for the amount of ms specified double accessTimer( int controlCode, char *timeStr ); // returns the actual time as a double AND as a time string diff --git a/Sim02/simulator.c b/Sim02/simulator.c index f60797f..ae0ba65 100644 --- a/Sim02/simulator.c +++ b/Sim02/simulator.c @@ -107,7 +107,7 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBlockLL *headPointer) +ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *metadataPtr, ProcessControlBlockLL *headPointer) { // initialize function/variables // need a working pointer for the metadata @@ -202,6 +202,7 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl currentPCB.totalCycles = ioCycleCount + cpuCycleCount; // 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); currentPCB.timeLeft = timeLeftCount; // increment the PID counter processId = processId + 1; @@ -232,7 +233,7 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl inOutArg = wkgMetaPtr->inOutArg; } - // return null (temp) (should return the headpointer) + // return headPointer return headPointer; } @@ -250,24 +251,91 @@ Dependencies: sprintf, ??? */ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) { - FILE *fileWritePtr; - fileWritePtr = fopen(configPtr->logToFileName, "w"); - if(fileWritePtr != NULL) + if(configPtr->logToCode == LOGTO_BOTH_CODE) + { + // + FILE *fileWritePtr; + fileWritePtr = fopen(configPtr->logToFileName, "w"); + if (fileWritePtr != NULL) + { + // + fprintf(fileWritePtr, "%s", logStr); + // fputs(fileWritePtr, logStr); + fprintf(stdout, "%s", logStr); + } + // no return, void + // close the file, if at the end. + if (isEnd) + { + // + fclose(fileWritePtr); + } + // fclose(fileWritePtr); + } + else if(configPtr->logToCode == LOGTO_FILE_CODE) + { + // + printf("\nSimulator will output to a file.\n"); + FILE *fileWritePtr; + fileWritePtr = fopen(configPtr->logToFileName, "w"); + if (fileWritePtr != NULL) + { + // + fprintf(fileWritePtr, "%s", logStr); + // fputs(fileWritePtr, logStr); + } + // no return, void + // close the file, if at the end. + if (isEnd) + { + // + fclose(fileWritePtr); + } + // fclose(fileWritePtr); + } + else { // - fprintf(fileWritePtr, "%s", logStr); fprintf(stdout, "%s", logStr); } - // no return, void - // close the file, if at the end. - // if(isEnd) - // { - // // - // fclose(fileWritePtr); - // } - fclose(fileWritePtr); } +/* +Name: runCPU +Process: runs the CPU operations for however long it takes +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void runCPU(); + +/* +Name: runIO +Process: runs the IO operations for however long it takes +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void runIO(); + +/* +Name: runProcess +Process: runs the process that was selected +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void runProcess(); + /* Name: runSim Process: primary simulation driver @@ -291,10 +359,11 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // string variable for nextCode, temp unused // char *nextCode; // string variable for the timer stuff - char *simulatorOutput = "Simulator Start\n"; + char simulatorOutput[MAX_STR_LEN]; + // accessTimer(ZERO_TIMER, NULL); // Operating System start timer goes here, log it. - // sprintf(simulatorOutput, "Simulator start\n"); + sprintf(simulatorOutput, "%f, OS: Simulator start\n", accessTimer(LAP_TIMER, NULL)); logOutput(configPtr, simulatorOutput, false); // int variable for process to run @@ -302,7 +371,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // create the process list with createProcessList, store the pointed to address pcbList = createProcessList(); // fill the process list given the metadata - pcbList = fillProcessList(metaDataMstrPtr, pcbList); + pcbList = fillProcessList(configPtr, metaDataMstrPtr, pcbList); pcbPtr = pcbList->headPtr; // create temp strings char *command; @@ -319,26 +388,14 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) pcbPtr = pcbPtr->nextPtr; } pcbPtr = pcbList->headPtr; + + pthread_t cpuThread; + pthread_create(&cpuThread, NULL, (void *)&simThread, (void *)totalPCBTime); + pthread_join(cpuThread, NULL); + // set the current process id to the first scheduled process currentPid = scheduleProcess(pcbList, configPtr); - // function holds master loop, loops until sys end opcode found OR wkgPtrMaster nextNode != NULL - // while(wkgPtrMaster->nextNode != NULL && !(compareString(argument, "end") == 0 && compareString(command, "sys") == 0)) - // { - // currentPid = scheduleProcess(pcbList, configPtr); - // // will have a loop that goes from app start to app end for a PCB - // // (checks to see if the next instruction is NOT app end), using getNextProcess? - // // this will getNextOpCode - // // this will checkForIO and run the IO operations, outputting to FILE * and/or monitor - // // checkForIO will need the FILE * passed, will need timer access, and ??? - // // this will checkForCPU and run the CPU operations, outputting to FILE * and/or monitor - // // checkForCPU will need the FILE * passed, will need timer access, and ??? - // // move the wkgPtrMaster to the next metadata block - // wkgPtrMaster = wkgPtrMaster->nextNode; - // // set the command and argument to the current cmd and arg - // command = wkgPtrMaster->command; - // argument = wkgPtrMaster->strArg1; - // } // loop until current process is hit while(pcbPtr != NULL) { @@ -346,10 +403,14 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) if(pcbPtr->uniquePid == currentPid) { // - printf("Process %d running", currentPid); + // printf("Process %d running\n", currentPid); + // needs to set from READY to RUNNING + // when finished, set to terminated pcbPtr->process_state = PROCESS_STATE_TERMINATED; + } pcbPtr = pcbPtr->nextPtr; + currentPid = scheduleProcess(pcbList, configPtr); } // @@ -357,6 +418,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) destroyProcessList(pcbList); // once complete, log the output to FILE if required logOutput(configPtr, "", true); + pthread_exit(NULL); // void function, no return. } @@ -376,7 +438,7 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt ProcessControlBlock *wkgPtr; int returnPid = -1; wkgPtr = headPointer->headPtr; - char *loggingStr; + char loggingStr[MAX_STR_LEN]; // switch case for each scheduling algorithm switch (configPtr->cpuSchedCode) { @@ -391,10 +453,15 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt while(wkgPtr != NULL) { // - wkgPtr->process_state = PROCESS_STATE_READY; - //printf("Process %d set to READY from NEW\n", wkgPtr->uniquePid); - sprintf(loggingStr, "Process %d set to READY state from NEW state\n", wkgPtr->uniquePid); - logOutput(configPtr, loggingStr, false); + if(wkgPtr->process_state != PROCESS_STATE_READY && wkgPtr->process_state != PROCESS_STATE_TERMINATED) + { + // + 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, NULL), wkgPtr->uniquePid); + logOutput(configPtr, loggingStr, false); + } + wkgPtr = wkgPtr->nextPtr; } @@ -406,7 +473,7 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt if (wkgPtr->process_state == PROCESS_STATE_READY) { //printf("Process %d Selected with %.0f ms remaining\n", wkgPtr->uniquePid, wkgPtr->timeLeft); - sprintf(loggingStr, "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, NULL), wkgPtr->uniquePid, wkgPtr->timeLeft); logOutput(configPtr, loggingStr, false); returnPid = wkgPtr->uniquePid; } @@ -430,6 +497,26 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // return returnPid return returnPid; } + +/* +Name: simThread +Process: wrapper functions for threading in the simulator +Function Input/Parameters: milliseconds (int) +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void *simThread(int milSec) +{ + // + // int *milSecPtr = (int *)milSec; + // printf("Running Timer for %d ms, %d sec\n", milSec, milSec / 1000); + runTimer(milSec); + // printf("Ran Timer\n"); + pthread_exit(NULL); +} /* Current Note to programmer: do the scheduler, the runIO and runCPU functions, and then the FILE IO functions this is all that is left so far, hopefully not too bad. diff --git a/Sim02/simulator.h b/Sim02/simulator.h index 69bdff0..167145b 100644 --- a/Sim02/simulator.h +++ b/Sim02/simulator.h @@ -141,7 +141,7 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBlockLL *headPointer); +ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *metadataPtr, ProcessControlBlockLL *headPointer); /* Name: logOutput @@ -157,6 +157,30 @@ Dependencies: sprintf, ??? */ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd); +/* +Name: runCPU +Process: runs the CPU operations for however long it takes +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void runCPU(); + +/* +Name: runIO +Process: runs the IO operations for however long it takes +Function Input/Parameters: ??? +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void runIO(); + /* Name: runSim Process: primary simulation driver @@ -182,4 +206,16 @@ Dependencies: ??? */ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr); +/* +Name: simThread +Process: wrapper functions for threading in the simulator +Function Input/Parameters: milliseconds (int) +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void *simThread(int milSec); + #endif // SIMULATORX \ No newline at end of file