• linux文件系统初始化过程(1)---概述【转】


    转自:https://blog.csdn.net/luomoweilan/article/details/17850377

    术语表:

    struct task:进程

    struct mnt_namespace:命名空间

    struct mount:挂载点

    struct vfsmount:挂载项

    struct file:文件

    struct super_block:超级块

    struct dentry:目录

    struct inode:索引节点

    一、目的

        linux文件系统主要分为三个部分:文件系统调用;虚拟文件系统(VFS);挂载到VFS的实际文件系统。

        其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树。当根目录被创建后,用户就可以使用系统调用在VFS上创建文件、删除文件、挂载各种文件系统等操作。

        该系列文章主要分析linux3.10文件系统初始化过程,分为三个阶段:

        1、挂载根文件系统(rootfs);

        2、加载initrd;

        3、挂载磁盘文件系统;

     

    二、常用数据结构

        linux文件系统中重要的数据结构有:文件、挂载点、超级块、目录项、索引节点等。每个数据结构的具体实现请参见源代码,这里不再描述。

        为了直观的表示数据结构之间的关系,请参见图1:图中含有两个文件系统(红色和绿色表示的部分),并且绿色文件系统挂载在红色文件系统tmp目录下。一般来说,每个文件系统在VFS层都是由挂载点、超级块、目录和索引节点组成;当挂载一个文件系统时,实际也就是创建这四个数据结构的过程,因此这四个数据结构的地位很重要,关系也很紧密。由于VFS要求实际的文件系统必须提供以上数据结构,所以不同的文件系统在VFS层可以互相访问。

        如果进程打开了某个文件,还会创建file(文件)数据结构,这样进程就可以通过file来访问VFS的文件系统了。

        另外,该图只给出了主要的关系结构,忽略了部分细节。

                                   图1

     

    三、函数调用关系

        图2描述了文件系统初始化过程中主要的函数调用关系。linux文件系统初始化过程主要分为三个阶段:

        1、vfs_caches_init()负责挂载rootfs文件系统,并创建了第一个挂载点目录:'/';

        2、rest_init()负责加载initrd文件,扩展VFS树,创建基本的文件系统目录拓扑;

        3、init程序负责挂载磁盘文件系统,并将文件系统的根目录从rootfs切换到磁盘文件系统;

                       图2

     

    四、总结

        linux文件系统初始化过程主要分为三个阶段:挂载rootfs,提供第一个挂载点''/;加载initrd,扩展VFS树;执行init程序,完成linux系统的初始化。下面会详细介绍每个阶段的主要内容。

     

    版权声明:

        原创作品,如非商业性转载,请注明出处;如商业性转载出版,请与作者联系。

    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    hdu 1142 用优先队列实现Dijkstra
    POJ 2063 Investment 完全背包
    POJ 3260 多重背包+完全背包
    bignum 大数模板
    POJ 3468(树状数组的威力)
    POJ 3468 线段树裸题
    hdu 1058 Humble Numbers
    CodeForces 185A 快速幂
    POJ 1990 MooFest 树状数组
    设计模式(20)策略模式
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13742184.html
Copyright © 2020-2023  润新知