|
|
1.1 ! root 1: /* user.h 2.1 1/5/80 */ ! 2: ! 3: #ifdef KERNEL ! 4: #include "../h/pcb.h" ! 5: #include "../h/dmap.h" ! 6: #else ! 7: #include <sys/pcb.h> ! 8: #include <sys/dmap.h> ! 9: #endif ! 10: /* ! 11: * The user structure. ! 12: * One allocated per process. ! 13: * Contains all per process data ! 14: * that doesn't need to be referenced ! 15: * while the process is swapped. ! 16: * The user block is UPAGES*512 bytes ! 17: * long; resides at virtual kernel ! 18: * loc 80040000; contains the system ! 19: * stack per user; is cross referenced ! 20: * with the proc structure for the ! 21: * same process. ! 22: */ ! 23: ! 24: #define EXCLOSE 01 ! 25: ! 26: struct user ! 27: { ! 28: struct pcb u_pcb; /* pcb, save area when exchanging stacks */ ! 29: label_t u_rsav; ! 30: char u_segflg; /* IO flag: 0:user D; 1:system; 2:user I */ ! 31: char u_error; /* return error code */ ! 32: short u_uid; /* effective user id */ ! 33: short u_gid; /* effective group id */ ! 34: short u_ruid; /* real user id */ ! 35: short u_rgid; /* real group id */ ! 36: struct proc *u_procp; /* pointer to proc structure */ ! 37: int *u_ap; /* pointer to arglist */ ! 38: union { /* syscall return values */ ! 39: struct { ! 40: int r_val1; ! 41: int r_val2; ! 42: }; ! 43: off_t r_off; ! 44: time_t r_time; ! 45: } u_r; ! 46: caddr_t u_base; /* base address for IO */ ! 47: unsigned int u_count; /* bytes remaining for IO */ ! 48: off_t u_offset; /* offset in file for IO */ ! 49: struct inode *u_cdir; /* pointer to inode of current directory */ ! 50: struct inode *u_rdir; /* root directory of current process */ ! 51: char u_dbuf[DIRSIZ]; /* current pathname component */ ! 52: caddr_t u_dirp; /* pathname pointer */ ! 53: struct direct u_dent; /* current directory entry */ ! 54: struct inode *u_pdir; /* inode of parent directory of dirp */ ! 55: struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */ ! 56: char u_pofile[NOFILE]; /* per-process flags of open files */ ! 57: int u_arg[5]; /* arguments to current system call */ ! 58: label_t u_qsav; /* label variable for quits and interrupts */ ! 59: label_t u_ssav; /* label variable for swapping */ ! 60: int u_signal[NSIG]; /* disposition of signals */ ! 61: time_t u_utime; /* this process user time */ ! 62: time_t u_stime; /* this process system time */ ! 63: time_t u_cutime; /* sum of childs' utimes */ ! 64: time_t u_cstime; /* sum of childs' stimes */ ! 65: int *u_ar0; /* address of users saved R0 */ ! 66: struct uprof { /* profile arguments */ ! 67: short *pr_base; /* buffer base */ ! 68: unsigned pr_size; /* buffer size */ ! 69: unsigned pr_off; /* pc offset */ ! 70: unsigned pr_scale; /* pc scaling */ ! 71: } u_prof; ! 72: char u_intflg; /* catch intr from sys */ ! 73: char u_sep; /* flag for I and D separation */ ! 74: struct tty *u_ttyp; /* controlling tty pointer */ ! 75: dev_t u_ttyd; /* controlling tty dev */ ! 76: struct { /* header of executable file */ ! 77: int ux_mag; /* magic number */ ! 78: unsigned ux_tsize; /* text size */ ! 79: unsigned ux_dsize; /* data size */ ! 80: unsigned ux_bsize; /* bss size */ ! 81: unsigned ux_ssize; /* symbol table size */ ! 82: unsigned ux_entloc; /* entry location */ ! 83: unsigned ux_unused; ! 84: unsigned ux_relflg; ! 85: } u_exdata; ! 86: char u_comm[DIRSIZ]; ! 87: time_t u_start; ! 88: char u_acflag; ! 89: short u_fpflag; /* unused now, will be later */ ! 90: short u_cmask; /* mask for file creation */ ! 91: size_t u_tsize; /* text size (clicks) */ ! 92: size_t u_dsize; /* data size (clicks) */ ! 93: size_t u_ssize; /* stack size (clicks) */ ! 94: int u_nswap; /* no times swapped */ ! 95: int u_majorflt; /* number of major faults */ ! 96: int u_cnswap; /* no times children swapped */ ! 97: int u_cmajorflt; /* no major faults in child */ ! 98: int u_averss; /* time average of resident set size */ ! 99: int u_minorflt; /* number of minor faults */ ! 100: struct dmap u_dmap; /* disk map for data segment */ ! 101: struct dmap u_smap; /* disk map for stack segment */ ! 102: struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for ! 103: use of parent during fork */ ! 104: int u_ustklim; /* max stack growth */ ! 105: char u_uwantcore; /* dump core even if large */ ! 106: time_t u_outime; /* user time at last sample */ ! 107: size_t u_odsize; ! 108: size_t u_ossize; ! 109: size_t u_vrpages[NOFILE]; /* number vread pages hanging on fd */ ! 110: int u_stack[1]; ! 111: ! 112: /* ! 113: * kernel stack per user ! 114: * extends from u + UPAGES*512 ! 115: * backward not to reach here ! 116: */ ! 117: }; ! 118: ! 119: /* u_error codes */ ! 120: #define EPERM 1 ! 121: #define ENOENT 2 ! 122: #define ESRCH 3 ! 123: #define EINTR 4 ! 124: #define EIO 5 ! 125: #define ENXIO 6 ! 126: #define E2BIG 7 ! 127: #define ENOEXEC 8 ! 128: #define EBADF 9 ! 129: #define ECHILD 10 ! 130: #define EAGAIN 11 ! 131: #define ENOMEM 12 ! 132: #define EACCES 13 ! 133: #define EFAULT 14 ! 134: #define ENOTBLK 15 ! 135: #define EBUSY 16 ! 136: #define EEXIST 17 ! 137: #define EXDEV 18 ! 138: #define ENODEV 19 ! 139: #define ENOTDIR 20 ! 140: #define EISDIR 21 ! 141: #define EINVAL 22 ! 142: #define ENFILE 23 ! 143: #define EMFILE 24 ! 144: #define ENOTTY 25 ! 145: #define ETXTBSY 26 ! 146: #define EFBIG 27 ! 147: #define ENOSPC 28 ! 148: #define ESPIPE 29 ! 149: #define EROFS 30 ! 150: #define EMLINK 31 ! 151: #define EPIPE 32 ! 152: #define EDOM 33 ! 153: #define ERANGE 34 ! 154: ! 155: #ifdef KERNEL ! 156: extern struct user u; ! 157: extern struct user swaputl; ! 158: extern struct user forkutl; ! 159: extern struct user xswaputl; ! 160: extern struct user xswap2utl; ! 161: extern struct user pushutl; ! 162: extern struct user vfutl; ! 163: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.