[ C++ RCOS Home | RCOS.java Home | RCOS Home | David's Home ]

RCOS C++ CRC for class sem4

Name:

sem4

Comment:

Semaphores are used by running processes for Inter-Process Communication (IPC) synchronisation. They are identified by power of 2 integer values. Each PID holds bit maps for semaphores they have created, ones they have "set" and ones they are waiting (delayed) on. Since a semaphore must be identified to the PLL/2 compiler by an integer, and since PLL/2 ints are 16 bit, this limits us to a max of 16 samaphores..

Collaborators:

DblList

Responsibilities:

  class Sem4 {
    Pque   uPid,                // list of users (semaphore is free when empty)
           uDelayed;            // priority list of waiting users
    UINT16 uCount,              // current p/v count, set when created
           uCreator;            // PID# of process that first opened it
    char   *pst;                // optional user supplied name
  public:
    Sem4 (void);
   ~Sem4 (void);
    void   SemOpen (PCB&, UINT16, char*);
    BOOL   operator == (char*); // match with semaphore name
    BOOL   SemWait (PCB&);      // this user wants the batton
    BOOL   SemSignal (void);    // release held semaphore
    BOOL   SemIsFree (void);    // test for any current users
    BOOL   SemIsUser (PCB&);    // test for specific user
    BOOL   SemAddUser (PCB&);   // enroll new user
    BOOL   SemDelUser (PCB&);   // remove all trace of user (may deallocate)
    UINT16 SemGetDelayed (void);// get the head of the delayed task queue
    UINT16 SemGetDelayed (UINT16); // get specific PID from delayed task Q
    UINT16 SemGetCount (void) { return uCount; };
  };