From 67df0ceeaf48f21e1f6f1cbc111a59286cbebe1b Mon Sep 17 00:00:00 2001 From: cdez Date: Mon, 18 Mar 2024 15:55:32 -0700 Subject: [PATCH] Savepoint for memory operations. --- Sim03/sim03 | Bin 66808 -> 68112 bytes Sim03/simulator.c | 190 +++++++++++++++++++++++++++++++++++++++------- Sim03/simulator.h | 13 ++++ 3 files changed, 174 insertions(+), 29 deletions(-) diff --git a/Sim03/sim03 b/Sim03/sim03 index 6b254d6179639ea4730c68cea368b2eecc9ff3aa..b4cb1a282ad0fcfd2b56ee8644d30ba817d19205 100755 GIT binary patch delta 20853 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 Q0!x3@z`N^Tprocess_state = source.process_state; workingNode->timeLeft = source.timeLeft; workingNode->totalCycles = source.totalCycles; + workingNode->allocatedMemOffsets = (int *) malloc(sizeof(int) * source.memArraySize); + workingNode->allocatedMemSizes = (int *) malloc(sizeof(int) * source.memArraySize); + workingNode->memArraySize = source.memArraySize; // make sure to set the next pointer to NULL! workingNode->nextPtr = NULL; // return workingNode return workingNode; } +/* +Name: allocMemory +Process: 'allocates' memory within the PCB, stores offset and size within it's PCB +Function Input/Parameters: source PCB (ProcessControlBlock *), offset (int), size (int) +Function Output/Parameters: none +Function Output/Returned: none? +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void allocMemory(ProcessControlBlock *singlePCB, int offset, int size) +{ + // no return, void (temp) +} + /* Name: createProcessList Process: reads through the opcode struct to fill out the linked list of PCBs @@ -52,6 +85,21 @@ ProcessControlBlockLL *createProcessList() return headBlock; } +/* +Name: deallocMemory +Process: 'deallocates' memory within the PCB, removes offset and size within it's PCB +Function Input/Parameters: source PCB (ProcessControlBlock *), offset (int), size (int) +Function Output/Parameters: none +Function Output/Returned: none? +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void deallocMemory(ProcessControlBlock *singlePCB, int offset, int size) +{ + // no return, void (temp) +} + /* Name: destroyProcessList Process: deallocates memory used for the linked list struct @@ -87,6 +135,8 @@ ProcessControlBlock *destroyProcessListHelper(ProcessControlBlock *nodePtr) // check to see if the pointer is NOT null if(nodePtr != NULL) { + free(nodePtr->allocatedMemOffsets); + free(nodePtr->allocatedMemSizes); // if not null, move to the next pointer (recurse) nodePtr->nextPtr = destroyProcessListHelper(nodePtr->nextPtr); } @@ -123,6 +173,8 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me double timeLeftCount = 0.0; // need a variable that fills PIDs, starting at 0 int processId = 0; + // need a variable that checks how many allocate statements there are. + int memAllocation = 0; // process variables? char *command; char *argument; @@ -181,6 +233,12 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me cpuCycleCount = cpuCycleCount + integerArgumentOne; } + // count number of times memory is done, sub checks for how many allocates, accesses, etc. + if ((compareString(argument, "allocate") == EQUIV && compareString(command, "mem") == EQUIV)) + { + // allocate the memory + memAllocation = memAllocation + 1; + } if ((compareString(argument, "end") == EQUIV && compareString(command, "app") == EQUIV)) { // set the ioCycles from variable @@ -189,6 +247,9 @@ ProcessControlBlockLL *fillProcessList(ConfigDataType *configPtr, OpCodeType *me currentPCB.cpuCycles = cpuCycleCount; // set totalCycles from adding both IO/CPU currentPCB.totalCycles = ioCycleCount + cpuCycleCount; + // set number of allocations from variable, then reset. + currentPCB.memArraySize = memAllocation; + memAllocation = 0; // currentPCB must have the starting instruction from wkgInsPtr wkgInsPtr = wkgMetaPtr; @@ -304,6 +365,97 @@ void logOutput(ConfigDataType *configPtr, char *logStr, bool isEnd) } } +/* +Name: memManager +Process: checks to make sure an allocate will be successful, + makes sure that an access will not segfault (or return segfault if it does), + and initializes memory and deallocates memory +Function Input/Parameters: PCBList (ProcessControlBlockLL *), memory code (MEMORY_SIGNALS), + offset (int), size (int), configuration data (ConfigDataType *) +Function Output/Parameters: none +Function Output/Returned: none? +Device Input/Device: none +Device Output/Device: none +Dependencies: ??? +*/ +void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr) +{ + bool memDisplay = configPtr->memDisplay; + ProcessControlBlock *wkgPtr; + int availableMem = configPtr->memAvailable; + int usedMem = 0; + int currentOffset = 0; + int currentSize = 0; + int memIterator; + wkgPtr = pcbList->headPtr; + + while(wkgPtr != NULL) + { + // count up the total used memory within each process control block. + for(memIterator = 0; memIterator < wkgPtr->memArraySize; memIterator++) + { + // grab how much memory is used by that process + usedMem = usedMem + wkgPtr->allocatedMemSizes[memIterator]; + } + // move to the next pointer + wkgPtr = wkgPtr->nextPtr; + } + + // switch case for each memory code + switch (memCode) + { + case MEMORY_INITIALIZE: + if(memDisplay) + { + // + printf("--------------------------------------------------\n"); + printf("After memory initialization\n"); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + break; + + case MEMORY_ALLOCATE: + if (memDisplay) + { + // + printf("--------------------------------------------------\n"); + printf("After memory allocation\n"); + printf("%d [ Used, P%d: x, %d-%d ] %d\n", usedMem, wkgPtr->uniquePid, offset, size, availableMem - 1); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + break; + + case MEMORY_ACCESS: + if (memDisplay) + { + // + printf("--------------------------------------------------\n"); + printf("After access success/failure\n"); + printf("%d [ Used, P%d: x, %d-%d ] %d\n", usedMem, wkgPtr->uniquePid, offset, size, availableMem - 1); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + break; + + case MEMORY_DEALLOCATE: + if (memDisplay) + { + // + printf("--------------------------------------------------\n"); + printf("After memory clear\n"); + printf("No memory configured"); + printf("--------------------------------------------------\n"); + } + break; + + default: + break; + } + // no return, void (temp) +} + /* Name: runCPU Process: runs the CPU operations for however long it takes @@ -369,7 +521,7 @@ Device Input/Device: none Device Output/Device: none Dependencies: accessTimer, compareString, runCPU, runIO, ??? */ -void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr) +void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, ProcessControlBlockLL *pcbList) { // run over the entire process, running the CPU when a CPU cycle comes up // or a run IO when an IO cycle comes up @@ -431,6 +583,8 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) char timeStringy[MAX_STR_LEN]; int processCount = 0; int processIterator; + int memoryOffset = 0; + int memorySize = 1; accessTimer(ZERO_TIMER, timeStringy); // Operating System start timer goes here, log it. @@ -455,6 +609,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) } pcbPtr = pcbList->headPtr; + pthread_t cpuThread; pthread_create(&cpuThread, NULL, (void *)&simThread, (void *)totalPCBTime); @@ -463,34 +618,11 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) // set the current process id to the first scheduled process currentPid = scheduleProcess(pcbList, configPtr); + + // initialize memory with the memManager + memManager(pcbList, MEMORY_INITIALIZE, memoryOffset, memorySize, configPtr); + // loop until current process is hit - // while(pcbPtr->process_state != PROCESS_STATE_TERMINATED && pcbPtr != NULL && processCount != 0) - // { - // if(pcbPtr->uniquePid == currentPid) - // { - // // needs to set from READY to RUNNING - // pcbPtr->process_state = PROCESS_STATE_RUNNING; - // sprintf(simulatorOutput, "%f, OS: Process %d set to RUNNING state from READY state\n\n", accessTimer(LAP_TIMER, timeStringy), pcbPtr->uniquePid); - // logOutput(configPtr, simulatorOutput, false); - // pthread_t runThread; - // pthread_create(&runThread, NULL, (void *)&simThread, (void *)processTimeLeft); - // 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; - // processCount = processCount - 1; - // pthread_join(runThread, NULL); - // } - // processTimeLeft = pcbPtr->timeLeft; - // pcbPtr = pcbPtr->nextPtr; - // currentPid = scheduleProcess(pcbList, configPtr); - // if(configPtr->cpuSchedCode == CPU_SCHED_SJF_N_CODE && pcbPtr == NULL) - // { - // // - // pcbPtr = pcbList->headPtr; - // } - // } for(processIterator = 0; processIterator < processCount; processIterator++) { while (pcbPtr != NULL) @@ -506,7 +638,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) logOutput(configPtr, simulatorOutput, false); pthread_t runThread; pthread_create(&runThread, NULL, (void *)&simThread, (void *)processTimeLeft); - runProcess(pcbPtr, configPtr); + runProcess(pcbPtr, configPtr, pcbList); // 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); diff --git a/Sim03/simulator.h b/Sim03/simulator.h index 4ccba46..f75f791 100644 --- a/Sim03/simulator.h +++ b/Sim03/simulator.h @@ -17,6 +17,13 @@ typedef enum{ PROCESS_STATE_TERMINATED } PROCESS_STATES; +typedef enum{ + MEMORY_INITIALIZE = 0, + MEMORY_ACCESS, + MEMORY_ALLOCATE, + MEMORY_DEALLOCATE + } MEMORY_SIGNALS; + typedef struct ProcessControlBlockStruct { int uniquePid; @@ -37,6 +44,12 @@ typedef struct ProcessControlBlockStruct // see how many are left. // also need a time left state here? double timeLeft; + // allocated memory array (stores the offsets) + int *allocatedMemOffsets; + // allocated memory array sizes (stores the sizes for each offset) + int *allocatedMemSizes; + // size of memory array + int memArraySize; // connect to the next process control block here struct ProcessControlBlockStruct *nextPtr; } ProcessControlBlock;