此结构包含关于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 */
};
分享到:
相关推荐
`buffer_head`是Linux内核中用于描述和管理块设备数据与内存缓冲区之间映射关系的关键结构。它的设计与演化反映了Linux内核在面对不断增长的性能和功能需求时,如何逐步优化和改进。通过`buffer_head`与`bio`、SLAB...
在Linux操作系统核心中,数据结构是其高效运行和管理硬件资源的基础。本文件主要讨论了三个关键的数据结构:`block_dev_struct`、`buffer_head`和`device`,它们在块设备驱动、缓冲区管理和设备注册中起着至关重要的...
在Linux内核中,`buffer_head`结构体是处理磁盘I/O的核心数据结构,它封装了磁盘块的相关信息,包括缓冲区的内存地址、磁盘位置、锁状态等。`buffer.c`文件中包含了对这些缓冲区的操作函数,如分配、释放、读写以及...
Inode是文件系统中的基本数据结构,用于存储文件元数据。以下函数用于处理Inode: - `__mark_inode_dirty`:标记Inode为脏状态。 - `write_inode_now`:立即写入Inode到磁盘。 - `clear_inode`:清空Inode的数据。 ...
在Linux操作系统中,VFS(Virtual File System)是内核的核心组成部分之一,它为各种不同的文件系统提供了一个统一的接口,使得用户空间的应用程序可以不关心底层文件系统的具体实现,而能够一致地访问文件和目录。...
这里我们将深入探讨两个重要的数据结构:`block_dev_struct` 和 `buffer_head`,以及它们在Linux内核中的作用。 `block_dev_struct` 结构体主要用于注册块设备,并且与缓冲区缓存(buffer cache)紧密相关。`blk_...
1. **缓冲块头数据结构**: 定义了`struct buffer_head`,包含了缓冲区的状态信息(如是否被锁定、是否脏等),以及指向磁盘块的指针。 2. **BLOCK_DEV.C数据结构分析**: 除了`buffer_head`外,可能还包含关于块设备...
循环缓冲区(Circular Buffer)是一种在计算机编程中广泛使用的数据结构,特别是在处理实时系统和多线程通信中。它是一个固定大小的内存区域,当数据填满后,新写入的数据会覆盖旧的数据,形成一个循环。在C语言中...
`nf_conntrack` 结构体是用于跟踪网络连接状态的核心数据结构之一,在 Linux 内核的 netfilter 架构中扮演着重要角色。该结构体定义如下: ```c struct nf_conntrack { atomic_t use; // 使用计数器,用于跟踪引用...
Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在内存管理和系统调用中起到至关重要的作用。本章详细介绍了Linux内核中的一些主要数据结构,它们是构建和管理操作系统...
在Linux操作系统中,数据结构是其内核实现的基础,它们被用来高效地组织和管理系统的资源。以下是一些主要的实用数据结构,这些结构在Linux内核中扮演着至关重要的角色。 首先,`block_dev_struct` 结构用于注册块...
#include <linux/head.h> // head 头文件,定义了段描述符的简单结构,和几个选择符常量。 #include <asm/system.h> // 系统头文件。以宏的形式定义了许多有关设置或修改 // 描述符/中断门等的嵌入式汇编子程序。...
Linux 数据栈中的关键数据结构skb_buf,全称为socket buffer,是Linux内核网络子系统中的核心数据结构,用于表示接收和发送数据包的包头信息。这个结构在`<include/linux/skbuff.h>`中被定义,其设计考虑了性能和...