linux文件系统初始化过程(1)---概述
术语表:
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系统的初始化。下面会详细介绍每个阶段的主要内容。
最新文章
- X509 证书生成
- HtmlUnit初探
- 【VLC-Android】LibVLC API简介(相当于VLC的MediaPlayer)
- 最长公共子序列(LCS)
- [Express] Level 2: Middleware -- 1
- CodeForces 371D. Vessels
- 关于CSS选择器的效率问题
- Django之验证码 + session 认证
- uva1587 Box
- find指令
- JavaScript------for-in的使用方法
- 201521123113 《Java程序设计》第3周学习总结
- TFboy养成记 tensorboard
- 机器学习实战(笔记)------------KNN算法
- mybatis的0和null
- Linux read line
- JHipster - Generate your Spring Boot + Angular/React applications!
- NOIP2018普及组模拟赛
- [LeetCode] 747. Largest Number At Least Twice of Others_Easy
- MySQL递归查询父节点或递归查询子节点-陈远波
热门文章
- opencv3.2.0形态学滤波之腐蚀
- the detailed annotation of StringBuilder
- settimeout、setinterval区别和相互模拟
- linux 压缩解压命令zip、gz、tar.gz、bz2、tar.bz2、.tar.xz
- java jvm概述及工作过程中的内存管理
- 带你从零学ReactNative开发跨平台App开发[expo 打包发布](八)
- LGWR和DBWn的触发条件
- mysql常用语句备忘
- 如何让触摸事件穿透一个View
- lua调用c++函数返回值作用