你也可以通过我的独立博客 —— www.huliujia.com 获取本篇文章
块设备(Block Device)简介
块设备是一种以块(block)为单位可以进行随机存取的硬件设备。常见的块设备有硬盘,软盘,闪存等。
块设备的最小寻址单元是扇区(sector),一个扇区是2^n个字节,512Bytes是最常见的扇区大小。内核的文件系统使用块(block)作为最小寻址单元。block的大小是sector的2^n次方倍(n可以为0),但是不大于page size. 常见的block大小为512Bytes,1KB,4KB。
buffer 与 buffer_head结构体
当一个block被读入内存或者等待写入块设备时,保存在buffer中,一个buffer对应一个block。每个buffer都有一个对应的描述符,这个描述符被称为buffer head,使用buffer_head结构体来表示(定义在<linux/buffer_head.h>中),buffer_head结构体的唯一角色是作为buffer-to-block映射关系的描述符,该结构体保存了内核对buffer进行操作需要的所有信息。
下面是buffer的定义:
struct buffer_head
{
unsigned long b_state; /* buffer state flags */
struct buffer_head *b_this_page; /* list of page’s buffers */
struct page *b_page; /* associated page */
sector_t b_blocknr; /* starting block number */
size_t b_size; /* size of mapping */
char *b_data; /* pointer to data within the page */
struct block_device *b_bdev; /* associated block device */
bh_end_io_t *b_end_io; /* I/O completion */
void *b_private; /* reserved for b_end_io */
struct list_head b_assoc_buffers; /* associated mappings */
struct address_space *b_asso