Linux操作系统中的块设备是什么

这篇文章主要介绍了Linux操作系统中的块设备是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux操作系统中的块设备是什么文章都会有所收获,下面我们一起来看看吧。

在Windows操作系统下磁盘设备似乎是一个实实在在的设备,我们可以通过图形界面对磁盘设备进行管理。如图1是Windows下的磁盘管理界面,可以通过这个界面清晰的看到磁盘设备,并且可以对其进行格式化等操作。

Linux操作系统中的块设备是什么  linux 第1张

图1 Windows磁盘设备

Linux操作系统的磁盘设备并不直观,在LInux系统中“一切皆文件”的理念下,磁盘设备其实是一个文件,只不过是一个比较特殊的文件。如图2是某些磁盘和分区的文件路径,其中黄色字体部分是磁盘的路径(类似文件路径),而前面红色方框内的b表示这个文件是磁盘设备文件,而非普通文件。

Linux操作系统中的块设备是什么  linux 第2张

图2 Linux系统下磁盘设备

磁盘设备文件也是位于VFS(虚拟文件系统)下面,与Ext4等文件系统类似(参考图3)。用户层面可以用访问普通文件的接口(API)访问磁盘。如下代码是用Python实现的一个向磁盘写入字符串的程序。代码很简单,就是打开磁盘所在的路径(path),然后调用write函数写数据。

Linux操作系统中的块设备是什么  linux 第3张

Linux系统中磁盘的本质

通过上面的描述我们知道对于Linux操作系统来说,磁盘就是一个文件。而磁盘本身就是一个线性存储空间(可以理解为一个大数组),这种方式与文件也是非常类似的。鉴于上述相似性,Linux将磁盘设备抽象为一个文件并没有任何不妥之处。

实质上,在Linux操作系统磁盘设备是基于一个称为bdev的伪文件系统来管理的,bdev文件系统是一个在内存中的伪文件系统(在内存的文件系统,无持久化的数据),位置与Ext4等文件系统相同。如图3所示,bdev文件系统的位置为图中红色区域。

Linux操作系统中的块设备是什么  linux 第4张

图3 bdev文件系统位置

理解了块设备的管理方式,再结合我们之前对文件系统的相关介绍,这样就很容易理解后续的内容了。在文件系统相关文章介绍中我们知道,不同文件系统数据处理的关键是其提供的函数集,而这个函数集是在打开文件的时候确定的。磁盘设备也是如此,当我们打开磁盘设备时,操作系统根据磁盘设备的特性,会初始化inode中的函数集。而后续对该磁盘设备的读写操作就能通过该函数集完成。如下代码所示  ,块设备连同字符设备和管道都作为特殊的文件进行处理,并初始化对应的函数集。

Linux操作系统中的块设备是什么  linux 第5张

完成函数集的初始化后,当用户调用VFS层的接口时,VFS层就可以找到具体的处理函数,进而完成用户的操作。这里的函数集与本地文件系统的函数集别无二致,差异在于普通文件系统需要管理目录和文件,而bdev伪文件系统是将磁盘看作一个大文件,更简单一些。

磁盘的缓存

既然磁盘伪文件系统bdev本身也是一个文件系统,因此自然也可以有缓存。这个缓存就是用于提升磁盘性能的缓存系统。磁盘的缓存系统与文件系统的缓存系统类似,也是通过页缓存来实现的。当然,Linux磁盘的缓存是可以关闭的,此时将调用另外一套函数集。

这样说起来可能比较抽象,下面我们以一个具体的例子来看一下磁盘缓存的具体实现。如下是磁盘伪文件系统的函数集,我们以写数据为例进行介绍。

Linux操作系统中的块设备是什么  linux 第6张

图4 磁盘函数集

写数据的函数为blkdev_write_iter,该函数会调用generic_perform_write函数。如果大家阅读过本号关于文件系统的文件的话,很清楚后者就是VFS中向页缓存写数据的函数。也就是说块设备伪文件系统的逻辑与本地文件系统完全一致。

关于“Linux操作系统中的块设备是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Linux操作系统中的块设备是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注蜗牛博客行业资讯频道。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论电报频道链接