|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 6542 (0x198e) Types: TextFile Names: »sps.h«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec8/sps/sps.h«
# include <h/param.h> # include <h/dir.h> # include <h/user.h> # include <h/proc.h> /* ** Maximum # of users to be considered. (Should probably be ** approximately double the # of users in /etc/passwd.) */ # define MAXUSERID 200 /* Maximum # ttys to be considered ... */ # define MAXTTYS 150 /* Maximum user name length ... */ # define UNAMELEN 8 /* Maximum process-id not to be considered busy ... */ # define MSPID 2 /* # of wait states defined in the `struct info' ... */ # ifdef SUN # define NWAITSTATE 16 # else # define NWAITSTATE 35 # endif /* Convert clicks to kbytes ... */ # ifdef SUN # define KBYTES( size ) ((size) << 1) # else # define KBYTES( size ) ((size) >> (10 - PGSHIFT)) # endif /* Standard files to be examined ... */ # define FILE_MEM "/dev/mem" /* System physical memory */ # define FILE_KMEM "/dev/kmem" /* Kernel virtual memory */ # define FILE_SWAP "/dev/drum" /* Swap/paging device */ # define FILE_DEV "/dev" /* Directory of tty entries */ # define FILE_SYMBOL "/vmunix" /* Symbol file for nlist() */ # define FILE_INFO "/etc/spsinfo" /* Sps information file */ # define FILE_PASSWD "/etc/passwd" /* User database */ /* Structure to hold necessary information concerning a tty ... */ struct ttyline { struct tty *l_addr ; /* Ptr to tty struct in kmem */ unsigned short l_pgrp ; /* Tty process group */ char l_name[2] ; /* Tty character name */ dev_t l_dev ; /* Tty device # */ } ; /* Structure holding a single hash table entry ... */ struct hashtab { short h_uid ; /* Uid of user entry */ char h_uname[ UNAMELEN ] ; /* Corresponding name */ } ; /* ** Format of the standard information file maintained by sps. ** This structure is filled in at initialisation time and then is read back ** in whenever sps is invoked. ** Note that the pointer variables in this structure refer to ** kernel virtual addresses, not addresses within sps. ** These variable are typed as such so that pointer arithmetic ** on the kernel addresses will work correctly. */ struct info { /* Kernel values determining process, tty and upage info ... */ struct proc *i_proc0 ; /* address of process table */ int i_nproc ; /* length of process table */ struct text *i_text0 ; /* address of text table */ int i_ntext ; /* length of text table */ struct inode *i_inode0 ; /* address of inode table */ int i_ninode ; /* length of inode table */ struct buf *i_swbuf0 ; /* address of swap buffers */ int i_nswbuf ; /* # swap buffers */ struct buf *i_buf0 ; /* address of i/o buffers */ int i_nbuf ; /* # i/o buffers */ int i_ecmx ; /* max physical memory address*/ struct pte *i_usrptmap ; /* page table map */ struct pte *i_usrpt ; /* page table map */ struct cdevsw *i_cdevsw ; /* device switch to find ttys */ # ifdef BSD42 struct quota *i_quota0 ; /* disc quota structures */ int i_nquota ; /* # quota structures */ int i_dmmin ; /* The start of the disc map */ int i_dmmax ; /* The end of the disc map */ struct mbuf *i_mbutl ; /* Start of mbuf area */ # else int i_hz ; /* Clock rate */ # endif # ifdef CHAOS caddr_t i_Chconntab ; /* Chaos connection table */ # endif /* Kernel addresses are associated with process wait states ... */ caddr_t i_waitstate[ NWAITSTATE ] ; /* User names, stored in a hash table ... */ struct hashtab i_hnames[ MAXUSERID ] ; /* Tty device info ... */ struct ttyline i_ttyline[ MAXTTYS ] ; } ; /* ** The symbol structure cross-references values read from the kernel with ** their place in the info structure, and if such a value is associated with ** a process wait state or not. */ struct symbol { char *s_kname ; /* Kernel symbol name */ char s_indirect ; /* Value requires indirection */ caddr_t *s_info ; /* Corresponding info address */ char *s_wait ; /* Reason for wait, if any */ } ; /* The `user' structure obtained from /dev/mem or /dev/swap ... */ union userstate { struct user u_us ; char u_pg[ UPAGES ][ NBPG ] ; } ; /* Information concerning each process filled from /dev/kmem ... */ struct process { struct proc pr_p ; /* struct proc from /dev/kmem */ struct process *pr_plink ; /* Normalised ptrs from above */ struct process *pr_sibling ; /* Ptr to sibling process */ struct process *pr_child ; /* Ptr to child process */ struct process *pr_pptr ; /* Ptr to parent process */ # ifdef BSD42 struct rusage pr_rself ; /* Read from upage for self */ struct rusage pr_rchild ; /* ... and the children */ # else struct vtimes pr_vself ; /* Read from upage for self */ struct vtimes pr_vchild ; /* ... and the children */ # endif int pr_files ; /* # open files */ struct ttyline *pr_tty ; /* Associated tty information */ char *pr_cmd ; /* Command args, from upage */ int pr_upag:1 ; /* Upage was obtained */ int pr_csaved:1 ; /* Cmd args saved by malloc() */ } ; /* Structure to hold summarising information ... */ struct summary { long sm_ntotal ; /* Total # processes */ long sm_ktotal ; /* Total virtual memory */ long sm_nbusy ; /* # busy processes */ long sm_kbusy ; /* Busy virtual memory */ long sm_nloaded ; /* # loaded processes */ long sm_kloaded ; /* Active resident memory */ long sm_nswapped ; /* # swapped processes */ long sm_kswapped ; /* Size totally swapped out */ } ;