diff --git a/Sim02/sim02 b/Sim02/sim02 new file mode 100755 index 0000000..92d9f02 Binary files /dev/null and b/Sim02/sim02 differ diff --git a/Sim02/simulator.c b/Sim02/simulator.c index bc83a71..a63708f 100644 --- a/Sim02/simulator.c +++ b/Sim02/simulator.c @@ -3,6 +3,22 @@ #include "StandardConstants.h" #include "simulator.h" +/* +Name: addProcess +Process: adds a process to the +Function Input/Parameters: none +Function Output/Parameters: none +Function Output/Returned: head pointer to the PCBs +Device Input/Device: none +Device Output/Device: none +Dependencies: malloc, sizeof, fillProcessList +*/ +// ProcessControlBlock *addProcess() +// { +// // return NULL (temp) +// return NULL; +// } + /* Name: createProcessList Process: reads through the opcode struct to fill out the linked list of PCBs @@ -56,8 +72,8 @@ Dependencies: free, destroyProcessListHelper(recursively), ??? */ ProcessControlBlock *destroyProcessListHelper(ProcessControlBlock *nodePtr) { - // check to see if the next pointer is NOT null - if(nodePtr->nextPtr != NULL) + // check to see if the pointer is NOT null + if(nodePtr != NULL) { // if not null, move to the next pointer (recurse) nodePtr->nextPtr = destroyProcessListHelper(nodePtr->nextPtr); @@ -83,13 +99,31 @@ ProcessControlBlock *fillProcessList(OpCodeType *metadataPtr) { // initialize function/variables // need a working pointer for the metadata + OpCodeType *wkgMetaPtr; // need a pointer to save the location of first metadata opcode + OpCodeType metaAddress; // need a variable to count how many IO cycles are in the process + int ioCycleCount; // need a variable to count how many CPU cycles are in the process + int cpuCycleCount; // need a variable to calculate the time left in ms for a process + int timeLeftCount; // temp variables? + char *tempStrOne; + char *tempStrTwo; + + // set the working pointer to the first part of the metadata pointer + wkgMetaPtr = metadataPtr; + // + // loop through the process list, until you hit a sys end. + while(wkgMetaPtr->nextNode != NULL) + { + tempStrOne = wkgMetaPtr->command; + tempStrTwo = wkgMetaPtr->inOutArg; // if app start, + if(compareString(tempStrOne, "app") && compareString(tempStrTwo, "start")) + { // set the unique ID // set the process state to PROCESS_STATE_NEW // set the nextOpCode as a pointer to the first place metadataPtr started @@ -101,6 +135,8 @@ ProcessControlBlock *fillProcessList(OpCodeType *metadataPtr) // set totalCycles from adding both IO/CPU // set the time left from (ioCycles * ioCycleRate) + (cpuCycles * procCyclesRate) // this gets the number of ms in the process. + } + } // return null (temp) return (ProcessControlBlock *)NULL; } @@ -120,10 +156,29 @@ 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 - // currentTime variable that stores the time. - // create the process list with createProcessList - // function holds master loop, loops until sys end opcode found OR PCB List != NULL + OpCodeType *wkgPtrMaster; + // currentTime variable that stores the time. [now unsure if needed] + // need a variable for headPointer to point + ProcessControlBlockLL *pcbList; + // string variable for nextCode + char *nextCode; + // create the process list with createProcessList, store the pointed to address + pcbList = createProcessList(); + // create temp strings + char *command; + char *argument; + + // 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; + // function holds master loop, loops until sys end opcode found OR wkgPtrMaster nextNode != NULL + while( wkgPtrMaster->nextNode != NULL || (compareString(argument, "end") && compareString(command, "sys"))) + { // 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 @@ -131,9 +186,19 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // 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 ??? + // TEMP + printf("%s is command, %s is argument\n", command, argument); + // TEMP END + // 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; + } // // deallocate the process list with destroyProcessList - printf("runSim called here"); + destroyProcessList(pcbList); + //printf("runSim called here"); // void function, no return. }