* One allocated per process.
* Contains all per process data
* that doesn't need to be referenced
* while the process is swapped.
* The user block is USIZE*512 bytes
* long; resides at virtual kernel
* loc 80020000; contains the system
* stack per user; is cross referenced
* with the proc structure for the
struct pcb u_pcb
; /* pcb, save area when exchanging stacks */
int u_ptable
[(MAXUMEM
+127)/128]; /* click nums of user page table */
char u_segflg
; /* IO flag: 0:user D; 1:system; 2:user I */
char u_error
; /* return error code */
short u_uid
; /* effective user id */
short u_gid
; /* effective group id */
short u_ruid
; /* real user id */
short u_rgid
; /* real group id */
struct proc
*u_procp
; /* pointer to proc structure */
int *u_ap
; /* pointer to arglist */
union { /* syscall return values */
caddr_t u_base
; /* base address for IO */
unsigned int u_count
; /* bytes remaining for IO */
off_t u_offset
; /* offset in file for IO */
struct inode
*u_cdir
; /* pointer to inode of current directory */
struct inode
*u_rdir
; /* root directory of current process */
char u_dbuf
[DIRSIZ
]; /* current pathname component */
caddr_t u_dirp
; /* pathname pointer */
struct direct u_dent
; /* current directory entry */
struct inode
*u_pdir
; /* inode of parent directory of dirp */
struct file
*u_ofile
[NOFILE
]; /* pointers to file structures of open files */
char u_pofile
[NOFILE
]; /* per-process flags of open files */
int u_arg
[5]; /* arguments to current system call */
unsigned u_tsize
; /* text size (clicks) */
unsigned u_dsize
; /* data size (clicks) */
unsigned u_ssize
; /* stack size (clicks) */
label_t u_qsav
; /* label variable for quits and interrupts */
label_t u_ssav
; /* label variable for swapping */
int u_signal
[NSIG
]; /* disposition of signals */
time_t u_utime
; /* this process user time */
time_t u_stime
; /* this process system time */
time_t u_cutime
; /* sum of childs' utimes */
time_t u_cstime
; /* sum of childs' stimes */
int *u_ar0
; /* address of users saved R0 */
struct { /* profile arguments */
short *pr_base
; /* buffer base */
unsigned pr_size
; /* buffer size */
unsigned pr_off
; /* pc offset */
unsigned pr_scale
; /* pc scaling */
char u_intflg
; /* catch intr from sys */
char u_sep
; /* flag for I and D separation */
struct tty
*u_ttyp
; /* controlling tty pointer */
dev_t u_ttyd
; /* controlling tty dev */
struct { /* header of executable file */
int ux_mag
; /* magic number */
unsigned ux_tsize
; /* text size */
unsigned ux_dsize
; /* data size */
unsigned ux_bsize
; /* bss size */
unsigned ux_ssize
; /* symbol table size */
unsigned ux_entloc
; /* entry location */
short u_fpflag
; /* unused now, will be later */
short u_cmask
; /* mask for file creation */
* extends from u + USIZE*64
* backward not to reah here