|
|
1.1 root 1: /* (-lgl
2: * COHERENT Version 4.0
3: * Copyright (c) 1982, 1992 by Mark Williams Company.
4: * All rights reserved. May not be copied without permission.
5: -lgl) */
6: /*
7: * /usr/include/sys/proc.h
8: *
9: * Process information. PROC structs, unlike UPROC structs, are visible
10: * whether the process is active or not.
11: *
12: * Revised: Wed May 12 09:48:19 1993 CDT
13: */
14:
15: #ifndef __SYS_PROC_H__
16: #define __SYS_PROC_H__
17:
18: #include <sys/types.h>
19: #include <poll.h>
20: #include <sys/timeout.h>
21: #include <sys/seg.h>
22:
23: #include <sys/ksynch.h>
24:
25: /*
26: * NIGEL: For some reason, the "sig_t" type was defined in <sys/types.h>
27: * instead of here where it belongs.
28: */
29:
30: typedef long sig_t;
31:
32:
33: /*
34: * Number of user segments.
35: */
36: #ifdef _I386
37: #define NUSEG 4
38: #define NSHMSEG 6
39: #else
40: #define NUSEG 6
41: #endif
42:
43: /*
44: * In core information about a process.
45: * The `p_lforw' and `p_lback' entries must not move as they must be
46: * in the same place as in the `plink' structure.
47: */
48: typedef struct proc {
49: struct proc *p_lforw; /* Working forward pointer */
50: struct proc *p_lback; /* Working backward pointer */
51: struct proc *p_nforw; /* Next forward pointer */
52: struct proc *p_nback; /* Next backward pointer */
53: struct seg *p_segp[NUSEG+1]; /* Segments */
54: unsigned p_pid; /* Process id */
55: unsigned p_ppid; /* Process id of parent */
56: unsigned p_uid; /* Effective uid */
57: unsigned p_ruid; /* Real uid */
58: unsigned p_rgid; /* Real gid */
59: unsigned p_state; /* Scheduling state */
60: unsigned p_flags; /* Flags */
61: sig_t p_ssig; /* Signals which have been sent */
62:
63: /* bit fields p_dfsig and p_isig are redundant with u.u_sfunc, but
64: appear in PROC data for visibility across processes. */
65:
66: #ifdef _I386
67: sig_t p_dfsig; /* Signals which are defaulted */
68: sig_t p_hsig; /* Signals which are held */
69: sig_t p_dsig; /* Signals which are sigset */
70: #endif
71: sig_t p_isig; /* Signals which are being ignored */
72: char *p_event; /* Wakeup event channel */
73: unsigned p_alarm; /* Timer for alarms */
74: unsigned p_group; /* Process group */
75: dev_t p_ttdev; /* Controlling terminal */
76: unsigned p_nice; /* Nice value */
77: #ifdef _I386
78: int p_schedPri; /* will index into table in sys/ts.h */
79: #else
80: unsigned p_cval; /* Cpu schedule value */
81: unsigned p_sval; /* Swap schedule value */
82: int p_ival; /* Importance value */
83: unsigned p_rval; /* Response value */
84: #endif
85: unsigned p_lctim; /* Last time cval was updated */
86: long p_utime; /* User time (HZ) */
87: long p_stime; /* System time */
88: long p_cutime; /* Sum of childs user time */
89: long p_cstime; /* Sum of childs system time */
90: int p_exit; /* Exit status */
91: event_t *p_polls; /* Enabled polls */
92: TIM p_polltim; /* Poll timer */
93: TIM p_alrmtim; /* Alarm timer */
94: #ifdef _I386
95: struct rlock *p_prl; /* Pending record lock */
96: struct sr p_shmsr[NSHMSEG]; /* Shared Memory Segments */
97: struct sem_undo *p_semu; /* Sem. undo link list */
98: char p_nigel[16]; /* He made me do it! -hws- */
99: #endif
100: } PROC;
101:
102: /*
103: * Segment indices.
104: */
105: #ifdef _I386
106: #define SIUSERP 0 /* User area segment */
107: #define SISTEXT 1 /* Shared text segment */
108: #define SIPDATA 2 /* Private data segment */
109: #define SISTACK 3 /* Stack segment */
110: #define SIAUXIL 4 /* Auxiliary segment */
111: #define SIBSS 0 /* overlay of SIUSERP [coh/exec.c] */
112: #else
113: #define SIUSERP 0 /* User area segment */
114: #define SISTACK 1 /* Stack segment */
115: #define SISTEXT 2 /* Shared text segment */
116: #define SIPTEXT 3 /* Private text segment */
117: #define SISDATA 4 /* Shared data segment */
118: #define SIPDATA 5 /* Private data segment */
119: #define SIAUXIL 6 /* Auxiliary segment */
120: #endif
121:
122: /*
123: * Status of process (p_state).
124: */
125: #define PSSLEEP 1 /* Sleeping, signals do not interrupt */
126: #define PSRUN 2 /* Running */
127: #define PSDEAD 3 /* Exiting */
128: #define PSSLSIG 4 /* Sleeping, signals interrupt */
129:
130: #define ASLEEP(pp) (pp->p_state == PSSLEEP || pp->p_state == PSSLSIG)
131:
132: /*
133: * Flags (p_flags).
134: */
135: #define PFCORE 0x0001 /* Process is in core */
136: #define PFLOCK 0x0002 /* Process is locked in core */
137: #define PFSWIO 0x0004 /* Swap I/O in progress */
138: #define PFSWAP 0x0008 /* Process is swapped out */
139: #define PFWAIT 0x0010 /* Process is stopped (not waited) */
140: #define PFSTOP 0x0020 /* Process is stopped (waited on) */
141: #define PFTRAC 0x0040 /* Process is being traced */
142: #define PFKERN 0x0080 /* Kernel process */
143: #define PFAUXM 0x0100 /* Auxiliary segments in memory */
144: #define PFDISP 0x0200 /* Dispatch at earliest convenience */
145: #define PFNDMP 0x0400 /* Command mode forbids dump */
146:
147: #ifdef QWAKEUP
148: #define PFWAKE 0x0800 /* Wakeup requested */
149: extern int wakeup2();
150: extern int ntowake; /* Wakeup pending */
151: #endif
152:
153: /*
154: * Values of nice.
155: */
156: #define MINNICE 0 /* Minimum value of nice */
157: #define DEFNICE 20 /* Default nice value */
158: #define MAXNICE 40 /* Maximum nice value */
159:
160: /*
161: * Number of entries in sleep/wakeup queue.
162: */
163: #ifdef _I386
164: #define NHPLINK 97
165: #else
166: #define NHPLINK 32
167: #endif
168:
169: /*
170: * Sleep/wakeup queues.
171: */
172: typedef struct plink {
173: struct proc *p_lforw; /* Working forward pointer */
174: struct proc *p_lback; /* Working backward pointer */
175: } PLINK;
176: #endif
177:
178: #ifdef KERNEL
179:
180: #define SELF cprocp
181: #define locked(gate) ((gate)[0])
182: #ifndef _I386
183: #define p_u p_segp[SIUSERP]
184: #endif
185: /*
186: * Functions.
187: */
188: extern int idle();
189: extern PROC *process();
190: extern int wakeup();
191:
192: /*
193: * Global variables.
194: */
195: extern int quantum; /* Current quantum */
196: extern int disflag; /* Dispatch soon as possible */
197: extern int intflag; /* We are in an interrupt */
198: extern int cpid; /* Current process id */
199: extern GATE pnxgate; /* Gate for p_next */
200: extern PROC procq; /* Process queue */
201: extern PROC *iprocp; /* Idle process struct */
202: extern PROC *eprocp; /* Init process struct */
203: extern PROC *cprocp; /* Current process */
204: extern PLINK linkq[NHPLINK]; /* Sleep/wakeup hash queue */
205:
206: #ifndef NOMONITOR
207: extern int swmflag; /* Monitor swapper */
208: #endif
209:
210: /*
211: * Function to hash a wakeup channel.
212: * Most channels are even.
213: */
214: #ifdef _I386
215: #define hash(e) ((unsigned)(e) % NHPLINK)
216: #else
217: #define hash(e) ((((unsigned)(e))>>1)%NHPLINK)
218: #endif
219: #endif
220:
221: /* end of sys/proc.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.