zoukankan      html  css  js  c++  java
  • 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】

    本文转载自:https://blog.csdn.net/fenglifeng1987/article/details/8302921

    超级块是来描述整个文件系统信息的,可以说是一个全局的数据结构,可以把它理解成文件系统的心脏

    比较简单的文件系统中(如ramfssysfs),超级块的初始化大致分三步:

    1sget

    2fill_super

    3simple_set_mnt

    sget

    /**

     *        sget        -        findor create a superblock

     *        @type:        filesystemtype superblock should belong to

     *        @test:        comparisoncallback

     *        @set:        setupcallback

     *        @data:        argumentto each of them

     */

    struct super_block*sget(struct file_system_type*type,                //得到一个超级快superblock

    int(*test)(struct super_block *,void *),

    int(*set)(struct super_block *,void *),

    void*data)

    这个函数的意思其实很简单明了,就是为超级块alloc一块空间出来,并有主流的初始化操作。

    fill_super

    这个各个文件系统有着自己的填充函数,but万变不离其中的是,sb->s_opsb->s_root(dentry),还有一个inode。其中inode中又会有各个系统特有的操作,i_fopi_op,i_mapping。这个文件系统第一个inode,dentry,后续的很多操作都是基于这一步开始的。linux万物皆文件,文件皆目录(dentry),目录指节点(inode),其实很多操作皆出自inode,切记切记。

    将文件系统中的操作大致赋值定型,个人觉得,如果要深入了解某个文件系统的话,这部分过程得用笔记记下来,然后接下来调用操作的时候,能一目了然。这部分真的很重要的。

    simple_set_mnt:

    intsimple_set_mnt(struct vfsmount *mnt, struct super_block *sb)

    {

    mnt->mnt_sb= sb;

    mnt->mnt_root= dget(sb->s_root);

    return0;

    }

    这部分很简单,因为最终需要返回的是mnt,而非sb,所以要将sb挂到mnt上。

  • 相关阅读:
    三道 华为 面试题
    百度面试题01——50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
    一首笔试题 C实现
    图像缩放算法及速度优化——(一)最近邻插值
    一个简单的二叉树排序算法
    OS的四大特征
    OS的目的和功能
    桶排序
    快速排序
    OS的运行机制
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/9212055.html
Copyright © 2011-2022 走看看