文件系统加载过程.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件系统加载过程

linux文件系统初始化过程(1)---概述术语表:struct task:进程structmnt_namespace:命名空间struct mount:挂载点structvfsmount:挂载项struct file:文件structsuper_block:超级块structdentry:目录structinode:索引节点?一、目的? ? 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系统的初始化。下面会详细介绍每个阶段的主要内容。linux文件系统初始化过程(2)---挂载rootfs文件系统一、目的? ? 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。? ? rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。?二、主要函数调用过程? ? 图1描述了挂载rootfs的函数调用关系(图中红色部分),便于后面的分析。? ? 从图中发现,在挂载rootfs前会先挂载sysfs,这样做的原因是确保sysfs能够完整的记录下设备驱动模型。? ? sysfs_init()完成注册和挂载sysfs文件系统的功能;init_rootfs()负责注册rootfs,init_mount_tree()负责挂载rootfs,并将init_task的命名空间与之联系起来。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???图1?三、linux文件系统初始化? ? vfs_cache_init()首先建立并初始化目录hash表dentry_hashtable和索引节点hash表inode_hashtable;然后设置内核可以打开的最大文件数;最后调用mnt_init()完成sysfs和rootfs文件系统的注册和挂载。? ? linux使用哈希表存储目录和索引节点,以提高目录和索引节点的查找效率;dentry_hashtable是目录哈希表,inode_hashtable是索引节点哈希表。?四、挂载sysfs文件系统? ? sysfs用来记录和展示linux驱动模型,sysfs先于rootfs挂载是为全面展示linux驱动模型做好准备。? ? mnt_init()调用sysfs_init()注册并挂载sysfs文件系统,然后调用kobject

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档