home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilss / sockets / include / sys / h / sem < prev    next >
Encoding:
Text File  |  1995-01-11  |  3.0 KB  |  120 lines

  1. /*
  2.  * $Header: /ax/networking:include/sys/sem.h:networking  1.1  $
  3.  * $Source: /ax/networking:include/sys/sem.h: $
  4.  *
  5.  * Copyright (c) 1988 Acorn Computers Ltd., Cambridge, England
  6.  *
  7.  * $Log:    sem.h,v $
  8.  * Revision 1.1  95/01/11  10:19:43  kwelton
  9.  * Initial revision
  10.  * 
  11.  * Revision 1.3  88/06/17  20:20:55  beta
  12.  * Acorn Unix initial beta version
  13.  * 
  14.  */
  15. /*
  16. **    IPC Semaphore Facility.
  17. */
  18.  
  19. /*
  20. **    Implementation Constants and system limits.
  21. */
  22.  
  23. #define    PSEM    (PZERO + 2)    /* sleep priority */
  24.  
  25. /* The implementation assumes all these limits are small */
  26.  
  27. #define NSEMID        5    /* Max semaphore ids in system */
  28. #define NSEMSINSET    5    /* Max semaphores in one set */
  29. #define SEMMAXOPS    5    /* Max ops in one semop() call */
  30. #define SEMMAXVAL    1000    /* Limit on semaphore value */
  31. #define SEMMAXADJ    1000    /* un_semadj limited to + or - this */
  32. #define NUNDOPERPROC    5    /* Max undo entries per process */
  33. #define NUNDO        5    /* Max processes with undo structures */ 
  34.  
  35. /*
  36. **    Permission Definitions.
  37. */
  38.  
  39. #define    SEM_A    0200    /* alter permission */
  40. #define    SEM_R    0400    /* read permission */
  41.  
  42. /*
  43. **    Semaphore Operation Flags.
  44. */
  45.  
  46. #define    SEM_UNDO    010000    /* set up adjust on exit entry */
  47.  
  48. /*
  49. **    Semctl Command Definitions.
  50. */
  51.  
  52. #define    GETNCNT    3    /* get semncnt */
  53. #define    GETPID    4    /* get sempid */
  54. #define    GETVAL    5    /* get semval */
  55. #define    GETALL    6    /* get all semval's */
  56. #define    GETZCNT    7    /* get semzcnt */
  57. #define    SETVAL    8    /* set semval */
  58. #define    SETALL    9    /* set all semval's */
  59.  
  60. /*
  61. **    Structure Definitions.
  62. */
  63.  
  64. /*
  65. **    There is one semaphore id data structure for each set of semaphores
  66. **    in the system. Since the limits specified in the SVID are
  67. **      1) Number of semid_ds structures in system
  68. **      2) Number of semaphores per semid
  69. **    (with no separate limit on total semaphores in system),
  70. **    we simply include a maximum-size array of semaphores in each
  71. **    semid_ds structure.
  72. */
  73.  
  74. struct semid_ds {
  75.     struct ipc_perm    sem_perm;    /* operation permission struct */
  76.     ushort        sem_nsems;    /* # of semaphores in set */
  77.     time_t        sem_otime;    /* last semop time */
  78.     time_t        sem_ctime;    /* last change time */
  79.     /* End of fields defined in SVID */
  80.     struct sem    sem_sems[NSEMSINSET];    /* set of semaphores */
  81. };
  82.  
  83. /*
  84. **    There is one semaphore structure for each semaphore in the system.
  85. */
  86.  
  87. struct sem {
  88.     ushort    semval;        /* semaphore text map address */
  89.     short    sempid;        /* pid of last operation */
  90.     ushort    semncnt;    /* # awaiting semval > cval */
  91.     ushort    semzcnt;    /* # awaiting semval = 0 */
  92. };
  93.  
  94. /*
  95. **    An undo structure is allocated to each process which requests
  96. **      one (up to the NUNDO limit).
  97. */
  98.  
  99. struct sem_undo {
  100.       int un_pid;    /* Process which owns this undo struct (-1 if none) */
  101.     struct undo {
  102.         int    un_semadj;    /* Adjustment value */
  103.         /* Unused slots have un_semadj set to zero */
  104.         int    un_semid;    /* Semaphore id */
  105.         int    un_semnum;    /* Semaphore number */
  106.     } un_ent[NUNDOPERPROC];    /* undo entries */
  107. };
  108.  
  109. /*
  110. **    User semaphore template for semop system calls.
  111. */
  112.  
  113. struct sembuf {
  114.     ushort    sem_num;    /* semaphore # */
  115.     short    sem_op;        /* semaphore operation */
  116.     short    sem_flg;    /* operation flags */
  117. };
  118.  
  119. /* EOF sem.h */
  120.