【转载原因:几个基础概念讲解非常清晰明了,收益匪浅】
【转载原文:https://blog.youkuaiyun.com/weibo1230123/article/details/83930007】
扇区、磁盘块、页、页框、缓冲区之间的关系!
扇区是块设备传输数据的基本单元,也就是说它是块设备中最小的寻址单位,扇区通常的大小为512B。
块是内核对文件系统的一种抽象,也就是说内核执行的所有磁盘操作都是以块为基本单位的。
可以简单的将扇区和块理解为:扇区是硬件设备传输数据的最小单位,而块是操作系统传输数据的最小单位。一个块通常对应一个或多个相邻的扇区,由于内核将块作为对文件系统操作的最小单位,因此VFS将其看作是单一的数据单元。
当内核从磁盘读入数据后或者即将写数据到磁盘时,它需要将数据写入一个缓冲区。缓冲区其实就是物理页框的一部分,因此一个物理页框可能包含一个或多个块缓冲区。根据上述描述的关系,包含磁盘数据的物理页框构造如下图:
正如上面所说,块缓冲区是页框的一部分,因此不用特别描述块缓冲区中的数据。每个块缓冲区都对应一个块缓冲区头buffer_head,他们的关系如同物理页框和物理页框描述符,前者用来存储数据,后者是对前者的属性以及控制信息的描述。块缓冲区头、块缓冲区以及页框的关系如下:
内核中使用buffer_head结构来描述缓冲区头,该结构中的部分字段解释如下:
struct buffer_head {
unsigned long b_state;
struct buffer_head *b_this_page;
struct page *b_page;
atomic_t b_count;
u32 b_size;
sector_t b_blocknr;
char *b_data;
struct block_device *b_bdev;
bh_end_io_t *b_end_io;
void *b_private;
struct list_head b_assoc_buffers;
}
b_state:对块缓冲区状态的描述。
b_this_page:在一个页框中,可能包含多个块缓冲区。一个页框内的所有缓冲区形成循环链表,该字段指向下一个块缓冲区。
b_page:指向缓冲区所在页框的描述符。
b_size:块缓冲区大小。
b_data:当前块在作为缓冲的页框内的位置。
b_bdev:指向块设备的指针
--------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------
概念
扇区:磁盘的最小存储单位;
磁盘块:文件系统读写数据的最小单位;
页:内存的最小存储单位;
联系
一个磁盘块由连续几个(2^n)扇区组成;
页的大小为磁盘块大小的2^n倍;
查看
页大小查看: getconf PAGE_SIZE,常见为4K;
磁盘块大小查看:stat /boot/|grep “IO Block”,常见为4K;
扇区大小查看:fdisk -l,常见为512Byte;
————————————————
版权声明:本文为优快云博主「魏波-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weibo1230123/article/details/83930007