Linux 文件系统解析(二)fs驱动实现

在VFS框架下编写一个文件系统是十分方便的,只需要实现VFS需要用到的接口即可,大量磁盘文件系统被加入了进来。除此之外,很多“虚拟”的文件系统也被创造出来,为内核提供了很多重要特性。本篇来梳理一下Linux文件系统的类型,以及以ext4为例来看看一个文件系统驱动是如何被实现的。

文件系统类型

再来回顾一下之前梳理的文件系统框架:

文件系统根据底层操作的硬件,基本可分为四类:

普通文件系统

传统意义的磁盘文件系统,是文件系统驱动占比最大的部分,用于访问磁盘上的数据。

内存文件系统

底层存储介质是内存的文件系统,常见的是tmpfs和ramfs。系统中/tmp目录被挂载为tmpfs,主要用于存放临时文件,系统重启即会清空。内存文件系统还在kernel启动时起到关键作用,kernel启动时各分区及关键驱动可能还没加载,此时通常先挂载一个基于内存的根文件系统initramfs,在其中完成系统初始化工作,再将rootfs切换到真正的根文件系统磁盘。

网络文件系统

nfs可以基于网络来共享本地数据或者访问远端设备的数据。nfs并不处理文件系统的实际操作,只是提供基于rpc协议的网络客户端与服务端程序。当共享本地数据时启动服务端,将收到的网络请求转换为对共享目录的操作。当访问远端设备时启动客户端,将文件读写等操作转换为网络请求发出。

特殊文件系统

Linux中的"文件",除了代表磁盘上真实的文件,还可以是对系统及硬件资源操作访问的入口。Linux用一些特殊的文件系统来管理这些文件。例如,devtmpfs用于管理设备节点文件,proc,sysfs中的文件用于访问内核运行时的一些数据结构。

关键接口

VFS框架提供了大量接口,编写一个文件系统驱动不需要全部实现,VFS也提供一些通用的接口可以直接使用。这里列出一些关键接口及其作用。

file_system_type

struct file_system_type用于描述一个文件系统类,是最先需要定义的结构,其中最重要的是实现mount接口。

  • mount() , 挂载一个该类型文件系统实例时被调用,创建super_block以及根目录dentry,并初始化。

super_operations

管理文件系统整体信息的接口,主要功能是对inode资源的管理。

  • alloc_inode(),在内存中分配一个inode并初始化,通常文件系统驱动会自己定义一个更大的结构并内嵌inode。
  • write_inode(),将一个inode写入磁盘。
  • evict_inode(),删除一个inode。

inode_operations

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux内核探秘:深入解析文件系统和设备驱动的架构与设计》是一本非常有价值的书籍。它深入探索了Linux操作系统内核中文件系统和设备驱动的架构和设计。 这本书首先介绍了Linux内核的基本概念和组成部分。它详细描述了Linux文件系统的设计原理和实现方式。文件系统是操作系统用于管理和组织文件的重要组成部分。该书详细介绍了Linux内核中常见的文件系统类型,如Ext4、Btrfs和F2FS,并深入探讨了文件系统的数据结构、缓存和访问控制等关键方面。 另外,该书还详细解析Linux内核中的设备驱动程序。设备驱动程序是操作系统与硬件之间的桥梁。这本书介绍了设备驱动程序的基本原理和工作方式,包括设备驱动模型、设备节点和设备文件系统等。同时,书中还讨论了设备间通信和驱动程序的编写方法,并提供了实际案例进行说明。 这本书的特点是理论结合实践。书中提供了大量的示例代码和实际案例,让读者可以更好地理解和应用所学知识。此外,书中还提供了一些常见问题和解决方案,帮助读者更好地解决实际问题。 总之,《Linux内核探秘:深入解析文件系统和设备驱动的架构与设计》是一本对于想要深入了解Linux内核中文件系统和设备驱动设计的读者非常有价值的书籍。无论是对于专业人士还是对于Linux爱好者来说,它都是一本不容错过的好书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值