⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proc.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define	p_endcopy	p_thread	void	*p_thread;	/* Id for this "thread"; Mach glue. XXX */	struct	user *p_addr;	/* Kernel virtual addr of u-area (PROC ONLY). */	struct	mdproc p_md;	/* Any machine-dependent fields. */	u_short	p_xstat;	/* Exit status for wait; also stop signal. */	u_short	p_acflag;	/* Accounting flags. */	struct	rusage *p_ru;	/* Exit information. XXX */};#define	p_session	p_pgrp->pg_session#define	p_pgid		p_pgrp->pg_id/* * Status values. * * A note about SRUN and SONPROC: SRUN indicates that a process is * runnable but *not* yet running, i.e. is on a run queue.  SONPROC * indicates that the process is actually executing on a CPU, i.e. * it is no longer on a run queue. */#define	SIDL	1		/* Process being created by fork. */#define	SRUN	2		/* Currently runnable. */#define	SSLEEP	3		/* Sleeping on an address. */#define	SSTOP	4		/* Process debugging or suspension. */#define	SZOMB	5		/* Awaiting collection by parent. */#define	SDEAD	6		/* Process is almost a zombie. */#define	SONPROC	7		/* Process is currently on a CPU */#define	P_ZOMBIE(p)	((p)->p_stat == SZOMB || (p)->p_stat == SDEAD)/* These flags are kept in p_flag. */#define	P_ADVLOCK	0x00001	/* Process may hold a POSIX advisory lock. */#define	P_CONTROLT	0x00002	/* Has a controlling terminal. */#define	P_INMEM		0x00004	/* Loaded into memory. */#define	P_NOCLDSTOP	0x00008	/* No SIGCHLD when children stop. */#define	P_PPWAIT	0x00010	/* Parent is waiting for child to exec/exit. */#define	P_PROFIL	0x00020	/* Has started profiling. */#define	P_SELECT	0x00040	/* Selecting; wakeup/waiting danger. */#define	P_SINTR		0x00080	/* Sleep is interruptible. */#define	P_SUGID		0x00100	/* Had set id privileges since last exec. */#define	P_SYSTEM	0x00200	/* System proc: no sigs, stats or swapping. */#define	P_TIMEOUT	0x00400	/* Timing out during sleep. */#define	P_TRACED	0x00800	/* Debugged process being traced. */#define	P_WAITED	0x01000	/* Debugging process has waited for child. */#define	P_WEXIT		0x02000	/* Working on exiting. */#define	P_EXEC		0x04000	/* Process called exec. */#define	P_OWEUPC	0x08000	/* Owe process an addupc() call at next ast. */#define	P_FSTRACE	0x10000	/* Debugger process being traced by procfs */#define	P_NOCLDWAIT	0x20000	/* No zombies if child dies */#define	P_32		0x40000	/* 32-bit process (used on 64-bit kernels) */#define P_BIGLOCK	0x80000 /* Process needs kernel "big lock" to run *//* * Macro to compute the exit signal to be delivered. */#define	P_EXITSIG(p)	(((p)->p_flag & (P_TRACED|P_FSTRACE)) ? SIGCHLD : \			 p->p_exitsig)/* * MOVE TO ucred.h? * * Shareable process credentials (always resident).  This includes a reference * to the current user credentials as well as real and saved ids that may be * used to change ids. */struct	pcred {	struct	ucred *pc_ucred;	/* Current credentials. */	uid_t	p_ruid;			/* Real user id. */	uid_t	p_svuid;		/* Saved effective user id. */	gid_t	p_rgid;			/* Real group id. */	gid_t	p_svgid;		/* Saved effective group id. */	int	p_refcnt;		/* Number of references. */};LIST_HEAD(proclist, proc);		/* a list of processes *//* * This structure associates a proclist with its lock. */struct proclist_desc {	struct proclist *pd_list;	/* the list */	/*	 * XXX Add a pointer to the proclist's lock eventually.	 */};#ifdef _KERNEL/* * We use process IDs <= PID_MAX; PID_MAX + 1 must also fit in a pid_t, * as it is used to represent "no process group". */#define	PID_MAX		30000#define	NO_PID		30001#define SESS_LEADER(p)	((p)->p_session->s_leader == (p))#define	SESSHOLD(s)	((s)->s_count++)#define	SESSRELE(s) {							\	if (--(s)->s_count == 0)					\		FREE(s, M_SESSION);					\}#define	PHOLD(p) {							\	if ((p)->p_holdcnt++ == 0 && ((p)->p_flag & P_INMEM) == 0)	\		uvm_swapin(p);						\}#define	PRELE(p)	(--(p)->p_holdcnt)/* * Flags passed to fork1(). */#define	FORK_PPWAIT	0x01		/* block parent until child exit */#define	FORK_SHAREVM	0x02		/* share vmspace with parent */#define	FORK_SHARECWD	0x04		/* share cdir/rdir/cmask */#define	FORK_SHAREFILES	0x08		/* share file descriptors */#define	FORK_SHARESIGS	0x10		/* share signal actions */#define	PIDHASH(pid)	(&pidhashtbl[(pid) & pidhash])extern LIST_HEAD(pidhashhead, proc) *pidhashtbl;extern u_long pidhash;#define	PGRPHASH(pgid)	(&pgrphashtbl[(pgid) & pgrphash])extern LIST_HEAD(pgrphashhead, pgrp) *pgrphashtbl;extern u_long pgrphash;#ifdef OSKIT#include "oskit_uvm_vmspace.h"#else/* * Allow machine-dependent code to override curproc in <machine/cpu.h> for * its own convenience.  Otherwise, we declare it as appropriate. */#if !defined(curproc)#if defined(MULTIPROCESSOR)#define	curproc	curcpu()->ci_curproc	/* Current running proc. */#elseextern struct proc *curproc;		/* Current running proc. */#endif /* MULTIPROCESSOR */#endif /* ! curproc */extern struct proc proc0;		/* Process slot for swapper. */#endif /*OSKIT*/extern int nprocs, maxproc;		/* Current and max number of procs. *//* Process list lock; see kern_proc.c for locking protocol details. */extern struct lock proclist_lock;extern struct proclist allproc;		/* List of all processes. */extern struct proclist zombproc;	/* List of zombie processes. */extern struct proclist deadproc;	/* List of dead processes. */extern struct simplelock deadproc_slock;extern struct proc *initproc;		/* Process slots for init, pager. */extern const struct proclist_desc proclists[];extern struct pool proc_pool;		/* memory pool for procs */extern struct pool pcred_pool;		/* memory pool for pcreds */extern struct pool plimit_pool;		/* memory pool for plimits */extern struct pool rusage_pool;		/* memory pool for rusages */struct proc *pfind __P((pid_t));	/* Find process by id. */struct pgrp *pgfind __P((pid_t));	/* Find process group by id. */struct simplelock;int	chgproccnt __P((uid_t uid, int diff));int	enterpgrp __P((struct proc *p, pid_t pgid, int mksess));void	fixjobc __P((struct proc *p, struct pgrp *pgrp, int entering));int	inferior __P((struct proc *p, struct proc *q));int	leavepgrp __P((struct proc *p));void	yield __P((void));void	preempt __P((struct proc *));void	mi_switch __P((struct proc *));void	pgdelete __P((struct pgrp *pgrp));void	procinit __P((void));void	remrunqueue __P((struct proc *));void	resetpriority __P((struct proc *));void	setrunnable __P((struct proc *));void	setrunqueue __P((struct proc *));void	suspendsched __P((void));int	ltsleep __P((void *chan, int pri, const char *wmesg, int timo,	    __volatile struct simplelock *));#ifdef OSKITvoid	unsleep __P((struct lwp *));#elsevoid	unsleep __P((struct proc *));#endifvoid	wakeup __P((void *chan));void	wakeup_one __P((void *chan));void	reaper __P((void *));void	exit1 __P((struct proc *, int));void	exit2 __P((struct proc *));int	fork1 __P((struct proc *, int, int, void *, size_t,	    void (*)(void *), void *, register_t *, struct proc **));void	rqinit __P((void));int	groupmember __P((gid_t, struct ucred *));void	cpu_switch __P((struct proc *));void	cpu_wait __P((struct proc *));void	cpu_exit __P((struct proc *));void	cpu_fork __P((struct proc *, struct proc *, void *, size_t,	    void (*)(void *), void *));void	child_return __P((void *));int	proc_isunder __P((struct proc *, struct proc*));void	proclist_lock_read __P((void));void	proclist_unlock_read __P((void));int	proclist_lock_write __P((void));void	proclist_unlock_write __P((int));void	p_sugid __P((struct proc*));/* Compatbility with old, non-interlocked tsleep call. */#define	tsleep(chan, pri, wmesg, timo)					\	ltsleep(chan, pri, wmesg, timo, NULL)#if defined(MULTIPROCESSOR)void	proc_trampoline_mp(void);	/* XXX */#endif#endif	/* _KERNEL */#endif	/* !_SYS_PROC_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -