`
highsky
  • 浏览: 276194 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux核心数据结构--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                  */

};

分享到:
评论

相关推荐

    Linux 通用块设备层基础之buffer_head .

    `buffer_head`是Linux内核中用于描述和管理块设备数据与内存缓冲区之间映射关系的关键结构。它的设计与演化反映了Linux内核在面对不断增长的性能和功能需求时,如何逐步优化和改进。通过`buffer_head`与`bio`、SLAB...

    linux操作系统核心常用的数据结构.pdf

    在Linux操作系统核心中,数据结构是其高效运行和管理硬件资源的基础。本文件主要讨论了三个关键的数据结构:`block_dev_struct`、`buffer_head`和`device`,它们在块设备驱动、缓冲区管理和设备注册中起着至关重要的...

    linux_kernel_2.4.rar_Linux 2.4 buffer.c_linux kernel 2_内核

    在Linux内核中,`buffer_head`结构体是处理磁盘I/O的核心数据结构,它封装了磁盘块的相关信息,包括缓冲区的内存地址、磁盘位置、锁状态等。`buffer.c`文件中包含了对这些缓冲区的操作函数,如分配、释放、读写以及...

    Linux内核API手册

    Inode是文件系统中的基本数据结构,用于存储文件元数据。以下函数用于处理Inode: - `__mark_inode_dirty`:标记Inode为脏状态。 - `write_inode_now`:立即写入Inode到磁盘。 - `clear_inode`:清空Inode的数据。 ...

    The Linux Kernel API

    在Linux操作系统中,VFS(Virtual File System)是内核的核心组成部分之一,它为各种不同的文件系统提供了一个统一的接口,使得用户空间的应用程序可以不关心底层文件系统的具体实现,而能够一致地访问文件和目录。...

    linux操作系统核心常用的数据结构借鉴.pdf

    这里我们将深入探讨两个重要的数据结构:`block_dev_struct` 和 `buffer_head`,以及它们在Linux内核中的作用。 `block_dev_struct` 结构体主要用于注册块设备,并且与缓冲区缓存(buffer cache)紧密相关。`blk_...

    Linux0.11 文件系统源代码分析—数据块管理源代码分析

    1. **缓冲块头数据结构**: 定义了`struct buffer_head`,包含了缓冲区的状态信息(如是否被锁定、是否脏等),以及指向磁盘块的指针。 2. **BLOCK_DEV.C数据结构分析**: 除了`buffer_head`外,可能还包含关于块设备...

    c语言实现循环buffer

    循环缓冲区(Circular Buffer)是一种在计算机编程中广泛使用的数据结构,特别是在处理实时系统和多线程通信中。它是一个固定大小的内存区域,当数据填满后,新写入的数据会覆盖旧的数据,形成一个循环。在C语言中...

    skbuffer解读

    `nf_conntrack` 结构体是用于跟踪网络连接状态的核心数据结构之一,在 Linux 内核的 netfilter 架构中扮演着重要角色。该结构体定义如下: ```c struct nf_conntrack { atomic_t use; // 使用计数器,用于跟踪引用...

    linux数据结构[汇编].pdf

    Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在内存管理和系统调用中起到至关重要的作用。本章详细介绍了Linux内核中的一些主要数据结构,它们是构建和管理操作系统...

    Linux操作系统中主要实用数据结构简介

    在Linux操作系统中,数据结构是其内核实现的基础,它们被用来高效地组织和管理系统的资源。以下是一些主要的实用数据结构,这些结构在Linux内核中扮演着至关重要的角色。 首先,`block_dev_struct` 结构用于注册块...

    linux内核 0.11版本源码 带中文注释

    #include <linux/head.h> // head 头文件,定义了段描述符的简单结构,和几个选择符常量。 #include <asm/system.h> // 系统头文件。以宏的形式定义了许多有关设置或修改 // 描述符/中断门等的嵌入式汇编子程序。...

    linux数据栈的关键数据结构skb_buf.doc

    Linux 数据栈中的关键数据结构skb_buf,全称为socket buffer,是Linux内核网络子系统中的核心数据结构,用于表示接收和发送数据包的包头信息。这个结构在`<include/linux/skbuff.h>`中被定义,其设计考虑了性能和...

Global site tag (gtag.js) - Google Analytics