|
|
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 <common/feature.h>
19: #include <kernel/timeout.h>
20: #include <sys/poll.h>
21: #include <sys/types.h>
22: #include <sys/seg.h>
23: #include <sys/ksynch.h>
24: #include <sys/signal.h>
25:
26: #if ! __KERNEL__
27: # error You must be compiling the kernel to use this header
28: #endif
29:
30:
31: /*
32: * Number of user segments.
33: */
34:
35: #if _I386
36:
37: #define NUSEG 4
38: #define NSHMSEG 6
39:
40: #else
41:
42: #define NUSEG 6
43:
44: #endif
45:
46: /*
47: * In core information about a process.
48: * The `p_lforw' and `p_lback' entries must not move as they must be
49: * in the same place as in the `plink' structure.
50: */
51: typedef struct proc {
52: struct proc *p_lforw; /* Working forward pointer */
53: struct proc *p_lback; /* Working backward pointer */
54: struct proc *p_nforw; /* Next forward pointer */
55: struct proc *p_nback; /* Next backward pointer */
56: #if 1
57: /*
58: * NIGEL: What is the +1 for ? Who can tell, but it is never, ever,
59: * actually used.
60: */
61: struct seg * p_segp [NUSEG]; /* Segments */
62: #else
63: struct seg *p_segp[NUSEG+1]; /* Segments */
64: #endif
65: unsigned p_pid; /* Process id */
66: unsigned p_ppid; /* Process id of parent */
67: unsigned p_uid; /* Effective uid */
68: unsigned p_ruid; /* Real uid */
69: unsigned p_rgid; /* Real gid */
70: unsigned p_state; /* Scheduling state */
71: unsigned p_flags; /* Flags */
72:
73: /*
74: * NIGEL: New deal for signals; the old stuff appears lower in the file.
75: */
76: __sigset_t p_pending_signals;
77: __sigset_t p_ignored_signals;
78: __sigset_t p_signal_mask;
79: __sigset_t p_queued_signals;
80: __sigmiscfl_t p_sigflags; /* General signal flags */
81:
82: char *p_event; /* Wakeup event channel */
83: unsigned p_alarm; /* Timer for alarms */
84: unsigned p_group; /* Process group */
85: dev_t p_ttdev; /* Controlling terminal */
86: unsigned p_nice; /* Nice value */
87: #if _I386
88: int p_schedPri; /* will index into table in sys/ts.h */
89: #else
90: unsigned p_cval; /* Cpu schedule value */
91: unsigned p_sval; /* Swap schedule value */
92: int p_ival; /* Importance value */
93: unsigned p_rval; /* Response value */
94: unsigned p_lctim; /* Last time cval was updated */
95: #endif
96: long p_utime; /* User time (HZ) */
97: long p_stime; /* System time */
98: long p_cutime; /* Sum of childs user time */
99: long p_cstime; /* Sum of childs system time */
100: int p_exit; /* Exit status */
101: event_t *p_polls; /* Enabled polls */
102: TIM p_polltim; /* Poll timer */
103: TIM p_alrmtim; /* Alarm timer */
104: #if _I386
105: struct rlock *p_prl; /* Pending record lock */
106: struct sr p_shmsr[NSHMSEG]; /* Shared Memory Segments */
107: struct sem_undo *p_semu; /* Sem. undo link list */
108: struct {
109: char _space [32];
110: } p_ddi_space;
111: #endif
112: } PROC;
113:
114: /*
115: * Segment indices.
116: */
117:
118: #if _I386
119:
120: #define SIUSERP 0 /* User area segment */
121: #define SISTEXT 1 /* Shared text segment */
122: #define SIPDATA 2 /* Private data segment */
123: #define SISTACK 3 /* Stack segment */
124: #define SIAUXIL 4 /* Auxiliary segment */
125: #define SIBSS 0 /* overlay of SIUSERP [coh/exec.c] */
126:
127: #else
128:
129: #define SIUSERP 0 /* User area segment */
130: #define SISTACK 1 /* Stack segment */
131: #define SISTEXT 2 /* Shared text segment */
132: #define SIPTEXT 3 /* Private text segment */
133: #define SISDATA 4 /* Shared data segment */
134: #define SIPDATA 5 /* Private data segment */
135: #define SIAUXIL 6 /* Auxiliary segment */
136:
137: #endif /* ! _I386 */
138:
139: /*
140: * Status of process (p_state).
141: */
142: #define PSSLEEP 1 /* Sleeping, signals do not interrupt */
143: #define PSRUN 2 /* Running */
144: #define PSDEAD 3 /* Exiting */
145: #define PSSLSIG 4 /* Sleeping, signals interrupt */
146:
147: #define ASLEEP(pp) (pp->p_state == PSSLEEP || pp->p_state == PSSLSIG)
148:
149: /*
150: * Flags (p_flags).
151: */
152: #define PFCORE 0x0001 /* Process is in core */
153: #define PFLOCK 0x0002 /* Process is locked in core */
154: #define PFSWIO 0x0004 /* Swap I/O in progress */
155: #define PFSWAP 0x0008 /* Process is swapped out */
156: #define PFWAIT 0x0010 /* Process is stopped (not waited) */
157: #define PFSTOP 0x0020 /* Process is stopped (waited on) */
158: #define PFTRAC 0x0040 /* Process is being traced */
159: #define PFKERN 0x0080 /* Kernel process */
160: #define PFAUXM 0x0100 /* Auxiliary segments in memory */
161: #define PFDISP 0x0200 /* Dispatch at earliest convenience */
162: #define PFNDMP 0x0400 /* Command mode forbids dump */
163:
164: #ifdef QWAKEUP
165: #define PFWAKE 0x0800 /* Wakeup requested */
166: extern int wakeup2();
167: extern int ntowake; /* Wakeup pending */
168: #endif
169:
170: /*
171: * Values of nice.
172: */
173: #define MINNICE 0 /* Minimum value of nice */
174: #define DEFNICE 20 /* Default nice value */
175: #define MAXNICE 40 /* Maximum nice value */
176:
177: /*
178: * Number of entries in sleep/wakeup queue.
179: */
180:
181: #if _I386
182: #define NHPLINK 97
183: #else
184: #define NHPLINK 32
185: #endif
186:
187: /*
188: * Sleep/wakeup queues.
189: */
190: typedef struct plink {
191: struct proc *p_lforw; /* Working forward pointer */
192: struct proc *p_lback; /* Working backward pointer */
193: } PLINK;
194:
195: #if __KERNEL__
196:
197: #define SELF cprocp
198:
199: #if ! _I386
200: #define p_u p_segp[SIUSERP]
201: #endif
202:
203: /*
204: * Functions.
205: */
206: extern int idle();
207: extern int wakeup();
208: #if ! _I386
209: extern PROC *process();
210: #endif
211:
212: /*
213: * Global variables.
214: */
215: extern int quantum; /* Current quantum */
216: extern int disflag; /* Dispatch soon as possible */
217: extern int intflag; /* We are in an interrupt */
218: extern int cpid; /* Current process id */
219: extern GATE pnxgate; /* Gate for p_next */
220: extern PROC procq; /* Process queue */
221: extern PROC *iprocp; /* Idle process struct */
222: extern PROC *eprocp; /* Init process struct */
223: extern PROC *cprocp; /* Current process */
224: extern PLINK linkq[NHPLINK]; /* Sleep/wakeup hash queue */
225:
226: #ifndef NOMONITOR
227: extern int swmflag; /* Monitor swapper */
228: #endif
229:
230: /*
231: * Function to hash a wakeup channel.
232: * Most channels are even.
233: */
234:
235: #if _I386
236: #define hash(e) ((unsigned)(e) % NHPLINK)
237: #else
238: #define hash(e) ((((unsigned)(e))>>1)%NHPLINK)
239: #endif
240:
241: #endif /* __KERNEL__ */
242:
243: #endif /* ! defined (__SYS_PROC_H__) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.