From 0b8c3846023ca91b9ef5ca14c880da21e9ed6c18 Mon Sep 17 00:00:00 2001 From: cdez Date: Thu, 22 Feb 2024 00:42:27 -0700 Subject: [PATCH] Save Point for Sim02, added new testing files. ++ config0.cnf ++ metadata5NoMem.mdf ++ logfile_1.lgf +- simulator.c +- simulator.h --- Sim02/config0.cnf | 13 +++ Sim02/logfile_1.lgf | 0 Sim02/metadata5NoMem.mdf | 65 +++++++++++ Sim02/sim02 | Bin 59600 -> 59936 bytes Sim02/simulator.c | 240 ++++++++++++++++++++++++++------------- Sim02/simulator.h | 5 +- 6 files changed, 243 insertions(+), 80 deletions(-) create mode 100644 Sim02/config0.cnf create mode 100644 Sim02/logfile_1.lgf create mode 100644 Sim02/metadata5NoMem.mdf diff --git a/Sim02/config0.cnf b/Sim02/config0.cnf new file mode 100644 index 0000000..8a10b96 --- /dev/null +++ b/Sim02/config0.cnf @@ -0,0 +1,13 @@ +Start Simulator Configuration File: +Version/Phase : 1.05 +File Path : metadata5NoMem.mdf +CPU Scheduling Code : FCFS-N +Quantum Time (cycles) : 3 +Memory Available (KB) : 11100 +Memory Display (On/Off) : On +Processor Cycle Time (msec) : 10 +I/O Cycle Time (msec) : 20 +Log To : Both +Log File Path : logfile_1.lgf +End Simulator Configuration File. + diff --git a/Sim02/logfile_1.lgf b/Sim02/logfile_1.lgf new file mode 100644 index 0000000..e69de29 diff --git a/Sim02/metadata5NoMem.mdf b/Sim02/metadata5NoMem.mdf new file mode 100644 index 0000000..0336fb8 --- /dev/null +++ b/Sim02/metadata5NoMem.mdf @@ -0,0 +1,65 @@ +Start Program Meta-Data Code: +sys start +app start, 0 +dev in, serial, 28 +dev out, video signal, 42 +dev in, sound signal, 40 +dev out, hard drive, 15 +dev in, keyboard, 80 +dev in, serial, 28 +cpu process, 10 +cpu process, 8 +cpu process, 6 +dev out, video signal, 49 +app end +app start, 0 +dev in, serial, 20 +cpu process, 6 +cpu process, 8 +dev out, monitor, 70 +cpu process, 6 +cpu process, 9 +dev out, sound signal, 45 +dev out, hard drive, 15 +dev in, video signal, 49 +dev out, serial, 20 +app end +app start, 0 +dev in, hard drive, 18 +dev out, video signal, 49 +dev out, usb, 14 +dev out, monitor, 70 +cpu process, 7 +cpu process, 9 +dev in, keyboard, 70 +dev in, video signal, 42 +cpu process, 5 +cpu process, 6 +app end +app start, 0 +dev in, hard drive, 21 +dev out, sound signal, 30 +cpu process, 7 +dev in, keyboard, 80 +dev in, hard drive, 30 +dev out, video signal, 63 +dev in, serial, 28 +dev out, sound signal, 25 +cpu process, 9 +dev out, sound signal, 45 +app end +app start, 0 +dev in, serial, 24 +dev out, video signal, 42 +cpu process, 5 +dev in, usb, 10 +cpu process, 8 +cpu process, 9 +cpu process, 6 +dev out, hard drive, 18 +dev out, hard drive, 24 +dev out, hard drive, 21 +app end +sys end +End Program Meta-Data Code. + diff --git a/Sim02/sim02 b/Sim02/sim02 index 8ff2006b7551e2d976a27f3823e3125b270067d9..199358a21994021520cb944eca45cc5c7c01c59f 100755 GIT binary patch delta 21077 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 delta 20451 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 OSJvMocr|Bdeg6lk2x$-i diff --git a/Sim02/simulator.c b/Sim02/simulator.c index 6869601..f271348 100644 --- a/Sim02/simulator.c +++ b/Sim02/simulator.c @@ -2,6 +2,7 @@ #include "metadataops.h" #include "StandardConstants.h" #include "simulator.h" +#include /* Name: addProcess @@ -26,12 +27,6 @@ ProcessControlBlock *addProcess(const ProcessControlBlock source) workingNode->timeLeft = source.timeLeft; workingNode->totalCycles = source.totalCycles; workingNode->nextPtr = NULL; - printf("uniquePID: %d\n", workingNode->uniquePid); - printf("process state: %d\n", workingNode->process_state); - printf("io cycles: %d\n", workingNode->ioCycles); - printf("cpu cycles: %d\n", workingNode->cpuCycles); - printf("total cycles: %d\n", workingNode->totalCycles); - printf("time left in ms: %f\n\n", workingNode->timeLeft); // return workingNode return workingNode; } @@ -117,7 +112,6 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl // initialize function/variables // need a working pointer for the metadata OpCodeType *wkgMetaPtr; - OpCodeType *wkgInternalPtr; ProcessControlBlock currentPCB; ProcessControlBlock *wkgPCBPtr; // need a variable to count how many IO cycles are in the process @@ -125,14 +119,12 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl // need a variable to count how many CPU cycles are in the process int cpuCycleCount = 0; // need a variable to calculate the time left in ms for a process - int timeLeftCount = 0; + double timeLeftCount = 0.0; // need a variable that fills PIDs, starting at 0 int processId = 0; // process variables? char *command; - char *commandInt; char *argument; - char *argumentInt; char *inOutArg; int integerArgumentOne; // unused as of current @@ -146,10 +138,16 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl // grab the first command and argument command = wkgMetaPtr->command; argument = wkgMetaPtr->strArg1; + inOutArg = wkgMetaPtr->inOutArg; + // integer argument two is unused atm + //integerArgumentTwo = wkgMetaPtr->intArg3; + // loop through the process list, until you hit a sys end. - while(wkgMetaPtr->nextNode != NULL || (compareString(argument, "end") && compareString(command, "sys"))) + while(wkgMetaPtr->nextNode != NULL && !(compareString(argument, "end") == 0 && compareString(command, "sys") == 0)) { + integerArgumentOne = wkgMetaPtr->intArg2; + // printf("%s command, %s argument, %d\n", command, argument, integerArgumentOne); // if app start, if (compareString(command, "app") && compareString(argument, "start")) { @@ -160,40 +158,42 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl currentPCB.process_state = PROCESS_STATE_NEW; // set the nextOpCode as a pointer to the first place metadataPtr started currentPCB.nextOpCode = wkgMetaPtr; - - // set the internal pointer to the location that wkgPtr is at - wkgInternalPtr = wkgMetaPtr; - // set the internal command and argument - commandInt = wkgInternalPtr->command; - argumentInt = wkgInternalPtr->strArg1; - inOutArg = wkgInternalPtr->inOutArg; - integerArgumentOne = wkgInternalPtr->intArg2; - // integer argument two is unused atm - //integerArgumentTwo = wkgInternalPtr->intArg3; - // loop while no longer have io or cpu instructions? (aka not at app end?) - while(wkgInternalPtr->nextNode != NULL || (compareString(argumentInt, "end") && compareString(commandInt, "app"))) + } + // + // count number of io cycles + // if ((compareString(command, "dev") == 0 && compareString(inOutArg, "in") == 0)) + // { + // integerArgumentOne = wkgMetaPtr->intArg2; + // ioCycleCount = ioCycleCount + integerArgumentOne; + // } + // if ((compareString(command, "dev") == 0 && compareString(inOutArg, "out") == 0)) + // { + // integerArgumentOne = wkgMetaPtr->intArg2; + // ioCycleCount = ioCycleCount + integerArgumentOne; + // } + if(compareString(command, "dev") == 0) + { + integerArgumentOne = wkgMetaPtr->intArg2; + if(compareString(inOutArg, "in") == 0) { - // count number of io cycles - if((compareString(commandInt, "dev") == 0 && compareString(inOutArg, "in") == 0)) - { - ioCycleCount = ioCycleCount + integerArgumentOne; - } - if((compareString(commandInt, "dev") == 0 && compareString(inOutArg, "out") == 0)) - { - ioCycleCount = ioCycleCount + integerArgumentOne; - } - // count number of cpu cycles - if((compareString(argumentInt, "process") == 0 && compareString(commandInt, "cpu") == 0)) - { - cpuCycleCount = cpuCycleCount + integerArgumentOne; - } - // move to next node, set relevant args - wkgInternalPtr = wkgInternalPtr->nextNode; - commandInt = wkgInternalPtr->command; - argumentInt = wkgInternalPtr->strArg1; - inOutArg = wkgInternalPtr->inOutArg; + // + ioCycleCount = ioCycleCount + integerArgumentOne; } + else + { + // + ioCycleCount = ioCycleCount + integerArgumentOne; + } + } + // count number of cpu cycles + if ((compareString(argument, "process") == 0 && compareString(command, "cpu") == 0)) + { + integerArgumentOne = wkgMetaPtr->intArg2; + cpuCycleCount = cpuCycleCount + integerArgumentOne; + } + if ((compareString(argument, "end") == 0 && compareString(command, "app") == 0)) + { // set the ioCycles from variable currentPCB.ioCycles = ioCycleCount; // set the cpuCycles from variable @@ -201,7 +201,7 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl // set totalCycles from adding both IO/CPU currentPCB.totalCycles = ioCycleCount + cpuCycleCount; // set the time left from (ioCycles * ioCycleRate) + (cpuCycles * procCyclesRate) - // this gets the number of ms in the process. + // this gets the number of ms in the process. currentPCB.timeLeft = timeLeftCount; // increment the PID counter processId = processId + 1; @@ -209,21 +209,64 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl ioCycleCount = 0; cpuCycleCount = 0; timeLeftCount = 0.0; + // needs to add nodes to the end and all data once parsed + // do both the metadata and PCBs + if(headPointer->headPtr == NULL) + { + // + headPointer->headPtr = addProcess(currentPCB); + wkgPCBPtr = headPointer->headPtr; + } + else + { + // + wkgPCBPtr->nextPtr = addProcess(currentPCB); + wkgPCBPtr = wkgPCBPtr->nextPtr; + } + } // move to the next bit of data wkgMetaPtr = wkgMetaPtr->nextNode; command = wkgMetaPtr->command; argument = wkgMetaPtr->strArg1; + inOutArg = wkgMetaPtr->inOutArg; - // needs to add nodes to the end and all data once parsed - // do both the metadata and PCBs - wkgPCBPtr = addProcess(currentPCB); - wkgPCBPtr = wkgPCBPtr->nextPtr; } // return null (temp) (should return the headpointer) return headPointer; } +/* +Name: logOutput +Process: Takes in a string, and then outputs it to monitor AND/OR file +Function Input/Parameters: string (char *), file pointer (FILE *), + configuration data (ConfigDataType *), + end of simulator (bool) +Function Output/Parameters: none +Function Output/Returned: none +Device Input/Device: none +Device Output/Device: none +Dependencies: sprintf, ??? +*/ +void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) +{ + FILE *fileWritePtr; + fileWritePtr = fopen(configPtr->logToFileName, "w"); + if(fileWritePtr != NULL) + { + // + printf("%s\n", logStr); + } + // no return, void + // close the file, if at the end. + // if(isEnd) + // { + // // + // fclose(fileWritePtr); + // } + fclose(fileWritePtr); +} + /* Name: runSim Process: primary simulation driver @@ -238,15 +281,21 @@ Dependencies: ??? void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) { // initialize function/variables - // need a FILE * for file operations - FILE *fileWritePtr; // need two working pointers, one for master loop, one for internal loop OpCodeType *wkgPtrMaster; // currentTime variable that stores the time. [now unsure if needed] // need a variable for headPointer to point ProcessControlBlockLL *pcbList; + ProcessControlBlock *pcbPtr; // string variable for nextCode, temp unused // char *nextCode; + // string variable for the timer stuff + char *simulatorOutput = "Simulator Start\n"; + + // Operating System start timer goes here, log it. + // sprintf(simulatorOutput, "Simulator start\n"); + logOutput(configPtr, simulatorOutput, false); + // int variable for process to run int currentPid; // create the process list with createProcessList, store the pointed to address @@ -256,34 +305,53 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // create temp strings char *command; char *argument; + // int iterator + int pcbIterator; // get the first data out of the metadata command = metaDataMstrPtr->command; argument = metaDataMstrPtr->strArg1; // set the master working pointer to the first metadata block - wkgPtrMaster = metaDataMstrPtr; + // wkgPtrMaster = metaDataMstrPtr; + pcbPtr = pcbList->headPtr; + // 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") && compareString(command, "sys"))) + // 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) { - 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; - } // + if(pcbPtr->uniquePid == currentPid) + { + // + printf("Process %d running", currentPid); + pcbPtr->process_state = PROCESS_STATE_TERMINATED; + } + pcbPtr = pcbPtr->nextPtr; + } + + // // deallocate the process list with destroyProcessList destroyProcessList(pcbList); // once complete, log the output to FILE if required + logOutput(configPtr, "", true); // void function, no return. } @@ -303,6 +371,7 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt ProcessControlBlock *wkgPtr; int returnPid = -1; wkgPtr = headPointer->headPtr; + char *loggingStr; // switch case for each scheduling algorithm switch (configPtr->cpuSchedCode) { @@ -312,20 +381,33 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt // need to find whichever process is first, AND the state is NEW. // will set the state to READY, return the pid of the process which // was set to ready. - // ignores any process which has a state of TERMINATED - // printf("uniquePID: %d\n", wkgPtr->uniquePid); - // printf("process state: %d\n", wkgPtr->process_state); - // printf("io cycles: %d\n", wkgPtr->ioCycles); - // printf("cpu cycles: %d\n", wkgPtr->cpuCycles); - // printf("total cycles: %d\n", wkgPtr->totalCycles); - // printf("time left in ms: %f\n", wkgPtr->timeLeft); - // while(wkgPtr->nextPtr != NULL || wkgPtr->process_state == PROCESS_STATE_NEW) - // { - // // - // returnPid = wkgPtr->uniquePid; - // printf("%d was selected.\n", returnPid); - // wkgPtr = wkgPtr->nextPtr; - // } + + // set every process in the list to READY from NEW + 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); + wkgPtr = wkgPtr->nextPtr; + } + + // reset the pointer to get ready for selection of process + wkgPtr = headPointer->headPtr; + while(wkgPtr != NULL && (returnPid == -1)) + { + // check if the process is NOT terminated + 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); + logOutput(configPtr, loggingStr, false); + returnPid = wkgPtr->uniquePid; + } + // move to next pointer + wkgPtr = wkgPtr->nextPtr; + } break; case CPU_SCHED_FCFS_P_CODE: // TODO: First Come, First Served, Preemptive Scheduling diff --git a/Sim02/simulator.h b/Sim02/simulator.h index fc06d28..69bdff0 100644 --- a/Sim02/simulator.h +++ b/Sim02/simulator.h @@ -146,13 +146,16 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl /* Name: logOutput Process: Takes in a string, and then outputs it to monitor AND/OR file -Function Input/Parameters: string (char *), file pointer (FILE *) +Function Input/Parameters: string (char *), file pointer (FILE *), + configuration data (ConfigDataType *), + end of simulator (bool) Function Output/Parameters: none Function Output/Returned: none Device Input/Device: none Device Output/Device: none Dependencies: sprintf, ??? */ +void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd); /* Name: runSim