|
|
1.1 root 1: /* user.h 4.1 11/9/80 */
2:
3: #ifdef KERNEL
4: #include "../h/pcb.h"
5: #include "../h/dmap.h"
6: #include "../h/vtimes.h"
7: #ifdef FASTVAX
8: asm(".set U_ARG,120");
9: asm(".set U_QSAV,140");
10: #endif
11: #else
12: #include <sys/pcb.h>
13: #include <sys/dmap.h>
14: #include <sys/vtimes.h>
15: #endif
16: /*
17: * The user structure.
18: * One allocated per process.
19: * Contains all per process data
20: * that doesn't need to be referenced
21: * while the process is swapped.
22: * The user block is UPAGES*NBPG bytes
23: * long; resides at virtual user
24: * loc 0x80000000-UPAGES*NBPG; contains the system
25: * stack per user; is cross referenced
26: * with the proc structure for the
27: * same process.
28: */
29:
30: #define EXCLOSE 01
31:
32: struct user
33: {
34: struct pcb u_pcb;
35: int u_arg[5]; /* arguments to current system call */
36: label_t u_qsav; /* for non-local gotos on interrupts */
37: char u_segflg; /* 0:user D; 1:system; 2:user I */
38: char u_error; /* return error code */
39: short u_uid; /* effective user id */
40: short u_gid; /* effective group id */
41: short u_ruid; /* real user id */
42: short u_rgid; /* real group id */
43: struct proc *u_procp; /* pointer to proc structure */
44: int *u_ap; /* pointer to arglist */
45: union { /* syscall return values */
46: struct {
47: int R_val1;
48: int R_val2;
49: } u_rv;
50: #define r_val1 u_rv.R_val1
51: #define r_val2 u_rv.R_val2
52: off_t r_off;
53: time_t r_time;
54: } u_r;
55: caddr_t u_base; /* base address for IO */
56: unsigned int u_count; /* bytes remaining for IO */
57: off_t u_offset; /* offset in file for IO */
58: struct inode *u_cdir; /* pointer to inode of current directory */
59: struct inode *u_rdir; /* root directory of current process */
60: char u_dbuf[DIRSIZ]; /* current pathname component */
61: caddr_t u_dirp; /* pathname pointer */
62: struct direct u_dent; /* current directory entry */
63: struct inode *u_pdir; /* inode of parent directory of dirp */
64: struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */
65: char u_pofile[NOFILE]; /* per-process flags of open files */
66: label_t u_ssav; /* label variable for swapping */
67: int (*u_signal[NSIG])(); /* disposition of signals */
68: int u_cfcode; /* ``code'' to trap when CM faulted */
69: int *u_ar0; /* address of users saved R0 */
70: struct uprof { /* profile arguments */
71: short *pr_base; /* buffer base */
72: unsigned pr_size; /* buffer size */
73: unsigned pr_off; /* pc offset */
74: unsigned pr_scale; /* pc scaling */
75: } u_prof;
76: char u_eosys; /* special action on end of syscall */
77: char u_sep; /* flag for I and D separation */
78: struct tty *u_ttyp; /* controlling tty pointer */
79: dev_t u_ttyd; /* controlling tty dev */
80: struct { /* header of executable file */
81: int ux_mag; /* magic number */
82: unsigned ux_tsize; /* text size */
83: unsigned ux_dsize; /* data size */
84: unsigned ux_bsize; /* bss size */
85: unsigned ux_ssize; /* symbol table size */
86: unsigned ux_entloc; /* entry location */
87: unsigned ux_unused;
88: unsigned ux_relflg;
89: } u_exdata;
90: char u_comm[DIRSIZ];
91: time_t u_start;
92: char u_acflag;
93: short u_fpflag; /* unused now, will be later */
94: short u_cmask; /* mask for file creation */
95: size_t u_tsize; /* text size (clicks) */
96: size_t u_dsize; /* data size (clicks) */
97: size_t u_ssize; /* stack size (clicks) */
98: struct vtimes u_vm; /* stats for this proc */
99: struct vtimes u_cvm; /* sum of stats for reaped children */
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: time_t u_outime; /* user time at last sample */
105: size_t u_odsize, u_ossize; /* for (clumsy) expansion swaps */
106: size_t u_vrpages[NOFILE]; /* number vread pages hanging on fd */
107: int u_limit[8]; /* see <sys/limit.h> */
108: int u_stack[1];
109:
110: /*
111: * kernel stack per user
112: * extends from u + UPAGES*512
113: * backward not to reach here
114: */
115: };
116:
117: /* u_eosys values */
118: #define JUSTRETURN 0
119: #define RESTARTSYS 1
120: #define SIMULATERTI 2
121:
122: /* u_error codes */
123: #include <errno.h>
124:
125: #ifdef KERNEL
126: extern struct user u;
127: extern struct user swaputl;
128: extern struct user forkutl;
129: extern struct user xswaputl;
130: extern struct user xswap2utl;
131: extern struct user pushutl;
132: extern struct user vfutl;
133: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.