Linux虚拟文件系统二
来源:互联网 发布:vb中过程的主要作用 编辑:程序博客网 时间:2024/05/18 01:48
这一周的前二天主要分析了师姐编的三个小程序,还有就是学习了Linux2.4.30内核文件系统学习这篇文章。
VFS从根本上来说就是提供一套代码框架,根据共有的属性抽象出最关键的数据结构,面向具体的文件系统定义一系列统一的操作接口,对文件和目录抽象出的inode结构提供统一的操作接口,能对具体的文件系统进行注册和安装等。
打开文件的过程就是寻找目录节点对应的inode的过程,当根据路径找到相应的目录节点时inode中的i_fop成员就已经与文件所在的文件系统的统一接口,也就是file_operations相关联了。
从文件系统抽象出的四个数据结构中,最核心的要数目录节点入口dentry结构体了,通过路径很容易能找到要打开文件的dentry,相应的只需要将dentry与inode关联起来就可以了,同时我们应该对这两个结构的对应关系要清楚,一个文件对应唯一的inode,由于链接文件的存在,一个文件可能对应多个dentry,一个dentry只能对应一个inode,而一个inode可能对应多个dentry,dentry中用alias成员将一个文件的所有别名链接起来。
超级块结构体除了描述文件系统的大小,以及读写状态等,最关键的还要数它提供的操作接口,这里面主要包括inode和dentry的相关操作,例如分配、撤销、读、写、删除inode等等。
内核中已经安装了的文件系统都会有一个vfsmount结构体与之相对应,安装一个文件系统的步骤大致如下:创建一个vfsmount结构体,为被安装的设备创建一个超级块结构体,并进行相关设置,创建被安装设备的根目录节点dentry,为被安装设备的根目录节点为创建inode,并由超级块操作接口函数来进行inode的相关设置,将超级块与被安装设备的根目录节点dentry关联起来,最后将vfsmount与被安装设备的根目录节点dentry关联起来。安装了文件系统后还需要注册才能使内核认识这个文件系统。已注册的文件系统的信息都在file_system_type结构体中记录着,并通过list_head链表链接起来,每当有一个新的待注册的文件系统要注册时就会创建一个file_system_type,并与之前创建的超级块关联起来,以及完成其它诸如名称,标志等相关设置并链接到list_head上。
与file相关的结构体有好几个,file被称为系统打开表,记录了系统中所有打开的文件,当打开一个文件时就会在内核中创建一个file与之关联起来,files_struct被称为用户打开文件表,记录了每个进程打开的所有文件,当用open调用时返回的文件描述符就在这个结构中进行记录,文件描述符fd实际上是一个整数下标,内核实现的方法是采用数组*fd_array[]来存储每个进程打开的文件,系统最初分配的数组大小是32,当超过32时系统便会分配更大的数组来存储文件描述符,还有另一个重要的结构体是fs_struct,它是记录进程与文件系统相关联的结构体。
- linux文件系统(二) - 虚拟文件系统
- Linux虚拟文件系统二
- Linux虚拟文件系统(内核初始化<二>)
- Linux虚拟文件系统(内核初始化<二>)
- 虚拟文件系统之二
- Linux启动 grub 虚拟文件系统initrd详解(二)
- Linux 虚拟文件系统概观
- Linux 虚拟文件系统概观
- linux虚拟文件系统浅析
- Linux虚拟文件系统
- Linux 的虚拟文件系统
- LINUX虚拟文件系统
- linux虚拟文件系统浅析
- Linux虚拟文件系统(VFS)
- linux虚拟文件系统浅析
- linux虚拟文件系统浅析
- Linux虚拟文件系统--open()
- linux虚拟文件系统浅析
- struts2.2.1 严重: Dispatcher initialization failed java.lang.RuntimeException
- oracle 块大小
- 生活啊 啊啊
- VC远程连接MYSQL失败原因收集:mysql_real_connect()
- 设计模式分类
- Linux虚拟文件系统二
- HashMap和Hashtable及HashSet的区别
- python decorators
- 跨应用程序共享session Sharing Session Across Applications
- Linux系统调用
- android的listactivity实例
- Hashtable 哈希表
- 敏捷开发宣言--《敏捷开发的艺术》读书笔记0
- Java数据类型.