89 lines
No EOL
2.5 KiB
C
89 lines
No EOL
2.5 KiB
C
#ifndef SIMULATORX
|
|
#define SIMULATORX
|
|
|
|
#include "StandardConstants.h"
|
|
#include "configops.h"
|
|
#include "metadataops.h"
|
|
#include "simtimer.h"
|
|
|
|
// data structures
|
|
|
|
typedef enum{
|
|
PROCESS_STATE_NEW = 0,
|
|
PROCESS_STATE_READY,
|
|
PROCESS_STATE_RUNNING,
|
|
PROCESS_STATE_BLOCKED,
|
|
PROCESS_STATE_TERMINATED
|
|
} PROCESS_STATES;
|
|
|
|
typedef struct ProcessControlBlockStruct
|
|
{
|
|
int uniquePid;
|
|
PROCESS_STATES process_state;
|
|
// need a process start ptr for where the process starts.
|
|
// this will be a mini loop within the master loop that goes until it
|
|
// hits the app end command.
|
|
// it may hold the next opcode, since you don't need to traverse backward
|
|
// have an IO cycle count here
|
|
// have a CPU cycle count here
|
|
// maybe have a total cycle count here
|
|
// time left could be calculated from these.
|
|
// potentially could change the cycles or have a 'left' variable to
|
|
// see how many are left.
|
|
// also need a time left state here?
|
|
} ProcessControlBlock;
|
|
|
|
/*
|
|
Name: ???
|
|
Process: ???
|
|
Function Input/Parameters: ???
|
|
Function Output/Parameters: none
|
|
Function Output/Returned: none
|
|
Device Input/Device: none
|
|
Device Output/Device: none
|
|
Dependencies: ???
|
|
*/
|
|
// need a function (or functions) to handle FILE I/O?
|
|
// runSim function will have a FILE *
|
|
// will have a function that gets the FILE * and
|
|
// adds whatever operation occurred
|
|
|
|
/*
|
|
Name: ???
|
|
Process: ???
|
|
// Function Input/Parameters: ???
|
|
Function Output/Parameters: none
|
|
Function Output/Returned: none
|
|
Device Input/Device: none
|
|
Device Output/Device: none
|
|
Dependencies: ???
|
|
*/
|
|
// need a function for the global/local timer (given??? may need to just import)
|
|
|
|
// need a function for scheduler/dispatcher
|
|
// this could use a switch statement to tell which scheduling method to choose from.
|
|
// Sim02 only requires FCFS working atm.
|
|
|
|
// need a function called createProcessList
|
|
// this makes a linked list of PCBs, loads the first instruction after app start
|
|
// and ...
|
|
|
|
// need a function called destroyProcessList
|
|
// deallocated the ll of PCBs recursively, frees the rest of the struct.
|
|
|
|
//
|
|
|
|
/*
|
|
Name: runSim
|
|
Process: primary simulation driver
|
|
Function Input/Parameters: configuration data (ConfigDataType *),
|
|
metadata (OpCodeType *)
|
|
Function Output/Parameters: none
|
|
Function Output/Returned: none
|
|
Device Input/Device: none
|
|
Device Output/Device: none
|
|
Dependencies: ???
|
|
*/
|
|
void runSim(ConfigDataType *configPtr, OpCodeType *metaDataMstrPtr);
|
|
|
|
#endif // SIMULATORX
|