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

📄 buf.h

📁 UNIX v6 源代码
💻 H
字号:
/* * Each buffer in the pool is usually doubly linked into 2 lists: * the device with which it is currently associated (always) * and also on a list of blocks available for allocation * for other use (usually). * The latter list is kept in last-used order, and the two * lists are doubly linked to make it easy to remove * a buffer from one list when it was found by * looking through the other. * A buffer is on the available list, and is liable * to be reassigned to another disk block, if and only * if it is not marked BUSY.  When a buffer is busy, the * available-list pointers can be used for other purposes. * Most drivers use the forward ptr as a link in their I/O * active queue. * A buffer header contains all the information required * to perform I/O. * Most of the routines which manipulate these things * are in bio.c. */struct buf{	int	b_flags;		/* see defines below */	struct	buf *b_forw;		/* headed by devtab of b_dev */	struct	buf *b_back;		/*  "  */	struct	buf *av_forw;		/* position on free list, */	struct	buf *av_back;		/*     if not BUSY*/	int	b_dev;			/* major+minor device name */	int	b_wcount;		/* transfer count (usu. words) */	char	*b_addr;		/* low order core address */	char	*b_xmem;		/* high order core address */	char	*b_blkno;		/* block # on device */	char	b_error;		/* returned after I/O */	char	*b_resid;		/* words not transferred after error */} buf[NBUF];/* * Each block device has a devtab, which contains private state stuff * and 2 list heads: the b_forw/b_back list, which is doubly linked * and has all the buffers currently associated with that major * device; and the d_actf/d_actl list, which is private to the * device but in fact is always used for the head and tail * of the I/O queue for the device. * Various routines in bio.c look at b_forw/b_back * (notice they are the same as in the buf structure) * but the rest is private to each device driver. */struct devtab{	char	d_active;		/* busy flag */	char	d_errcnt;		/* error count (for recovery) */	struct	buf *b_forw;		/* first buffer for this dev */	struct	buf *b_back;		/* last buffer for this dev */	struct	buf *d_actf;		/* head of I/O queue */	struct 	buf *d_actl;		/* tail of I/O queue */};/* * This is the head of the queue of available * buffers-- all unused except for the 2 list heads. */struct	buf bfreelist;/* * These flags are kept in b_flags. */#define	B_WRITE	0	/* non-read pseudo-flag */#define	B_READ	01	/* read when I/O occurs */#define	B_DONE	02	/* transaction finished */#define	B_ERROR	04	/* transaction aborted */#define	B_BUSY	010	/* not on av_forw/back list */#define	B_PHYS	020	/* Physical IO potentially using UNIBUS map */#define	B_MAP	040	/* This block has the UNIBUS map allocated */#define	B_WANTED 0100	/* issue wakeup when BUSY goes off */#define	B_RELOC	0200	/* no longer used */#define	B_ASYNC	0400	/* don't wait for I/O completion */#define	B_DELWRI 01000	/* don't write till block leaves available list */

⌨️ 快捷键说明

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