|
|
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.