当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > Linux 核心--16.Linux数据结构

Unix/Linux
FreeBSD下提高MySQL使用效率
Samba简介
linux技巧:清除U盘病毒的方法
Linux技巧:如何在不摧毁Win系统的情况下体验Linux
linux技巧:修改系统22端口的方法
Linux教程:10条秘诀确保Linux桌面安全性
Linux技巧:介绍两种修改22端口的方法
硬盘安装Puppy Linux 4.0中文版全过程
Linux教程:文件系统基础知识
Linux新手入门教程:教你硬盘挂载方法
如何在双系统下卸载Linux系统
Linux教程:通过管理工具自建防火墙
在Linux系统上编译构建谷歌Chromium浏览器
Linux教程:修改文件权限命令chmod的用法
用Ubuntu自带的FTP服务器vsftpd的一些技巧
Linux教程:设置时间与同步的方法(NTP)
Linux的压缩打包方式之tar命令
Linux中广泛使用的防垃圾邮件技术
在Ubuntu系统中如何对文件进行加密传输
Linux系统防火墙的伪装机制抵抗恶意黑客攻击

Unix/Linux 中的 Linux 核心--16.Linux数据结构


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 98 ::
收藏到网摘: n/a

  第十五章 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_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