From b306a179d8679a958f96dc7f094988ddb655500a Mon Sep 17 00:00:00 2001 From: cdez Date: Thu, 22 Feb 2024 05:19:48 -0700 Subject: [PATCH] "Finished" Sim02 +- simulator.c/h --- Sim02/logfile_1.lgf | 4 ++ Sim02/sim02 | Bin 61080 -> 62072 bytes Sim02/simulator.c | 117 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 107 insertions(+), 14 deletions(-) diff --git a/Sim02/logfile_1.lgf b/Sim02/logfile_1.lgf index e69de29..30a650a 100644 --- a/Sim02/logfile_1.lgf +++ b/Sim02/logfile_1.lgf @@ -0,0 +1,4 @@ +0.000000, OS: Simulator start + READY state from NEW state +ate +tate diff --git a/Sim02/sim02 b/Sim02/sim02 index 9270528213d854e78d6c2a845dfc7ff9be6a7a64..a5dd9388551c457e09bf617455ec959f0d3b61cb 100755 GIT binary patch delta 18996 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 VTPX&7)8BFE3mv;3Wl@f}vqo_Foq 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 diff --git a/Sim02/simulator.c b/Sim02/simulator.c index ae0ba65..db9281f 100644 --- a/Sim02/simulator.c +++ b/Sim02/simulator.c @@ -157,7 +157,7 @@ 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; + currentPCB.nextOpCode = wkgMetaPtr->nextNode; } // // count number of io cycles @@ -310,7 +310,34 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -void runCPU(); +void runCPU(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) +{ + char timeStringy[MAX_STR_LEN]; + // char *command = workingMeta->command; + // char *argument = workingMeta->strArg1; + // int intArg = workingMeta->intArg2; + char cpuOutput[MAX_STR_LEN]; + int cpuTime = 0; + // pthread_t cpuThread; + // pthread_create(&cpuThread, NULL, (void *)&simThread, (void *)cpuTime); + // pthread_join(cpuThread, NULL); + // + // printf("%f is the time for runCPU\n", accessTimer(LAP_TIMER, timeStringy)); + // + // + // + cpuTime = intArg * configPtr->procCycleRate; + sprintf(cpuOutput, "%f, Process: %d, %s %s operation start\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + logOutput(configPtr, cpuOutput, false); + // run timer for intArg * procCycleRate + pthread_t cpuThread; + pthread_create(&cpuThread, NULL, (void *)&simThread, (void *)cpuTime); + pthread_join(cpuThread, NULL); + // + sprintf(cpuOutput, "%f, Process: %d, %s %s operation end\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + logOutput(configPtr, cpuOutput, false); + // pthread_exit(NULL); +} /* Name: runIO @@ -322,7 +349,25 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -void runIO(); +void runIO(char *command, char *argument, int intArg, ConfigDataType *configPtr, int processId) +{ + char timeStringy[MAX_STR_LEN]; + // char *command = workingMeta->command; + // char *argument = workingMeta->strArg1; + // int intArg = workingMeta->intArg2; + char ioOutput[MAX_STR_LEN]; + int ioTime = 0; + ioTime = intArg * configPtr->ioCycleRate; + sprintf(ioOutput, "%f, Process: %d, %s %s operation start\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + logOutput(configPtr, ioOutput, false); + // run timer for intArg * procCycleRate + pthread_t ioThread; + pthread_create(&ioThread, NULL, (void *)&simThread, (void *)ioTime); + pthread_join(ioThread, NULL); + // + sprintf(ioOutput, "%f, Process: %d, %s %s operation end\n", accessTimer(LAP_TIMER, timeStringy), processId, command, argument); + logOutput(configPtr, ioOutput, false); +} /* Name: runProcess @@ -334,7 +379,41 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -void runProcess(); +void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr) +{ + // run over the entire process, running the CPU when a CPU cycle comes up + // or a run IO when an IO cycle comes up + char timeStringy[MAX_STR_LEN]; + OpCodeType *workingMeta = singlePCB->nextOpCode; + char *command; + char *argument; + int intArg; + char *inOutArg; + command = workingMeta->command; + argument = workingMeta->strArg1; + intArg = workingMeta->intArg2; + inOutArg = workingMeta->inOutArg; + while (!(compareString(command, "app") == 0 && compareString(argument, "end") == 0)) // compareString(command, "cpu") == 0 && compareString(argument, "process") == 0 + { + // + if (compareString(command, "cpu") == 0 && compareString(argument, "process") == 0) + { + // + runCPU(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); + } + if(compareString(command, "dev") == 0) + { + // + runIO(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); + } + command = workingMeta->command; + argument = workingMeta->strArg1; + intArg = workingMeta->intArg2; + workingMeta = workingMeta->nextNode; + } + // workingMeta = workingMeta->nextNode; + // pthread_exit(NULL); +} /* Name: runSim @@ -360,10 +439,11 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // char *nextCode; // string variable for the timer stuff char simulatorOutput[MAX_STR_LEN]; + char timeStringy[MAX_STR_LEN]; - // accessTimer(ZERO_TIMER, NULL); + accessTimer(ZERO_TIMER, timeStringy); // Operating System start timer goes here, log it. - sprintf(simulatorOutput, "%f, OS: Simulator start\n", accessTimer(LAP_TIMER, NULL)); + sprintf(simulatorOutput, "%f, OS: Simulator start\n", accessTimer(LAP_TIMER, timeStringy)); logOutput(configPtr, simulatorOutput, false); // int variable for process to run @@ -373,11 +453,6 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // fill the process list given the metadata pcbList = fillProcessList(configPtr, metaDataMstrPtr, pcbList); pcbPtr = pcbList->headPtr; - // create temp strings - char *command; - char *argument; - // int iterator - int pcbIterator; // calculate pcb total time int totalPCBTime = 0; @@ -392,7 +467,9 @@ 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; // set the current process id to the first scheduled process currentPid = scheduleProcess(pcbList, configPtr); @@ -405,10 +482,21 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // // printf("Process %d running\n", currentPid); // 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); + logOutput(configPtr, simulatorOutput, false); + pthread_t runThread; + pthread_create(&runThread, NULL, (void *)&simThread, (void *)processTimeLeft); + pthread_join(runThread, NULL); + // 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); + logOutput(configPtr, simulatorOutput, false); pcbPtr->process_state = PROCESS_STATE_TERMINATED; } + processTimeLeft = pcbPtr->timeLeft; pcbPtr = pcbPtr->nextPtr; currentPid = scheduleProcess(pcbList, configPtr); } @@ -439,6 +527,7 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt int returnPid = -1; wkgPtr = headPointer->headPtr; char loggingStr[MAX_STR_LEN]; + char timeStringy[MAX_STR_LEN]; // switch case for each scheduling algorithm switch (configPtr->cpuSchedCode) { @@ -458,7 +547,7 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // 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); + sprintf(loggingStr, "%f, OS: Process %d set to READY state from NEW state\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid); logOutput(configPtr, loggingStr, false); } @@ -473,7 +562,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, "%f, OS: Process %d selected with %.0f ms remaining\n", accessTimer(LAP_TIMER, NULL), wkgPtr->uniquePid, wkgPtr->timeLeft); + sprintf(loggingStr, "%f, OS: Process %d selected with %.0f ms remaining\n", accessTimer(LAP_TIMER, timeStringy), wkgPtr->uniquePid, wkgPtr->timeLeft); logOutput(configPtr, loggingStr, false); returnPid = wkgPtr->uniquePid; }