Linux 核心--16.Linux数据结构

第十五章 Linux核心数据结构

本章列出了Linux实用的主要数据结构 。


block_dev_struct
此结构用于向核心登记块设备,它还被buffer cache实用 。所有此类结构都位于blk_dev数组中 。

struct blk_dev_struct {
void (*request_fn)(void);
struct request * current_request;
struct request plug;
struct tq_struct plug_tq;
};

buffer_head
此结构包含关于buffer cache中一块缓存的信息 。

/* bh state bits */
#define BH_Uptodate0 /* 1 if the buffer contains valid data*/
#define BH_Dirty 1 /* 1 if the buffer is dirty */
#define BH_Lock2 /* 1 if the buffer is locked*/
#define BH_Req 3 /* 0 if the buffer has been invalidated */
#define BH_Touched 4 /* 1 if the buffer has been touched (aging) */
#define BH_Has_aged5 /* 1 if the buffer has been aged (aging)*/
#define BH_Protected 6 /* 1 if the buffer is protected */
#define BH_FreeOnIO7 /* 1 to discard the buffer_head after IO*/

struct buffer_head {
/* First cache line: */
unsigned longb_blocknr;/* block number */
kdev_t b_dev;/* device (B_FREE = free) */
kdev_t b_rdev; /* Real device*/
unsigned longb_rsector;/* Real buffer location on disk */
struct buffer_head *b_next;/* Hash queue list*/
struct buffer_head *b_this_page; /* circular list of buffers in one
page */

/* Second cache line: */
unsigned longb_state;/* buffer state bitmap (above)*/
struct buffer_head *b_next_free;
unsigned int b_count;/* users using this block */
unsigned longb_size; /* block size */

/* Non-performance-critical data follows. */
char *b_data;/* pointer to data block*/
unsigned int b_list; /* List that this buffer appears*/
unsigned longb_flushtime;/* Time when this (dirty) buffer
* should be written*/
unsigned longb_lru_time; /* Time when this buffer was
* last used. */
struct wait_queue*b_wait;
struct buffer_head *b_prev;/* doubly linked hash list*/
struct buffer_head *b_prev_free; /* doubly linked list of buffers*/
struct buffer_head *b_reqnext; /* request queue*/
};

device
系统中每个网络设备都用一个设备数据结构来表示 。

struct device
{

/*
 * This is the first field of the "visible" part of this structure
 * (i.e. as seen by users in the "Space.c" file).It is the name
 * the interface.
 */
char*name;

/* I/O specific fields */
unsigned long rmem_end;/* shmem "recv" end */
unsigned long rmem_start;/* shmem "recv" start */
unsigned long mem_end; /* shared mem end */
unsigned long mem_start; /* shared mem start */
unsigned long base_addr; /* device I/O address */
unsigned char irq; /* device IRQ number*/

/* Low-level status flags. */
volatile unsigned charstart, /* start an operation */
interrupt; /* interrupt arrived*/
unsigned long tbusy; /* transmitter busy */
struct device *next;

/* The device initialization function. Called only once. */
int (*init)(struct device *dev);

/* Some hardware also needs these fields, but they are not part of
 the usual set specified in Space.c. */
unsigned char if_port; /* Selectable AUI,TP, */
unsigned char dma; /* DMA channel*/

struct enet_statistics* (*get_stats)(struct device *dev);

推荐阅读