home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / sps2 / part02 / sps.h < prev    next >
C/C++ Source or Header  |  1991-01-08  |  7KB  |  218 lines

  1. # ifndef lint
  2. static char SpsHId[] =  "@(#)sps.h    1.3\t7/4/90" ;
  3. # endif
  4.  
  5. # ifdef SUNOS40
  6. #  define KERNEL
  7. # endif SUNOS40
  8. # include    <h/param.h>
  9. # undef KERNEL
  10. # include    <h/dir.h>
  11. # include    <h/user.h>
  12. # include    <h/proc.h>
  13.  
  14. # ifdef SUNOS40
  15. #  ifndef BSD43
  16. #   define BSD43
  17. # endif BSD43
  18. # endif SUNOS40
  19.  
  20. /*
  21. ** Maximum # of users to be considered. (Because user names are stored
  22. ** in a hash table, this should probably be at least double the number
  23. ** of actual users defined in /etc/passwd or by the Yellow Pages.)
  24. */
  25. # define    MAXUSERS    100
  26. /* Maximum # ttys to be considered, plus 1 for the console ... */
  27. # define    MAXTTYS        97
  28.  
  29.  
  30. /* Maximum user name length ... */
  31. # define    UNAMELEN    8
  32. /* Maximum process-id not to be considered busy ... */
  33. # define    MSPID        2
  34. /* # of wait states defined in the `struct info' ... */
  35. # ifdef NFS
  36. #  ifdef SUN
  37. #   define    NWAITSTATE    16
  38. #  else
  39. #   define    NWAITSTATE    36
  40. #  endif SUN
  41. # else NFS
  42. #  ifdef ULTRIX20
  43. #   define    NWAITSTATE    36
  44. #  else ULTRIX20
  45. #   define    NWAITSTATE    35
  46. #  endif ULTRIX20
  47. # endif NFS
  48.  
  49. /* Convert clicks to kbytes ... */
  50. # ifndef PGSHIFT
  51. #  define    KBYTES( size )    ((size) << 1)
  52. # else PGSHIFT
  53. #  if PGSHIFT > 10
  54. #   define        KBYTES( size )  ((size) << (PGSHIFT - 10))
  55. #  else
  56. #   define    KBYTES( size )    ((size) >> (10 - PGSHIFT))
  57. #  endif
  58. # endif PGSHIFT
  59.  
  60. /* Standard files to be examined ... */
  61. # define    FILE_MEM    "/dev/mem"    /* System physical memory */
  62. # define    FILE_KMEM    "/dev/kmem"    /* Kernel virtual memory */
  63. # define    FILE_SWAP    "/dev/drum"    /* Swap/paging device */
  64. # define    FILE_DEV    "/dev"        /* Directory of tty entries */
  65. # define    FILE_SYMBOL    "/vmunix"    /* Symbol file for nlist() */
  66. # define    FILE_INFO    "/tmp/.spsinfo"    /* Sps information file */
  67. # define    FILE_PASSWD    "/etc/passwd"    /* User database */
  68.  
  69. /* Structure to hold necessary information concerning a tty ... */
  70. struct ttyline
  71. {
  72.     char            l_name[2] ;    /* Tty character name */
  73.     unsigned short        l_pgrp ;    /* Tty process group */
  74. # ifdef SUNOS40
  75.     struct streamtab    *l_addr ;    /* Ptr to streamtab in kmem */
  76.     struct stdata        *l_stdata ;    /* Ptr to stdata at runtime */
  77. # else SUNOS40
  78.     struct tty        *l_addr ;    /* Ptr to tty struct in kmem */
  79. # endif SUNOS40
  80.     dev_t            l_dev ;        /* Tty device # */
  81. } ;
  82.  
  83. /* Structure holding a single hash table entry ... */
  84. struct hashtab
  85. {
  86.     short            h_uid ;        /* Uid of user entry */
  87.     char            h_uname[ UNAMELEN ] ; /* Corresponding name */
  88. } ;
  89.  
  90. /*
  91. ** Format of the standard information file maintained by sps.
  92. ** This structure is filled in at initialisation time and then is read back
  93. ** in whenever sps is invoked.
  94. ** Note that the pointer variables in this structure refer to
  95. ** kernel virtual addresses, not addresses within sps.
  96. ** These variable are typed as such so that pointer arithmetic
  97. ** on the kernel addresses will work correctly.
  98. */
  99. struct info
  100. {    /* Kernel values determining process, tty and upage info ... */
  101.     struct proc        *i_proc0 ;    /* address of process table */
  102.     int            i_nproc ;    /* length of process table */
  103. # ifndef SUNOS40
  104.     struct text        *i_text0 ;    /* address of text table */
  105. # endif SUNOS40
  106.     int            i_ntext ;    /* length of text table */
  107. # ifdef ULTRIX20
  108.     struct gnode        *i_inode0 ;    /* address of inode table */
  109. # else ULTRIX20
  110.     struct inode        *i_inode0 ;    /* address of inode table */
  111. # endif ULTRIX20
  112.     int            i_ninode ;    /* length of inode table */
  113.     int            i_ecmx ;    /* max physical memory address*/
  114. # ifndef SUNOS40
  115.     struct buf        *i_swbuf0 ;    /* address of swap buffers */
  116.     int            i_nswbuf ;    /* # swap buffers */
  117.     struct buf        *i_buf0 ;    /* address of i/o buffers */
  118.     int            i_nbuf ;    /* # i/o buffers */
  119.     struct pte        *i_usrptmap ;    /* page table map */
  120.     struct pte        *i_usrpt ;    /* page table map */
  121. # endif SUNOS40
  122.     struct cdevsw        *i_cdevsw ;    /* device switch to find ttys */
  123. # ifdef BSD42
  124. #  ifdef NFS
  125.     struct dquot        *i_quota0 ;    /* disc quota structures */
  126. #  else NFS
  127.     struct quota        *i_quota0 ;    /* disc quota structures */
  128. #  endif NFS
  129.     int            i_nquota ;    /* # quota structures */
  130.     int            i_dmmin ;    /* The start of the disc map */
  131.     int            i_dmmax ;    /* The end of the disc map */
  132.     struct mbuf        *i_mbutl ;    /* Start of mbuf area */
  133. # else BSD42
  134.     int            i_hz ;        /* Clock rate */
  135. # endif BSD42
  136. # ifdef CHAOS
  137.     caddr_t            i_Chconntab ;    /* Chaos connection table */
  138. # endif
  139.     /* Kernel addresses are associated with process wait states ... */
  140.     caddr_t            i_waitstate[ NWAITSTATE ] ;
  141.     /* User names, stored in a hash table ... */
  142.     struct hashtab        i_hnames[ MAXUSERS ] ;
  143.     /* Tty device info ... */
  144.     struct ttyline        i_ttyline[ MAXTTYS ] ;
  145. # ifdef SUNOS40
  146.     struct seg_ops        *i_segvn_ops ;    /* ptr to vnode segment ops */
  147.     struct pty        *i_ptybase ;
  148.     int            i_npty ;
  149. #  ifdef SUNOS41
  150.     struct strstat        *i_strst;
  151.     struct stdata        *i_allstream;
  152. #  else SUNOS41
  153.     struct stdata        *i_streams ;    /* streams list */
  154.     struct stdata        *i_streamsNSTREAMS ;
  155. #  endif SUNOS41
  156.     caddr_t            i_sysbase ;
  157. # endif SUNOS40
  158. } ;
  159.  
  160. /*
  161. ** The symbol structure cross-references values read from the kernel with
  162. ** their place in the info structure, and if such a value is associated with
  163. ** a process wait state or not.
  164. */
  165. struct symbol
  166. {
  167.     char            *s_kname ;    /* Kernel symbol name */
  168.     char            s_indirect ;    /* Value requires indirection */
  169.     caddr_t            *s_info ;    /* Corresponding info address */
  170.     char            *s_wait ;    /* Reason for wait, if any */
  171. } ;
  172.  
  173. /* The `user' structure obtained from /dev/mem or /dev/swap ... */
  174. union userstate
  175. {
  176.     struct user        u_us ;
  177.     char            u_pg[ UPAGES ][ NBPG ] ;
  178. } ;
  179.  
  180. /* Information concerning each process filled from /dev/kmem ... */
  181. struct process
  182. {
  183.     struct proc        pr_p ;        /* struct proc from /dev/kmem */
  184.     struct process        *pr_plink ;    /* Normalised ptrs from above */
  185.     struct process        *pr_sibling ;    /* Ptr to sibling process */
  186.     struct process        *pr_child ;    /* Ptr to child process */
  187.     struct process        *pr_pptr ;    /* Ptr to parent process */
  188. # ifdef BSD42
  189.     struct rusage        pr_rself ;    /* Read from upage for self */
  190.     struct rusage        pr_rchild ;    /* ... and the children */
  191. # else BSD42
  192.     struct vtimes        pr_vself ;    /* Read from upage for self */
  193.     struct vtimes        pr_vchild ;    /* ... and the children */
  194. # endif BSD42
  195.     int            pr_files ;    /* # open files */
  196.     struct ttyline        *pr_tty ;    /* Associated tty information */
  197.     char            *pr_cmd ;    /* Command args, from upage */
  198.     int            pr_upag:1 ;    /* Upage was obtained */
  199.     int            pr_csaved:1 ;    /* Cmd args saved by malloc() */
  200. # ifdef SUNOS40
  201.     unsigned        pr_private ;    /* private pages */
  202.     unsigned        pr_shared ;    /* shared pages */
  203. # endif SUNOS40
  204. } ;
  205.  
  206. /* Structure to hold summarising information ... */
  207. struct summary
  208. {
  209.     long            sm_ntotal ;    /* Total # processes */
  210.     long            sm_ktotal ;    /* Total virtual memory */
  211.     long            sm_nbusy ;    /* # busy processes */
  212.     long            sm_kbusy ;    /* Busy virtual memory */
  213.     long            sm_nloaded ;    /* # loaded processes */
  214.     long            sm_kloaded ;    /* Active resident memory */
  215.     long            sm_nswapped ;    /* # swapped processes */
  216.     long            sm_kswapped ;    /* Size totally swapped out */
  217. } ;
  218.