|
|
1.1 root 1: #include <sys/pcb.h>
2: #include <sys/dmap.h>
3: #include <sys/vtimes.h>
4: /*
5: * The user structure.
6: * One allocated per process.
7: * Contains all per process data
8: * that doesn't need to be referenced
9: * while the process is swapped.
10: * The user block is UPAGES*NBPG bytes
11: * long; resides at virtual user
12: * loc 0x80000000-UPAGES*NBPG; contains the system
13: * stack per user; is cross referenced
14: * with the proc structure for the
15: * same process.
16: */
17:
18: #define SHSIZE 32
19: #define NOGROUP (short)-1 /* endmarker */
20: /* should NGROUPS be here? */
21:
22: struct user
23: {
24: struct pcb u_pcb;
25: int junk1; /* temp; pcb shrank */
26: int u_arg[5]; /* arguments to current system call */
27: label_t u_qsav; /* for non-local gotos on interrupts */
28: char u_segflg; /* 0:user D; 1:system; 2:user I */
29: #define SEGUDATA 0
30: #define SEGSYS 1
31: #define SEGUINST 2
32: char u_error; /* return error code */
33: short u_uid; /* effective user id */
34: short u_gid; /* effective group id */
35: short u_ruid; /* real user id */
36: short u_rgid; /* real group id */
37: short u_groups[NGROUPS]; /* array of groups really looked at */
38: struct proc *u_procp; /* pointer to proc structure */
39: int *u_ap; /* pointer to arglist */
40: union { /* syscall return values */
41: struct {
42: int R_val1;
43: int R_val2;
44: } u_rv;
45: #define r_val1 u_rv.R_val1
46: #define r_val2 u_rv.R_val2
47: off_t r_off;
48: time_t r_time;
49: } u_r;
50: caddr_t u_base; /* base address for IO */
51: unsigned int u_count; /* bytes remaining for IO */
52: Long u_offset; /* offset in file for IO */
53: struct inode *u_cdir; /* pointer to inode of current directory */
54: struct inode *u_rdir; /* root directory of current process */
55: char junk2[14]; /* used to be current pathname component */
56: char junk4[14+2]; /* used to be current directory entry */
57: struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */
58: char u_pofile[NOFILE]; /* per-process flags of open files */
59: #define EXCLOSE 01 /* auto-close on exec */
60: label_t u_ssav; /* label variable for swapping */
61: int (*u_signal[NSIG])(); /* disposition of signals */
62: int u_code; /* ``code'' to trap */
63: /* on SIGILL code passes compatibility mode fault address */
64: /* on SIGFPE code passes more specific kind of floating point fault */
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: short junk5; /* was u_eosys/u_sep */
73: dev_t u_ttydev; /* dev,ino of controlling tty */
74: ino_t u_ttyino;
75: union {
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: } Ux_A;
86: char ux_shell[SHSIZE]; /* #! and name of interpreter */
87: } u_exdata;
88: #define ux_mag Ux_A.Ux_mag
89: #define ux_tsize Ux_A.Ux_tsize
90: #define ux_dsize Ux_A.Ux_dsize
91: #define ux_bsize Ux_A.Ux_bsize
92: #define ux_ssize Ux_A.Ux_ssize
93: #define ux_entloc Ux_A.Ux_entloc
94: #define ux_unused Ux_A.Ux_unused
95: #define ux_relflg Ux_A.Ux_relflg
96:
97: char u_comm[14]; /* needs to be >= acct.ac_comm */
98: time_t u_start;
99: char u_acflag;
100: short junk6; /* was u_fpflag */
101: short u_cmask; /* mask for file creation */
102: clicks_t u_tsize; /* text size (clicks) */
103: clicks_t u_dsize; /* data size (clicks) */
104: clicks_t u_ssize; /* stack size (clicks) */
105: struct vtimes u_vm; /* stats for this proc */
106: struct vtimes u_cvm; /* sum of stats for reaped children */
107: struct dmap u_dmap; /* disk map for data segment */
108: struct dmap u_smap; /* disk map for stack segment */
109: struct dmap u_cdmap, u_csmap; /* shadows of u_dmap, u_smap, for
110: use of parent during fork */
111: time_t u_outime; /* user time at last sample */
112: clicks_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */
113: int u_limit[8]; /* see <sys/vlimit.h> */
114: int u_nbadio; /* # IO operations on hungup streams */
115: char u_logname[8]; /* login name */
116: int u_stack[1];
117:
118: /*
119: * kernel stack per user
120: * extends from u + UPAGES*512
121: * backward not to reach here
122: */
123: };
124:
125: /* u_eosys values */
126: #define JUSTRETURN 0
127: #define RESTARTSYS 1
128: #define SIMULATERTI 2
129:
130: /* u_error codes */
131: #include <errno.h>
132:
133: #ifdef KERNEL
134: extern struct user u;
135: extern struct user *swaputl;
136: extern struct user *forkutl;
137: extern struct user *xswaputl;
138: extern struct user *xswap2utl;
139: extern struct user *pushutl;
140: extern struct user *prusrutl;
141: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.