Debugging fillProcessBlock functions, trying to figure out where memleaks are.
+- simulator.c
This commit is contained in:
parent
fa99b171f9
commit
672c26a5c7
3 changed files with 62 additions and 12 deletions
BIN
Sim02/sim02
BIN
Sim02/sim02
Binary file not shown.
|
|
@ -5,19 +5,36 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Name: addProcess
|
Name: addProcess
|
||||||
Process: adds a process to the
|
Process: allocates the memory for the pcb, grabs the data from the created PCB,
|
||||||
Function Input/Parameters: none
|
dumps the data so that the node can be linked correctly.
|
||||||
|
Function Input/Parameters: source PCB (ProcessControlBlock)
|
||||||
Function Output/Parameters: none
|
Function Output/Parameters: none
|
||||||
Function Output/Returned: head pointer to the PCBs
|
Function Output/Returned: filled PCB (ProcessControlBlock *)
|
||||||
Device Input/Device: none
|
Device Input/Device: none
|
||||||
Device Output/Device: none
|
Device Output/Device: none
|
||||||
Dependencies: malloc, sizeof, fillProcessList
|
Dependencies: malloc, sizeof, ???
|
||||||
*/
|
*/
|
||||||
// ProcessControlBlock *addProcess()
|
ProcessControlBlock *addProcess(const ProcessControlBlock source)
|
||||||
// {
|
{
|
||||||
// // return NULL (temp)
|
ProcessControlBlock *workingNode;
|
||||||
// return NULL;
|
workingNode = malloc(sizeof(ProcessControlBlock));
|
||||||
// }
|
workingNode->uniquePid = source.uniquePid;
|
||||||
|
workingNode->cpuCycles = source.cpuCycles;
|
||||||
|
workingNode->ioCycles = source.ioCycles;
|
||||||
|
workingNode->nextOpCode = source.nextOpCode;
|
||||||
|
workingNode->process_state = source.process_state;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Name: createProcessList
|
Name: createProcessList
|
||||||
|
|
@ -188,6 +205,10 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl
|
||||||
currentPCB.timeLeft = timeLeftCount;
|
currentPCB.timeLeft = timeLeftCount;
|
||||||
// increment the PID counter
|
// increment the PID counter
|
||||||
processId = processId + 1;
|
processId = processId + 1;
|
||||||
|
|
||||||
|
ioCycleCount = 0;
|
||||||
|
cpuCycleCount = 0;
|
||||||
|
timeLeftCount = 0.0;
|
||||||
}
|
}
|
||||||
// move to the next bit of data
|
// move to the next bit of data
|
||||||
wkgMetaPtr = wkgMetaPtr->nextNode;
|
wkgMetaPtr = wkgMetaPtr->nextNode;
|
||||||
|
|
@ -196,8 +217,8 @@ ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBl
|
||||||
|
|
||||||
// needs to add nodes to the end and all data once parsed
|
// needs to add nodes to the end and all data once parsed
|
||||||
// do both the metadata and PCBs
|
// do both the metadata and PCBs
|
||||||
wkgPCBPtr = ¤tPCB;
|
wkgPCBPtr = addProcess(currentPCB);
|
||||||
wkgPCBPtr->nextPtr = NULL;
|
wkgPCBPtr = wkgPCBPtr->nextPtr;
|
||||||
}
|
}
|
||||||
// return null (temp) (should return the headpointer)
|
// return null (temp) (should return the headpointer)
|
||||||
return headPointer;
|
return headPointer;
|
||||||
|
|
@ -226,6 +247,8 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr)
|
||||||
ProcessControlBlockLL *pcbList;
|
ProcessControlBlockLL *pcbList;
|
||||||
// string variable for nextCode, temp unused
|
// string variable for nextCode, temp unused
|
||||||
// char *nextCode;
|
// char *nextCode;
|
||||||
|
// int variable for process to run
|
||||||
|
int currentPid;
|
||||||
// create the process list with createProcessList, store the pointed to address
|
// create the process list with createProcessList, store the pointed to address
|
||||||
pcbList = createProcessList();
|
pcbList = createProcessList();
|
||||||
// fill the process list given the metadata
|
// fill the process list given the metadata
|
||||||
|
|
@ -243,6 +266,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr)
|
||||||
// function holds master loop, loops until sys end opcode found OR wkgPtrMaster nextNode != NULL
|
// 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") && compareString(command, "sys")))
|
||||||
{
|
{
|
||||||
|
currentPid = scheduleProcess(pcbList, configPtr);
|
||||||
// will have a loop that goes from app start to app end for a PCB
|
// 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?
|
// (checks to see if the next instruction is NOT app end), using getNextProcess?
|
||||||
// this will getNextOpCode
|
// this will getNextOpCode
|
||||||
|
|
@ -259,7 +283,7 @@ void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr)
|
||||||
//
|
//
|
||||||
// deallocate the process list with destroyProcessList
|
// deallocate the process list with destroyProcessList
|
||||||
destroyProcessList(pcbList);
|
destroyProcessList(pcbList);
|
||||||
//printf("runSim called here");
|
// once complete, log the output to FILE if required
|
||||||
// void function, no return.
|
// void function, no return.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -276,7 +300,9 @@ Dependencies: ???
|
||||||
*/
|
*/
|
||||||
int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr)
|
int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPtr)
|
||||||
{
|
{
|
||||||
|
ProcessControlBlock *wkgPtr;
|
||||||
int returnPid = -1;
|
int returnPid = -1;
|
||||||
|
wkgPtr = headPointer->headPtr;
|
||||||
// switch case for each scheduling algorithm
|
// switch case for each scheduling algorithm
|
||||||
switch (configPtr->cpuSchedCode)
|
switch (configPtr->cpuSchedCode)
|
||||||
{
|
{
|
||||||
|
|
@ -287,6 +313,19 @@ int scheduleProcess(ProcessControlBlockLL *headPointer, ConfigDataType *configPt
|
||||||
// will set the state to READY, return the pid of the process which
|
// will set the state to READY, return the pid of the process which
|
||||||
// was set to ready.
|
// was set to ready.
|
||||||
// ignores any process which has a state of TERMINATED
|
// 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;
|
||||||
|
// }
|
||||||
break;
|
break;
|
||||||
case CPU_SCHED_FCFS_P_CODE:
|
case CPU_SCHED_FCFS_P_CODE:
|
||||||
// TODO: First Come, First Served, Preemptive Scheduling
|
// TODO: First Come, First Served, Preemptive Scheduling
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,17 @@ Dependencies: ???
|
||||||
*/
|
*/
|
||||||
ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBlockLL *headPointer);
|
ProcessControlBlockLL *fillProcessList(OpCodeType *metadataPtr, ProcessControlBlockLL *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 *)
|
||||||
|
Function Output/Parameters: none
|
||||||
|
Function Output/Returned: none
|
||||||
|
Device Input/Device: none
|
||||||
|
Device Output/Device: none
|
||||||
|
Dependencies: sprintf, ???
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Name: runSim
|
Name: runSim
|
||||||
Process: primary simulation driver
|
Process: primary simulation driver
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue