首页 > 其他分享 >块设备的工作模式

块设备的工作模式

时间:2023-11-14 22:32:43浏览次数:28  
标签:文件系统 dev 工作 模式 bdev inode block 设备

块设备的mknod 还是会创建在 /dev 路径下面,这一点和字符设备一样。/dev 路径下面是 devtmpfs 文件系统。这是块设备遇到的第一个文件系统。我们会为这个块设备文件,分配一个特殊的 inode,这一点和字符设备也是一样的。只不过字符设备走 S_ISCHR 这个分支,对应 inode 的 file_operations 是 def_chr_fops;而块设备走 S_ISBLK 这个分支,对应的 inode 的 file_operations 是 def_blk_fops。

接下来,我们要调用 mount,将这个块设备文件挂载到一个文件夹下面。如果这个块设备原来被格式化为一种文件系统的格式,例如 ext4,那我们调用的就是 ext4 相应的 mount 操作。这是块设备遇到的第二个文件系统,也是向这个块设备读写文件,需要基于的主流文件系统。

在 bdget 中,我们遇到了第三个文件系统,bdev 伪文件系统。bdget 函数根据传进来的 dev_t,在 blockdev_superblock 这个文件系统里面找到 inode。这里注意,这个 inode 已经不是 devtmpfs 文件系统的 inode 了。blockdev_superblock 的初始化在整个系统初始化的时候,会调用 bdev_cache_init 进行初始化。

我们有一个磁盘 /dev/sda,我们既可以把它整个格式化成一个文件系统,也可以把它分成多个分区 /dev/sda1、 /dev/sda2,然后把每个分区格式化成不同的文件系统。如果我们访问某个分区的设备文件 /dev/sda2,我们应该能知道它是哪个磁盘设备的。按说它们的驱动应该是一样的。如果我们访问整个磁盘的设备文件 /dev/sda,我们也应该能知道它分了几个区域,所以就有了下图这个复杂的关系结构。

块设备的工作模式_块设备

  1. 所有的块设备被一个 map 结构管理从 dev_t 到 gendisk 的映射;
  2. 所有的 block_device 表示的设备或者分区都在 bdev 文件系统的 inode 列表中;
  3. mknod 创建出来的块设备文件在 devtemfs 文件系统里面,特殊 inode 里面有块设备号;
  4. mount 一个块设备上的文件系统,调用这个文件系统的 mount 接口;
  5. 通过按照 /dev/xxx 在文件系统 devtmpfs 文件系统上搜索到特殊 inode,得到块设备号;
  6. 根据特殊 inode 里面的 dev_t 在 bdev 文件系统里面找到 inode;
  7. 根据 bdev 文件系统上的 inode 找到对应的 block_device,根据 dev_t 在 map 中找到 gendisk,将两者关联起来;
  8. 找到 block_device 后打开设备,调用和 block_device 关联的 gendisk 里面的 block_device_operations 打开设备;
  9. 创建被 mount 的文件系统的 super_block。

块设备的工作模式_块设备_02


标签:文件系统,dev,工作,模式,bdev,inode,block,设备
From: https://blog.51cto.com/key3feng/8379683

相关文章

  • 虚拟机三种网络连接模式
    虚拟机中通常有三种网络连接模式:桥接模式、NAT模式和仅主机模式。桥接模式:在此模式下,虚拟机与主机共享同一个网络,这样虚拟机就可以直接访问网络中的其他设备,如路由器、交换机等,同时也可以让这些设备直接访问到虚拟机。桥接模式用到的网卡通常是VMnet0。NAT模式:NAT(网络地址转换)模......
  • 离职了14天了,准备开始找工作了
    1.面试总结一springCloud,dubbo为什么选择用springcloudspringcloud相当于一个完整的体系,能帮助开发者快速的构建分布式系统,里面的组件比dubbo多dubbo相比于springcloud来说优势在性能要好,使用的协议不一样,dubbo使用的是默认的协议dubbo协议,rmihessionherif springclo......
  • 行为型模式-访问者模式
    1什么是访问者模式访问者模式(VisitorPattern)是一种行为型设计模式,它允许在不改变数据结构的前提下定义作用于数据结构元素的新操作。使用访问者模式,可以将数据结构和数据操作相分离,从而使得数据结构的修改和数据操作的增加变得更加容易。在访问者模式中,包括以下几个核心角色:......
  • 一篇掌握华三企业设备---密码复杂度要求(收藏备用)
    作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)关于密码复杂度要求实际中有的环境对于密码的复杂度、多久修改密码有要求或者客户不想弄的这么复杂,这个时候就需要来定义密码复杂度要求了。[CoreA]local-useradmin[CoreA-luser-manage-admin]passwordsimpleadminThe......
  • 行为型模式-状态模式
    1什么是状态模式状态模式(StatePattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为。状态模式通过将对象的状态封装成独立的类,使得对象在不同状态下可以有不同的行为,同时使状态转换更加简洁和可控。在状态模式中,包括以下几个核心角色:Context(上下文):定义客......
  • 2024版链动模式开发系统之商品专区解析
      链动2+1模式系统商城的商品专区解析,会员购买专区分为分享专区和精品专区,他们的不同之处在于分享专区的产品,分享专区有激活邀请码的产品,有1元购买产品成为体验会员的优惠产品,在链动2+1模式商城系统里被邀请注册的会员,初始身份是普通会员级别,普通会员没有分享邀请推广的功能。......
  • 设计模式实验12实验13
    外观模式 packagetest12;publicclassMemory{publicvoidcheck(){System.out.println("内存自检");}}packagetest12;publicclassHardDisk{publicvoidread(){System.out.println("硬盘读取");}}packa......
  • 软件设计模式学习每日总结-第二天
    回顾第一天:昨天学习的设计模式中的uml类图,还记得类与类的关系有关联(聚合、组合),依赖,继承,实现,其中依赖的耦合度最小,而继承的耦合度最大,而软件设计追求的就是高内聚,低耦合。还学习各种软件设计原则。第二天创建型模式:将创建和使用分离,使用者不需要关注创建的细节。简单工厂模式:......
  • Unity-观察者模式(observer)
    Unity-观察者模式(observer)引言​ 了解完委托(delegate)与事件(event)之后,我们来讨论一个问题。​ 假设我们有一个热水器,我们给他同上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你温度;2、液晶屏也会改变水温的显示,来提示水已经烧开了​ 现在我们需要写一个程序来模拟这个......
  • Unity-单例模式
    Unity-单例模式前言​ 对于某些特殊的类,我们希望在整个程序的生命周期只创建一个该类的对象,或是希望在其他类没有持有该类的引用,就可以调用该类中的函数,我们就需要将这个类写成单例模式单例的简单实现publicclassTest(){ pubicabstractTestInstance;//创建程序中该......