[ C++ RCOS Home | RCOS.java Home | RCOS Home | David's Home ]
Name: |
Exec |
Comment: |
This class performs all process control operations. There will only be one of him which is a private member of the Kernel (only one of her, too). When instantiated by the kernel, the class receives a reference to the kernel (sort of like device drivers) which it may use to send/post messages. |
Collaborators: |
struct sh_tag |
class Exec {
Knl *pTx; // pointer to out master's post box
Pque PqIn; // input queue (initialized, not started)
Pque PqBlocked; // Procs waiting on an event
Pque PqSusReady; // Procs suspended while ready
Pque PqSusBlock; // Procs suspended while blocked
Pque PqReady; // Procs ready to roll (perhaps rock, too)
PCB arrPCB[MAX_PROC]; // array of PCB structures
MCB arrMCB[MAX_PROC]; // per process region table structures
Sem4 arrSem[MAX_SEM]; // array of available semaphores
QmMgr ShareMem; // shared memory manager
UINT16 nQuantum; // default quantum per process
UINT16 uProcCnt; // current number of processes in system
UINT16 uCurProc; // current (running) proc - if any
BOOL LoSked (UINT16); // Low Level scheduler (for I/P queue)
void Sked (void); // dispatch next ready process to CPU
UINT16 Fork (void); // create new process from current
BOOL Kill (UINT16); // remove process
BOOL Start (UINT16); // move it from input to ready
BOOL Resume (UINT16); // resume suspended process
BOOL Suspend (UINT16); // suspend this process
void RunCon (PCB&); // Run the Console process
void RunProc (PCB&, MCB&); // Run the current User process
void DeCode (UINT32, char*); // decode a p-code
void CreateCon (void); // Create the "console" process
void InitCon (void); // Pre-start code for console
void ParseCon (char*); // Parse and action operator commands
UINT16 IpcOpen (char*); // register as user of named semaphore
UINT16 IpcAlloc (char*, UINT16);// allocate next free for use & set count
INT16 IpcWait (UINT16, UINT16);// process wants to use this samaphore
void IpcSignal(UINT16,UINT16);// process finished with it for now
void IpcClose (UINT16,UINT16);// free and release (if no other users)
INT16 SmOpen (char*); // open existing shared mem by name
INT16 SmCreate (char*, UINT16);// create named/annon shared mem block
INT16 SmClose (UINT16, UINT16);// close usage of shared mem for process
INT16 SmLength (UINT16); // get length of shared mem block from ID
BOOL SmRead (UINT16,UINT16,INT16*); // get int data of block at offset
BOOL SmWrite (UINT16,UINT16,INT16*); // set int data of block at offset
public:
Exec (Knl*, UINT16); // Initialize Exec (and Console)
~Exec (void); // Complete close down procedure
void Block (void); // Block current process
BOOL Dispatch (void); // Ready Queue manager
void StartCon (void); // Startup process Zero (console)
void PostReply (UINT16, PMSG); // Add message to queue for process
void GetPcom (PMSG_ANIP); // Snapshot current PCB
void GetQcom (UINT16, PMSG_ANIQ); // Snapshot Queue contents
};