块设备的基本概述

 

什么是块设备,块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。

块设备驱动程序的调用,可以由上往下分为下面几层。也就是从上层的应用中的读写函数如何到磁盘中的数据,可以这样分,也就是函数调用的步骤。

 

第一层VFS部分,在VFS文件系统中给出了一些分析。

第二层的具体的文件系统,会放在文件系统的部分给分析一下。

第三层页高速缓存是为了提高linux操作系统的访问性能,缓存了磁盘上的一些数据,当上层的应用程序使用是,如果缓存已有并且是最新的,就不需要再往磁盘上读写了,提高读写速度。

第四层通用块层接收cache层发出的磁盘请求,然后发出I/O请求。

第五层IO调度层,可以通过合并请求、重排块设备操作顺序等方式提高块设备访问的顺序。

第六层驱动层对应具体的物理块设备。

本文章主要介绍下面几层,在介绍这几层之前,先给出一些块设备的一些信息。

块设备在处理数据过程中,经常会采用用扇区,块,段为单位来传输数据的。

第一、硬件的块设备控制器采用扇区的固定的长度的块传送数据。

第二、在虚拟文件系统、映射层和文件系统将磁盘数据合并到块的逻辑单元中。一个块对应文件系统中一个最小的磁盘存储单元

第三、块设备驱动程序能够处理数据的段:一个段就是一个内存页或内存页的一部分。

下面看一下一个图来了解他们之间的关系。

 

扇区:

在大部分磁盘设备中,扇区的大小是512个字节,也可以使用用更大的扇区比如1024或2048个字节。注意,扇区作为数据传送的基本单元时,不允许传送少于一个扇区的数据,一般的磁盘设备都可以同理传送几个相邻的扇区。

在linux中,扇区都设为512个字节,要想使用更大的扇区,底层块设备驱动程序也要做相应的变换。对存放在块设备中的一组数据是通过它们在磁盘上的位置来标识,即首个512字节扇区的下标及盲区的数目。

块:

扇区是硬件设备传送数据的基本单位,块是VFS和文件系统传送数据的基本单位。当内核访问一个文件的内容是,必须要从磁盘上读出文件的索引节点所在的块。这个块对应磁盘上一个或多个相邻扇区,对于VFS和文件系统来说,它们是一个单一的数据单元。

在Linux中,块的大小不能超过一个页框,并且是2的幂次方,还要是扇区大小的整数倍,其实它包含的是整数个扇区。

块设备的块大小也不是唯一的。在创建文件系统的时候,可以设置合适的块大小。同一个磁盘上的几个分区可以使用不同的块大小。如果绕过磁盘文件系统,使用原始的读和写,内核可以使用最大的块(4096)执行这个操作.

每个块都有块缓冲区,当内核需要从磁盘上读出一个块时,就会用硬件设备中所获得的值来填充相应的块缓冲区。注意块缓冲区的大小要与相应块的大小相匹配。

缓冲区首部是一个与每个缓冲区相关的buffer_head类型的描述符。它包含内核处理缓冲区需要的所有信息。在每个缓冲区操作之前,内核都要检查它的缓冲区首部。

磁盘的每个I/O操作是在磁盘与一些RAM单元之间相互传送一些相邻扇区的内容,多数情况下,磁盘控制器采用DMA方式进行数据传送。块设备驱动程序只要向磁盘控制器发送一些适当的命令就可以触发一次数据传送,数据传送完成后,控制器就会发出一个中断通知块设备驱动程序。

DMA传送的数据,要求是相邻扇区的数据,如果不是相邻的扇区的数据,效率比较低,因为磁盘需要移动磁头。

在新的磁盘控制器中,也支持所谓的分散-聚焦DMA传送方式,在这种方式中,磁盘可以与一些不连续的内存相互传送数据。

启动一次分散-聚集DMA传送,块设备驱动程序需要向磁盘控制器发送:

第一,要传送的起始磁盘扇区号和总的扇区数。

第二,内存区的描述符链表。

为了使用分散-聚集DMA传送方式,块设备驱动程序要能够处理称为段的数据存储单元。一个段就是一个内存页或内存页中的一部分,它们包含一些相邻磁盘扇区中的数据。一次分散-聚焦DMA操作可能是时传送几个段。

总结:

    本章给出一些一个总的概括,从上层开始的读写数据,一直到最下层的驱动程序工作,中间经过的几个步骤。我会尽自己最努力去介绍这些东西。

 

参考资料

http://www.ibm.com/developerworks/cn/linux/l-cn-read/

深入理解Linux内核(第三版)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值