From bb6d8ac0afcc9230422fcb5f46cf25a255fcb690 Mon Sep 17 00:00:00 2001 From: cdez Date: Mon, 18 Mar 2024 21:28:38 -0700 Subject: [PATCH] Savepoint, have most everything in place for the memory functions, will just need to fill them in. +- Simulator.c --- Sim03/logfile_1.lgf | 2 +- Sim03/sim03 | Bin 68136 -> 68600 bytes Sim03/simulator.c | 174 +++++++++++++++++++++++++++++++++++--------- 3 files changed, 142 insertions(+), 34 deletions(-) diff --git a/Sim03/logfile_1.lgf b/Sim03/logfile_1.lgf index 52b0e91..0a374fe 100644 --- a/Sim03/logfile_1.lgf +++ b/Sim03/logfile_1.lgf @@ -1,4 +1,4 @@ -0.000000, OS: Simulator start +0.000001, OS: Simulator start READY state from NEW state ate diff --git a/Sim03/sim03 b/Sim03/sim03 index be5b47cd3b36b6874b79bab5f112fdcbca4c7eea..e58449eb06cbc18acd465c37bff685bf97c2ad90 100755 GIT binary patch delta 20118 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 IxT?ngFN5`LN&o-= delta 18055 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[] = offset; + // return true (temp) + return true; } /* @@ -90,14 +93,15 @@ 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? +Function Output/Returned: boolean to indicate success or failure of allocated memory Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -void deallocMemory(ProcessControlBlock *singlePCB, int offset, int size) +bool deallocMemory(ProcessControlBlock *singlePCB, int offset, int size) { - // no return, void (temp) + // return true (temp) + return true; } /* @@ -378,7 +382,7 @@ Device Input/Device: none Device Output/Device: none Dependencies: ??? */ -void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr) +void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offset, int size, ConfigDataType *configPtr, ProcessControlBlock *singlePCB) { bool memDisplay = configPtr->memDisplay; ProcessControlBlock *wkgPtr; @@ -387,8 +391,12 @@ void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs int currentOffset = 0; int currentSize = 0; int memIterator; + int *memorySizeArray; + int totalArraySize = 0; + bool subFunctionSuccess = true; wkgPtr = pcbList->headPtr; + // grab how much memory is being used total, then count how big the total memory array should be while(wkgPtr != NULL) { // count up the total used memory within each process control block. @@ -396,15 +404,47 @@ void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs { // grab how much memory is used by that process usedMem = usedMem + wkgPtr->allocatedMemSizes[memIterator]; + totalArraySize = totalArraySize + 1; } // move to the next pointer wkgPtr = wkgPtr->nextPtr; } + // reset the working pointer + wkgPtr = pcbList->headPtr; + + // declare the array for the memory + memorySizeArray = malloc(sizeof(int) * totalArraySize); + + // grab the entire memory structure, so that the memory can be contiguous + while (wkgPtr != NULL) + { + // count up the total used memory within each process control block. + for (memIterator = 0; memIterator < totalArraySize; memIterator++) + { + // grab how much memory is used by that process + memorySizeArray[memIterator] = wkgPtr->allocatedMemSizes[memIterator]; + } + // move to the next pointer + wkgPtr = wkgPtr->nextPtr; + } + + // grab the size of the + // while() + // { + // // + // } + // switch case for each memory code switch (memCode) { case MEMORY_INITIALIZE: + for(memIterator = 0; memIterator < singlePCB->memArraySize; memIterator++) + { + // initialize the arrays with all '-1' to 'nullify' the memory, make it easier to iterate through later + singlePCB->allocatedMemOffsets[memIterator] = -1; + singlePCB->allocatedMemSizes[memIterator] = -1; + } if(memDisplay) { // @@ -416,44 +456,83 @@ void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs break; case MEMORY_ALLOCATE: + // grab the offset and size, store it, using the allocate memory function. + // if the function returns true, then it successfully did the operation, display as such. + subFunctionSuccess = allocMemory(singlePCB, offset, size); 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"); + if(subFunctionSuccess) + { + // + printf("--------------------------------------------------\n"); + printf("After memory allocation\n"); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + else + { + // + printf("--------------------------------------------------\n"); + printf("After memory allocation failure\n"); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } } break; case MEMORY_ACCESS: + subFunctionSuccess = accessMemory(singlePCB, offset, size); 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"); + if (subFunctionSuccess) + { + // + printf("--------------------------------------------------\n"); + printf("After access success\n"); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + else + { + // + printf("--------------------------------------------------\n"); + printf("After access failure\n"); + printf("%d [ Used, P#: %d, %d-%d ] %d\n", offset - offset, singlePCB->uniquePid, offset, offset + size - 1, size - 1); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } } break; case MEMORY_DEALLOCATE: + subFunctionSuccess = deallocMemory(singlePCB, offset, size); if (memDisplay) { - // - printf("--------------------------------------------------\n"); - printf("After memory deallocate\n"); - printf("Deallocated memory chunk.\n"); - printf("--------------------------------------------------\n"); + if (subFunctionSuccess) + { + // THIS SHOULD ALWAYS HAPPEN. + printf("--------------------------------------------------\n"); + printf("After clear process %d success\n", singlePCB->uniquePid); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } + else + { + // THIS SHOULD NEVER HAPPEN. + printf("--------------------------------------------------\n"); + printf("After clear process %d failure\n", singlePCB->uniquePid); + printf("%d [ Open, P#: x, %d-%d ] %d\n", usedMem, currentOffset, currentSize, availableMem - 1); + printf("--------------------------------------------------\n"); + } } break; case MEMORY_CLEAR: if (memDisplay) { - // + // this will happen regardless. Will always be cleaning up memory with dealloc. printf("--------------------------------------------------\n"); printf("After memory clear\n"); printf("No memory configured\n"); @@ -464,6 +543,8 @@ void memManager(ProcessControlBlockLL *pcbList, MEMORY_SIGNALS memCode, int offs default: break; } + // clear out the dynamic array + free(memorySizeArray); // no return, void (temp) } @@ -537,16 +618,19 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce // 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]; + char processOutput[HUGE_STR_LEN]; // grab the next operation code for the OpCodeType *workingMeta = singlePCB->nextOpCode; char *command; char *argument; int intArg; - char *inOutArg; + int intArgTwo; + // char *inOutArg; command = workingMeta->command; argument = workingMeta->strArg1; intArg = workingMeta->intArg2; - inOutArg = workingMeta->inOutArg; + intArgTwo = workingMeta->intArg3; + // inOutArg = workingMeta->inOutArg; 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 @@ -560,11 +644,35 @@ void runProcess(ProcessControlBlock *singlePCB, ConfigDataType *configPtr, Proce // run IO operations for the required amount of time. runIO(workingMeta->command, workingMeta->strArg1, workingMeta->intArg2, configPtr, singlePCB->uniquePid); } + if(compareString(command, "mem") == EQUIV) + { + // run memory operations with the memory manager + if(compareString(argument, "allocate") == EQUIV) + { + sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + logOutput(configPtr, processOutput, false); + // run the memory manager in allocate mode + memManager(pcbList, MEMORY_ALLOCATE, intArg, intArgTwo, configPtr, singlePCB); + } + else if(compareString(argument, "access") == EQUIV) + { + sprintf(processOutput, "%f, Process: %d, %s %s request (%d, %d)\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid, command, argument, intArg, intArgTwo); + logOutput(configPtr, processOutput, false); + // run the memory manager in access mode + memManager(pcbList, MEMORY_ACCESS, intArg, intArgTwo, configPtr, singlePCB); + } + } workingMeta = workingMeta->nextNode; command = workingMeta->command; argument = workingMeta->strArg1; intArg = workingMeta->intArg2; + intArgTwo = workingMeta->intArg3; } + // display the process exited + sprintf(processOutput, "\n%f, OS: Process %d ended\n", accessTimer(LAP_TIMER, timeStringy), singlePCB->uniquePid); + logOutput(configPtr, processOutput, false); + // deallocate the memory for the process + memManager(pcbList, MEMORY_DEALLOCATE, intArg, intArgTwo, configPtr, singlePCB); } /* @@ -582,7 +690,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) { // initialize function/variables // need two working pointers, one for master loop, one for internal loop - OpCodeType *wkgPtrMaster; + // OpCodeType *wkgPtrMaster; // currentTime variable that stores the time. [now unsure if needed] // need a variable for headPointer to point ProcessControlBlockLL *pcbList; @@ -630,7 +738,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) currentPid = scheduleProcess(pcbList, configPtr); // initialize memory with the memManager - memManager(pcbList, MEMORY_INITIALIZE, memoryOffset, memorySize, configPtr); + memManager(pcbList, MEMORY_INITIALIZE, memoryOffset, memorySize, configPtr, pcbList->headPtr); // loop until current process is hit for(processIterator = 0; processIterator < processCount; processIterator++) @@ -663,7 +771,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr) } pthread_join(cpuThread, NULL); // deallocate all the memory for each process. - memManager(pcbList, MEMORY_CLEAR, memoryOffset, memorySize, configPtr); + memManager(pcbList, MEMORY_CLEAR, memoryOffset, memorySize, configPtr, pcbList->headPtr); 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));