天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

推荐:Linux操作系统的核心数据结构

2008-4-8赛迪网佚名

  本文列出了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

  此结构被块设备和字符设备用来向核心登记(包含设备名称以及可对此设备进行的文件操作)。chrdevs和blkdevs中的每个有效分别表示一个字符设备和块设备。

  

     struct device_struct {   const char * name;   struct file_operations * fops;   };   file
  

  每个打开的文件、套接口都用此结构表示。

  

     struct file {   mode_t f_mode;   loff_t f_pos;   unsigned short f_flags;   unsigned short f_count;   unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;   struct file *f_next, *f_prev;   int f_owner; /* pid or -pgrp where SIGIO should be sent */   struct inode * f_inode;   struct file_operations * f_op;   unsigned long f_version;   void *private_data; /* needed for tty driver, and maybe others */   };   files_struct
  

  描叙被某进程打开的所有文件。

  

     struct files_struct {   int count;   fd_set close_on_exec;   fd_set open_fds;   struct file * fd[NR_OPEN];   };   fs_struct   struct fs_struct {   int count;   unsigned short umask;   struct inode * root, * pwd;   };   gendisk
  

  包含关于某个硬盘的信息。用于磁盘初始化与分区检查时。

   

    struct hd_struct {   long start_sect;   long nr_sects;   };   struct gendisk {   int major; /* major number of driver */   const char *major_name; /* name of major driver */   int minor_shift; /* number of times minor is shifted to get real minor */   int max_p; /* maximum partitions per device */   int max_nr; /* maximum number of real devices */   void (*init)(struct gendisk *);   /* Initialization called before we do our thing */   struct hd_struct *part; /* partition table */   int *sizes; /* device size in blocks, copied to blk_size[] */   int nr_real; /* number of real devices */   void *real_devices; /* internal use */   struct gendisk *next;   };   inode
  

  此VFS inode结构描叙磁盘上一个文件或目录的信息。

  

     struct inode {   kdev_t i_dev;   unsigned long i_ino;   umode_t i_mode;   nlink_t i_nlink;   uid_t i_uid;   gid_t i_gid;   kdev_t i_rdev;   off_t i_size;   time_t i_atime;   time_t i_mtime;   time_t i_ctime;   unsigned long i_blksize;   unsigned long i_blocks;   unsigned long i_version;   unsigned long i_nrpages;   struct semaphore i_sem;   struct inode_operations *i_op;   struct super_block *i_sb;   struct wait_queue *i_wait;   struct file_lock *i_flock;   struct vm_area_struct *i_mmap;   struct page *i_pages;   struct dquot *i_dquot[MAXQUOTAS];   struct inode *i_next, *i_prev;   struct inode *i_hash_next, *i_hash_prev;   struct inode *i_bound_to, *i_bound_by;   struct inode *i_mount;   unsigned short i_count;   unsigned short i_flags;   unsigned char i_lock;   unsigned char i_dirt;   unsigned char i_pipe;   unsigned char i_sock;   unsigned char i_seek;   unsigned char i_update;   unsigned short i_writecount;   union {   struct pipe_inode_info pipe_i;   struct minix_inode_info minix_i;   struct ext_inode_info ext_i;   struct ext2_inode_info ext2_i;   struct hpfs_inode_info hpfs_i;   struct msdos_inode_info msdos_i;   struct umsdos_inode_info umsdos_i;   struct iso_inode_info isofs_i;   struct nfs_inode_info nfs_i;   struct xiafs_inode_info xiafs_i;   struct sysv_inode_info sysv_i;   struct affs_inode_info affs_i;   struct ufs_inode_info ufs_i;   struct socket socket_i;   void *generic_ip;   } u;   };   ipc_perm
  

  此结构描叙对一个系统V IPC对象的存取权限。

  

     struct ipc_perm   {   key_t key;   ushort uid; /* owner euid and egid */   ushort gid;   ushort cuid; /* creator euid and egid */   ushort cgid;   ushort mode; /* access modes see mode flags below */   ushort seq; /* sequence number */   };   irqaction
  

  用来描叙系统的中断处理过程。

  

     struct irqaction {   void (*handler)(int, void *, struct pt_regs *);   unsigned long flags;   unsigned long mask;   const char *name;   void *dev_id;   struct irqaction *next;   };   linux_binfmt
  

  用来表示可被Linux理解的二进制。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:赛迪网 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行