第十五章 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);
推荐阅读
- Linux 核心--17.关于Linux的Web与FTP站点 --18.作者简介
- Linux 核心--13.Linux动态模块
- Linux 核心--14.处理器
- Linux 核心--15.Linux内核资源
- Linux 核心--12.Linux内核机制
- Linux 核心--11.网络
- Linux 核心--10.文件系统
- 诺基亚将在更多产品上采用Linux操作系统
- 蛤蟆皮的功效与作用 蛤蟆皮的功效
- Linux 核心--7.PCI设备