预备知识
- 块设备
Linux系统中能够随机访问的数据片(chunk)的设备称为块设备,这些数据片称为片。而字符设备是按照字符流的方式有序访问。常见的块设备如硬盘、CD-ROM,而字符设备主要有串口和键盘。块设备最小可寻址的单元称为扇区,通常为512 Byte。而文件系统最小逻辑可寻址单元称为块。块的大小比扇区大,但比页小,常见为4K。内核执行磁盘的所有操作是按照块来操作的,又称为“文件块”或者是”I/O“ 块。
- 缓冲区与缓冲区头
当一个块被调入到内存中,它要被存储在一个缓冲区中。每个缓冲区与一个块对应,
它相当于磁盘块在内存中的表示。而文件在内存中由file结构体表示。由于内核处理块时需要一些信息,如块属于哪个设备、对应于哪个块缓冲区,所以每个缓冲区都有一个缓冲区描述符,称为buffer_head,它包含了内核操作缓冲区所需要的全部信息
缓冲区描述符 buffer_head (include/linux/buffer_head.h)
struct buffer {
unsigned long b_state; // 缓冲状态位图
struct buffer_head *b_this_page; //页缓冲区的循环列表