了解Linux操作系统中的块设备

发布者:上海IT外包来源:http://www.lanmon.net点击数:1020

设备是以“块”为单位存储数据的设备,例如磁盘设备,光盘或USB闪存驱动器。本文首先重点分析磁盘设备的相关内容。其他设备类型非常相似,暂时不会介绍。
在Windows操作系统下,磁盘设备似乎是一个真实的设备,我们可以通过图形界面管理磁盘设备。图1显示了Windows下的磁盘管理界面。您可以通过此界面清楚地看到磁盘设备并对其进行格式化。
了解Linux操作系统中的块设备
图1 Windows磁盘设备
Linux操作系统的磁盘设备不直观。在LInux系统中“一切都是文件”的概念中,磁盘设备实际上是一个文件,但它是一个特殊文件。图2显示了一些磁盘和分区的文件路径,其中黄色字体部分是磁盘的路径(类似于文件路径),前面红色框中的b表示该文件是磁盘设备文件,而不是一个普通的文件。
了解Linux操作系统中的块设备
图2 Linux系统下的磁盘设备
磁盘设备文件也位于VFS(虚拟文件系统)下,类似于Ext4等文件系统(参见图3)。用户级别可以使用访问普通文件的接口(API)访问磁盘。以下代码是用Python实现的程序,它将字符串写入磁盘。代码很简单,就是打开磁盘所在的路径(路径),然后调用write函数来写入数据。
了解Linux操作系统中的块设备
Linux系统中磁盘的性质
通过上面的描述,我们知道对于Linux操作系统,磁盘是一个文件。磁盘本身是一个线性存储空间(可以理解为一个大型数组),它与文件非常相似。鉴于上述相似之处,Linux将磁盘设备抽象为单个文件没有任何问题。
本质上,Linux操作系统中的磁盘设备是基于一个名为bdev的伪文件系统来管理的,该系统是内存中的伪文件系统(在内存文件系统中,没有持久数据),位置与文件系统如Ext4相同。如图3所示,bdev文件系统的位置是图中的红色区域。了解Linux操作系统中的块设备
图3 bdev文件系统位置
了解块设备的管理,结合我们之前对文件系统的介绍,因此很容易理解后续内容。在文件系统相关文章的介绍中,我们知道不同文件系统的数据处理的关键是它提供的功能集,并且该功能集在文件打开时确定。磁盘设备也是如此。当我们打开磁盘设备时,操作系统根据磁盘设备的特性初始化inode中设置的功能。可以通过功能集完成对磁盘设备的后续读写操作。如下面的代码所示,块设备连同字符设备和管道被视为特殊文件,并初始化相应的功能集。
了解Linux操作系统中的块设备
完成功能集的初始化后,当用户调用VFS层的接口时,VFS层可以找到特定的处理功能来完成用户的操作。此处设置的功能与本地文件系统的功能集相同。不同之处在于普通文件系统需要管理目录和文件,而bdev伪文件系统将磁盘视为大文件,这更简单。
磁盘缓存
由于磁盘伪文件系统bdev本身也是一个文件系统,因此自然也可以有一个缓存。此缓存是用于提高磁盘性能的缓存系统。磁盘的缓存系统类似于文件系统的缓存系统,也通过页面缓存实现。当然,可以关闭Linux磁盘缓存,并调用另一组函数。
这可能更抽象。让我们举一个具体的例子来看一下磁盘缓存的具体实现。以下是磁盘伪文件系统的功能集。我们以写数据为例。
了解Linux操作系统中的块设备
写入数据的函数是blkdev_write_iter,它调用generic_perform_write函数。如果您阅读有关文件系统的此文件,则很明显后者是将数据写入VFS中的页面缓存的功能。也就是说,块设备伪文件系统的逻辑与本地文件系统完全相同。缓存部分是最新的,请自行阅读具体代码。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部