From ae2e2ad885e9245f372d94534eb61860f90e105a Mon Sep 17 00:00:00 2001 From: cdez Date: Wed, 13 Mar 2024 13:42:21 -0700 Subject: [PATCH] Almost fixed Simulator 2. Minor changes help get the output closer. File IO still don't work, but I can't do anything about that. +- simulator.c +- sim02 --- Sim02/logfile_1.lgf | 4 +++- Sim02/sim02 | Bin 62176 -> 62144 bytes Sim02/simulator.c | 30 +++++++++--------------------- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/Sim02/logfile_1.lgf b/Sim02/logfile_1.lgf index ba01ba2..52b0e91 100644 --- a/Sim02/logfile_1.lgf +++ b/Sim02/logfile_1.lgf @@ -1,5 +1,7 @@ 0.000000, OS: Simulator start READY state from NEW state ate -tate + +ate + diff --git a/Sim02/sim02 b/Sim02/sim02 index 13fb927d20846695705c0ab4646e34a6070cb62b..a59a9eac0894631108b6b08af0067a49a758a15e 100755 GIT binary patch delta 8198 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 delta 8250 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 @@ -151,7 +150,6 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me { currentPCB.nextOpCode = wkgInsPtr->nextNode; integerArgumentOne = wkgMetaPtr->intArg2; - printf("%s command, %s argument, %d\n", command, argument, integerArgumentOne); // if app start, if (compareString(command, "app") && compareString(argument, "start")) { @@ -160,8 +158,6 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me currentPCB.uniquePid = processId; // 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; // broken? } // count number of io cycles if(compareString(command, "dev") == EQUIV) @@ -169,12 +165,12 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me integerArgumentOne = wkgMetaPtr->intArg2; if(compareString(inOutArg, "in") == EQUIV) { - // + // add up the IO cycle ioCycleCount = ioCycleCount + integerArgumentOne; } else { - // + // add up the IO cycle ioCycleCount = ioCycleCount + integerArgumentOne; } } @@ -195,7 +191,6 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me currentPCB.totalCycles = ioCycleCount + cpuCycleCount; // currentPCB must have the starting instruction from wkgInsPtr - // currentPCB.nextOpCode = wkgInsPtr->nextNode; wkgInsPtr = wkgMetaPtr; // set the time left from (ioCycles * ioCycleRate) + (cpuCycles * procCyclesRate) @@ -358,6 +353,7 @@ 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]; + // grab the next operation code for the OpCodeType *workingMeta = singlePCB->nextOpCode; char *command; char *argument; @@ -367,30 +363,24 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr) argument = workingMeta->strArg1; intArg = workingMeta->intArg2; inOutArg = workingMeta->inOutArg; - 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)) { - // + // check to see what operation will be performed if (compareString(command, "cpu") == EQUIV && compareString(argument, "process") == EQUIV) { - // - // printf("CPU RUNS\n"); + // run the CPU for the required amount of time. runCPU(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); } if(compareString(command, "dev") == EQUIV) { - // - // printf("IO RUNS\n"); + // run IO operations for the required amount of time. runIO(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); } + workingMeta = workingMeta->nextNode; command = workingMeta->command; argument = workingMeta->strArg1; intArg = workingMeta->intArg2; - workingMeta = workingMeta->nextNode; } - // workingMeta = workingMeta->nextNode; - // pthread_exit(NULL); } /* @@ -460,24 +450,22 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) 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\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); logOutput(configPtr, simulatorOutput, false); pcbPtr->process_state = PROCESS_STATE_TERMINATED; - + pthread_join(runThread, NULL); } processTimeLeft = pcbPtr->timeLeft; pcbPtr = pcbPtr->nextPtr; currentPid = scheduleProcess(pcbList, configPtr); } + pthread_join(cpuThread, NULL); 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