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

📄 portdat.h

📁 著名操作系统Plan 9的第三版的部分核心源代码。现在很难找到了。Plan 9是bell实验室开发的Unix后继者。
💻 H
📖 第 1 页 / 共 2 页
字号:
typedef struct Alarms	Alarms;typedef struct Block	Block;typedef struct Chan	Chan;typedef struct Cmdbuf	Cmdbuf;typedef struct Cname	Cname;typedef struct Crypt	Crypt;typedef struct Dev	Dev;typedef struct Dirtab	Dirtab;typedef struct Egrp	Egrp;typedef struct Evalue	Evalue;typedef struct Fgrp	Fgrp;typedef struct Image	Image;typedef struct List	List;typedef struct Log	Log;typedef struct Logflag	Logflag;typedef struct Mntcache Mntcache;typedef struct Mount	Mount;typedef struct Mntrpc	Mntrpc;typedef struct Mntwalk	Mntwalk;typedef struct Mnt	Mnt;typedef struct Mhead	Mhead;typedef struct Note	Note;typedef struct Page	Page;typedef struct Palloc	Palloc;typedef struct Pgrps	Pgrps;typedef struct Pgrp	Pgrp;typedef struct Physseg	Physseg;typedef struct Proc	Proc;typedef struct Pte	Pte;typedef struct Pthash	Pthash;typedef struct QLock	QLock;typedef struct Queue	Queue;typedef struct Ref	Ref;typedef struct Rendez	Rendez;typedef struct Rgrp	Rgrp;typedef struct RWlock	RWlock;typedef struct Sargs	Sargs;typedef struct Segment	Segment;typedef struct Session	Session;typedef struct Talarm	Talarm;typedef struct Target	Target;typedef struct Waitq	Waitq;typedef int    Devgen(Chan*, Dirtab*, int, int, Dir*);#include <auth.h>#include <fcall.h>struct Ref{	Lock;	long	ref;};struct Rendez{	Proc	*p;};struct QLock{	Lock	use;			/* to access Qlock structure */	Proc	*head;			/* next process waiting for object */	Proc	*tail;			/* last process waiting for object */	int	locked;			/* flag */};struct RWlock{	Lock	use;	Proc	*head;		/* list of waiting processes */	Proc	*tail;	ulong	wpc;		/* pc of writer */	Proc	*wproc;		/* writing proc */	int	readers;	/* number of readers */	int	writer;		/* number of writers */};struct Talarm{	Lock;	Proc	*list;};struct Alarms{	QLock;	Proc	*head;};#define MAXSYSARG	5	/* for mount(fd, mpt, flag, arg, srv) */struct Sargs{	ulong	args[MAXSYSARG];};/* * Access types in namec & channel flags */enum{	Aaccess,			/* as in access, stat */	Atodir,				/* as in chdir */	Aopen,				/* for i/o */	Amount,				/* to be mounted upon */	Acreate,			/* file is to be created */	COPEN	= 0x0001,		/* for i/o */	CMSG	= 0x0002,		/* the message channel for a mount */	CCREATE	= 0x0004,		/* permits creation if c->mnt */	CCEXEC	= 0x0008,		/* close on exec */	CFREE	= 0x0010,		/* not in use */	CRCLOSE	= 0x0020,		/* remove on close */	CCACHE	= 0x0080,		/* client cache */};enum{	BINTR	=	(1<<0),	BFREE	=	(1<<1),};struct Block{	Block*	next;	Block*	list;	uchar*	rp;			/* first unconsumed byte */	uchar*	wp;			/* first empty byte */	uchar*	lim;			/* 1 past the end of the buffer */	uchar*	base;			/* start of the buffer */	void	(*free)(Block*);	ulong	flag;};#define BLEN(s)	((s)->wp - (s)->rp)#define BALLOC(s) ((s)->lim - (s)->base)struct Chan{	Ref;	Chan*	next;			/* allocation */	Chan*	link;	vlong	offset;			/* in file */	ushort	type;	ulong	dev;	ushort	mode;			/* read/write */	ushort	flag;	Qid	qid;	int	fid;			/* for devmnt */	Mhead*	mh;			/* mount point that derived Chan */	Mhead*	xmh;			/* Last mount point crossed */	int	uri;			/* union read index */	ulong	mountid;	Mntcache *mcp;			/* Mount cache pointer */	union {		void*	aux;		Qid	pgrpid;		/* for #p/notepg */		Mnt*	mntptr;		/* for devmnt */		ulong	mid;		/* for ns in devproc */		char	tag[4];		/* for iproute */	};	Chan*	mchan;			/* channel to mounted server */	Qid	mqid;			/* qid of root of mount point */	Session*session;	Cname	*name;};struct Cname{	Ref;	int	alen;			/* allocated length */	int	len;			/* strlen(s) */	char	*s;};struct Dev{	int	dc;	char*	name;	void	(*reset)(void);	void	(*init)(void);	Chan*	(*attach)(char*);	Chan*	(*clone)(Chan*, Chan*);	int	(*walk)(Chan*, char*);	void	(*stat)(Chan*, char*);	Chan*	(*open)(Chan*, int);	void	(*create)(Chan*, char*, int, ulong);	void	(*close)(Chan*);	long	(*read)(Chan*, void*, long, vlong);	Block*	(*bread)(Chan*, long, ulong);	long	(*write)(Chan*, void*, long, vlong);	long	(*bwrite)(Chan*, Block*, ulong);	void	(*remove)(Chan*);	void	(*wstat)(Chan*, char*);};struct Dirtab{	char	name[NAMELEN];	Qid	qid;	Length;	long	perm;};enum{	NSMAX	=	1000,	NSLOG	=	7,	NSCACHE	=	(1<<NSLOG),};struct Mntwalk				/* state for /proc/#/ns */{	int		cddone;	ulong	id;	Mhead*	mh;	Mount*	cm;};struct Mount{	ulong	mountid;	Mount*	next;	Mhead*	head;	Mount*	copy;	Mount*	order;	Chan*	to;			/* channel replacing channel */	int	flag;	char	spec[NAMELEN];};struct Mhead{	Ref;	RWlock	lock;	Chan*	from;			/* channel mounted upon */	Mount*	mount;			/* what's mounted upon it */	Mhead*	hash;			/* Hash chain */};struct Mnt{	Ref;			/* Count of attached channels */	Chan	*c;		/* Channel to file service */	Proc	*rip;		/* Reader in progress */	Mntrpc	*queue;		/* Queue of pending requests on this channel */	ulong	id;		/* Multiplexer id for channel check */	Mnt	*list;		/* Free list */	int	flags;		/* cache */	int	blocksize;	/* read/write block size */	char	*partial;	/* Outstanding read data */	int	npart;		/* Sizeof remains */};enum{	NUser,				/* note provided externally */	NExit,				/* deliver note quietly */	NDebug,				/* print debug message */};struct Note{	char	msg[ERRLEN];	int	flag;			/* whether system posted it */};enum{	PG_NOFLUSH	= 0,	PG_TXTFLUSH	= 1,		/* flush dcache and invalidate icache */	PG_DATFLUSH	= 2,		/* flush both i & d caches (UNUSED) */	PG_NEWCOL	= 3,		/* page has been recolored */	PG_MOD		= 0x01,		/* software modified bit */	PG_REF		= 0x02,		/* software referenced bit */};struct Page{	Lock;	ulong	pa;			/* Physical address in memory */	ulong	va;			/* Virtual address for user */	ulong	daddr;			/* Disc address on swap */	ushort	ref;			/* Reference count */	char	modref;			/* Simulated modify/reference bits */	char	color;			/* Cache coloring */	char	cachectl[MAXMACH];	/* Cache flushing control for putmmu */	Image	*image;			/* Associated text or swap image */	Page	*next;			/* Lru free list */	Page	*prev;	Page	*hash;			/* Image hash chains */};struct Swapalloc{	Lock;				/* Free map lock */	int	free;			/* currently free swap pages */	uchar*	swmap;			/* Base of swap map in memory */	uchar*	alloc;			/* Round robin allocator */	uchar*	last;			/* Speed swap allocation */	uchar*	top;			/* Top of swap map */	Rendez	r;			/* Pager kproc idle sleep */	Rendez	pause;	ulong	highwater;		/* Pager start threshold */	ulong	headroom;		/* Space pager frees under highwater */}swapalloc;struct Image{	Ref;	Chan	*c;			/* channel to text file */	Qid 	qid;			/* Qid for page cache coherence */	Qid	mqid;	Chan	*mchan;	ushort	type;			/* Device type of owning channel */	Segment *s;			/* TEXT segment for image if running */	Image	*hash;			/* Qid hash chains */	Image	*next;			/* Free list */	int	notext;			/* no file associated */};struct Pte{	Page	*pages[PTEPERTAB];	/* Page map for this chunk of pte */	Page	**first;		/* First used entry */	Page	**last;			/* Last used entry */	Pte	*next;			/* Free list */};/* Segment types */enum{	SG_TYPE		= 07,		/* Mask type of segment */	SG_TEXT		= 00,	SG_DATA		= 01,	SG_BSS		= 02,	SG_STACK	= 03,	SG_SHARED	= 04,	SG_PHYSICAL	= 05,	SG_SHDATA	= 06,	SG_MAP		= 07,	SG_RONLY	= 0040,		/* Segment is read only */	SG_CEXEC	= 0100,		/* Detach at exec */};#define PG_ONSWAP	1#define onswap(s)	(((ulong)s)&PG_ONSWAP)#define pagedout(s)	(((ulong)s)==0 || onswap(s))#define swapaddr(s)	(((ulong)s)&~PG_ONSWAP)#define SEGMAXSIZE	(SEGMAPSIZE*PTEMAPMEM)struct Physseg{	ulong	attr;			/* Segment attributes */	char	*name;			/* Attach name */	ulong	pa;			/* Physical address */	ulong	size;			/* Maximum segment size in pages */	Page	*(*pgalloc)(Segment*, ulong);	/* Allocation if we need it */	void	(*pgfree)(Page*);};struct Segment{	Ref;	QLock	lk;	ushort	steal;		/* Page stealer lock */	ushort	type;		/* segment type */	ulong	base;		/* virtual base */	ulong	top;		/* virtual top */	ulong	size;		/* size in pages */	ulong	fstart;		/* start address in file for demand load */	ulong	flen;		/* length of segment in file */	int	flushme;	/* maintain icache for this segment */	Image	*image;		/* text in file attached to this segment */	Physseg *pseg;	ulong*	profile;	/* Tick profile area */

⌨️ 快捷键说明

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