博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux文件系统初始化过程(1)---概述
阅读量:5054 次
发布时间:2019-06-12

本文共 1110 字,大约阅读时间需要 3 分钟。

术语表:

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文件系统初始化过程主要分为三个阶段:

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

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

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

                   图2

 

四、总结

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

 

转载于:https://www.cnblogs.com/wuchanming/p/3769706.html

你可能感兴趣的文章
能走多远,取决于你与谁同行
查看>>
Visual Studio 11增强支持的标准 C++11 介绍
查看>>
C++ 运算符优先级
查看>>
codechef Chef and Problems
查看>>
6-3-二叉树(三叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...
查看>>
display:inline-block的div 与 display:block的div之间有间隔问题(div与div之间有间隔的可能性)...
查看>>
supervisor简明教程
查看>>
【以前的空间】bzoj1009 [HNOI2008]GT考试
查看>>
安装vs2017后,RDLC 报表定义具有无法升级的无效目标命名空间
查看>>
pycharm 2016.2注册码
查看>>
SqlServer常用命令
查看>>
匿名函数中undefined形参疑问(转载)
查看>>
如何让EditText不能自动获取焦点(转)
查看>>
一个小小的百度贴吧爬虫(Python)
查看>>
Solaris - 修改IP和主机名
查看>>
html5中的选择器
查看>>
WinStore控件之TextBox
查看>>
oracle dmp文件的导入导出
查看>>
#assign# 宽动态成像
查看>>
iOS背景图片大小不一致问题
查看>>