本文列出了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_Uptodate 0 /* 1 if the buffer contains valid data */

              #define BH_Dirty 1 /* 1 if the buffer is dirty */

              #define BH_Lock 2 /* 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_aged 5 /* 1 if the buffer has been aged (aging) */

              #define BH_Protected 6 /* 1 if the buffer is protected */

              #define BH_FreeOnIO 7 /* 1 to discard the buffer_head after IO */

              struct buffer_head {

              /* First cache line: */

              unsigned long b_blocknr; /* block number */

              kdev_t b_dev; /* device (B_FREE = free) */

              kdev_t b_rdev; /* Real device */

              unsigned long b_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 long b_state; /* buffer state bitmap (above) */

              struct buffer_head *b_next_free;

              unsigned int b_count; /* users using this block */

              unsigned long b_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 long b_flushtime; /* Time when this (dirty) buffer

              * should be written */

              unsigned long b_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 char start, /* 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);

              /*

              * This marks the end of the "visible" part of the structure. All

              * fields hereafter are internal to the system, and may change at

              * will (read: may be cleaned up at will).

              */

              /* These may be needed for future network-power-down code. */

              unsigned long trans_start; /* Time (jiffies) of last transmit */

              unsigned long last_rx; /* Time of last Rx */

              unsigned short flags; /* interface flags (BSD)*/

              unsigned short family; /* address family ID */

              unsigned short metric; /* routing metric */

              unsigned short mtu; /* MTU value */

              unsigned short type; /* hardware type */

              unsigned short hard_header_len; /* hardware hdr len */

              void *priv; /* private data */

              /* Interface address info. */

              unsigned char broadcast[MAX_ADDR_LEN];

              unsigned char pad;

              unsigned char dev_addr[MAX_ADDR_LEN];

              unsigned char addr_len; /* hardware addr len */

              unsigned long pa_addr; /* protocol address */

              unsigned long pa_brdaddr; /* protocol broadcast addr*/

              unsigned long pa_dstaddr; /* protocol P-P other addr*/

              unsigned long pa_mask; /* protocol netmask */

              unsigned short pa_alen; /* protocol address len */

              struct dev_mc_list *mc_list; /* M'cast mac addrs */

              int mc_count; /* No installed mcasts */

              struct ip_mc_list *ip_mc_list; /* IP m'cast filter chain */

              __u32 tx_queue_len; /* Max frames per queue */

              /* For load balancing driver pair support */

              unsigned long pkt_queue; /* Packets queued */

              struct device *slave; /* Slave device */

              struct net_alias_info *alias_info; /* main dev alias info */

              struct net_alias *my_alias; /* alias devs */

              /* Pointer to the interface buffers. */

              struct sk_buff_head buffs[DEV_NUMBUFFS];

              /* Pointers to interface service routines. */

              int (*open)(struct device *dev);

              int (*stop)(struct device *dev);

              int (*hard_start_xmit) (struct sk_buff *skb,

              struct device *dev);

              int (*hard_header) (struct sk_buff *skb,

              struct device *dev,

              unsigned short type,

              void *daddr,

              void *saddr,

              unsigned len);

              int (*rebuild_header)(void *eth,

              struct device *dev,

              unsigned long raddr,

              struct sk_buff *skb);

              void (*set_multicast_list)(struct device *dev);

              int (*set_mac_address)(struct device *dev,

              void *addr);

              int (*do_ioctl)(struct device *dev,

              struct ifreq *ifr,

              int cmd);

              int (*set_config)(struct device *dev,

              struct ifmap *map);

              void (*header_cache_bind)(struct hh_cache **hhp,

              struct device *dev,

              unsigned short htype,

              __u32 daddr);

              void (*header_cache_update)(struct hh_cache *hh,

              struct device *dev,

              unsigned char * haddr);

              int (*change_mtu)(struct device *dev,

              int new_mtu);

              struct iw_statistics* (*get_wireless_stats)(struct device *dev);

              };

              device_struct

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!