深入理解linux内核读书笔记(第十二章)
2015-07-31 16:58
183 查看
1. VFS是linux的一个专门来处理和文件系统相关的系统调用的软件层。
2. VFS支持的文件系统可分为三类:
(1) 基于磁盘的文件系统,ext2, ext3, vfat, ntfs, ISO9660, UDF, HFS等。
(2) 网络文件系统, nfs, cifs等
(3)特殊文件系统, proc等
3. VFS的思想是引入一种的通用的文件模型,它可以表示所有支持的文件系统。
4. 内核在打开文件后,会初始化对应文件系统的读写等指针。采用了面向对象的思想,用数据结构和函数指针来实现对象。
5. 通用的文件模型由以下几部分构成:
(1)超级快对象, 保存挂载的文件系统的相关信息。
(2)inode 对象,保存关于一个文件的信息。
(3)file 对象,保存进程和打开的文件之间的关联信息,只有打开文件后才存在于内核中。
(4)dentry对象,保存一个文件目录的信息。
6. 内核为了加速,有dentry cache和 inode cache。
7. 有些系统调用可以由VFS直接完成,而不需要调用下层的具体函数,比如close和lseek等。
8. super_block结构体中,s_list指向相邻超级快节点的,s_fs_info指向具体的超级快信息。这些信息是从磁盘中读取到内存,可以加速访问和修改。s_dirt用来表示是否需要去同步超级快到磁盘。
9. s_op(super_operations)保存了超级快操作的函数指针,包括alloc_inode,destroy_inode, read_inode, write_inode, delete_inode, put_inode, put_super, write_super, sync_fs, remount_fs 等操作。
10. inode 结构体中,i_state用来表示inode的状态,可能是需要与磁盘的inode进行同步的。
11. 每个inode都可能被链入三种类型的链表:
(1)未使用的inode, i_count 为0。
(2)使用中的inode, i_count 大于0。
(3)脏了的inode,链表指针保存在super_block中的s_dirty中(i_list)。
12. 每个inode 同时又被链入每个文件系统相关的双向链表中,保存在super_block中的s_inodes中(i_sb_list)。
13. 每个inode还被链入一个叫做inode_hashtable的哈希表中,当内核知道inode 号和超级块地址时,用来快速找到inode对象。对于冲突的inode,用链表进行解决,保存在i_hash中。
14. inode_operations,即i_op,保存了操作文件的方法,有create, lookup, link, unlink, mkdir, rmdir, rename, getattr, truncate, mknod等。
15. 一个文件系统中打开的文件对象保存在super_bolck中的s_files链表中。(f_list)
16. 当VFS打开文件时,默认将inode中的i_fop(file_operations)赋值给file对象的f_op,稍后,VFS可以重新给f_op赋值。
17. file_operations结构体包含read, write, llseek, ioctl, mmap, open, flush, release, fsync, lock等操作文件等方法。
18. 在查询一个文件名时, 内核为文件名路径中的没一部分都创建一个denty对象。
19. 每个dentry对象有四种可能的状态:
(1)free, VFS没有使用。
(2)unsed, d_count 为0, 但是d_inode仍然指向对应的inode,dentry是有效的,但是可能被回收。
(3)In use, d_count 大于0, d_inode指向对应的inode,这个dentry是不可以回收的。
(4)negative, d_inode 指向NULL, 表示inode被删除了或者是非法的文件名,dentry会留在缓存中,方便以后查询。
20. dentry_operations包含了d_revalidate, d_hash, d_compare, d_delete, d_release, d_iput函数。
21. dentry cache 包括两种数据结构:
(1)in use, unused 和 negative的dentry集合。
(2)一个哈希表,用来从一个目录中快速找到一个文件对应的dentry对象。
22. unuse dentry链表是以LRU 算法来组织的,最近释放的dentry被插入链表头部, 所以当denty cache 回收时, 位于末尾的将被释放。
23. 每个进程都有当前目录和root目录,这些信息保存在fs_struct结构体中。进程打开的所有文件信息,保存在files_struct 结构体中。
24. files_struct中,进程打开的文件对象指针保存在fd指针数组中,fd默认初始化为fd_array,大小为32, 当打开的文件大于32时,内核重新分配数组,更新fd。
25. file_system_type结构体用来表示一个文件系统类型信息,所有的文件系统用单链表链起来。get_sb 用来创建一个超级块并且初始化。最后通过调用register_filesystem来进行注册。
26. 挂载上的文件系统的有关信息用vfsmount 结构体来表示。
27. path_lookup函数用来通过文件名找到一个文件的inode,最终填充nameidata结构体,增加其中dentry和vfsmount的引用计数,最后用户需要调用path_release来释放。
2. VFS支持的文件系统可分为三类:
(1) 基于磁盘的文件系统,ext2, ext3, vfat, ntfs, ISO9660, UDF, HFS等。
(2) 网络文件系统, nfs, cifs等
(3)特殊文件系统, proc等
3. VFS的思想是引入一种的通用的文件模型,它可以表示所有支持的文件系统。
4. 内核在打开文件后,会初始化对应文件系统的读写等指针。采用了面向对象的思想,用数据结构和函数指针来实现对象。
5. 通用的文件模型由以下几部分构成:
(1)超级快对象, 保存挂载的文件系统的相关信息。
(2)inode 对象,保存关于一个文件的信息。
(3)file 对象,保存进程和打开的文件之间的关联信息,只有打开文件后才存在于内核中。
(4)dentry对象,保存一个文件目录的信息。
6. 内核为了加速,有dentry cache和 inode cache。
7. 有些系统调用可以由VFS直接完成,而不需要调用下层的具体函数,比如close和lseek等。
8. super_block结构体中,s_list指向相邻超级快节点的,s_fs_info指向具体的超级快信息。这些信息是从磁盘中读取到内存,可以加速访问和修改。s_dirt用来表示是否需要去同步超级快到磁盘。
9. s_op(super_operations)保存了超级快操作的函数指针,包括alloc_inode,destroy_inode, read_inode, write_inode, delete_inode, put_inode, put_super, write_super, sync_fs, remount_fs 等操作。
10. inode 结构体中,i_state用来表示inode的状态,可能是需要与磁盘的inode进行同步的。
11. 每个inode都可能被链入三种类型的链表:
(1)未使用的inode, i_count 为0。
(2)使用中的inode, i_count 大于0。
(3)脏了的inode,链表指针保存在super_block中的s_dirty中(i_list)。
12. 每个inode 同时又被链入每个文件系统相关的双向链表中,保存在super_block中的s_inodes中(i_sb_list)。
13. 每个inode还被链入一个叫做inode_hashtable的哈希表中,当内核知道inode 号和超级块地址时,用来快速找到inode对象。对于冲突的inode,用链表进行解决,保存在i_hash中。
14. inode_operations,即i_op,保存了操作文件的方法,有create, lookup, link, unlink, mkdir, rmdir, rename, getattr, truncate, mknod等。
15. 一个文件系统中打开的文件对象保存在super_bolck中的s_files链表中。(f_list)
16. 当VFS打开文件时,默认将inode中的i_fop(file_operations)赋值给file对象的f_op,稍后,VFS可以重新给f_op赋值。
17. file_operations结构体包含read, write, llseek, ioctl, mmap, open, flush, release, fsync, lock等操作文件等方法。
18. 在查询一个文件名时, 内核为文件名路径中的没一部分都创建一个denty对象。
19. 每个dentry对象有四种可能的状态:
(1)free, VFS没有使用。
(2)unsed, d_count 为0, 但是d_inode仍然指向对应的inode,dentry是有效的,但是可能被回收。
(3)In use, d_count 大于0, d_inode指向对应的inode,这个dentry是不可以回收的。
(4)negative, d_inode 指向NULL, 表示inode被删除了或者是非法的文件名,dentry会留在缓存中,方便以后查询。
20. dentry_operations包含了d_revalidate, d_hash, d_compare, d_delete, d_release, d_iput函数。
21. dentry cache 包括两种数据结构:
(1)in use, unused 和 negative的dentry集合。
(2)一个哈希表,用来从一个目录中快速找到一个文件对应的dentry对象。
22. unuse dentry链表是以LRU 算法来组织的,最近释放的dentry被插入链表头部, 所以当denty cache 回收时, 位于末尾的将被释放。
23. 每个进程都有当前目录和root目录,这些信息保存在fs_struct结构体中。进程打开的所有文件信息,保存在files_struct 结构体中。
24. files_struct中,进程打开的文件对象指针保存在fd指针数组中,fd默认初始化为fd_array,大小为32, 当打开的文件大于32时,内核重新分配数组,更新fd。
25. file_system_type结构体用来表示一个文件系统类型信息,所有的文件系统用单链表链起来。get_sb 用来创建一个超级块并且初始化。最后通过调用register_filesystem来进行注册。
26. 挂载上的文件系统的有关信息用vfsmount 结构体来表示。
27. path_lookup函数用来通过文件名找到一个文件的inode,最终填充nameidata结构体,增加其中dentry和vfsmount的引用计数,最后用户需要调用path_release来释放。
相关文章推荐
- Linux+Sublime 开发C/C++ 中无法读取cin/scanf 的解决办法
- 修改Centos的系统时间为北京时间
- 关于linux服务配置的问题 starting MySQL.Manager of pid-file quit without updating fi[failed]
- Linux下软件安装方法汇总
- linux c/c++ GDB教程详解
- [转] 深入剖析 linux GCC 4.4 的 STL string
- Centos添加新硬盘、分区、格式化、自动挂载
- 强烈推荐Linux深入学习必读的几本书
- 推荐几本学习嵌入式linux的书籍
- Linux初学笔记
- upgrade-php-5-1-to-php-5-3-using-yum-on-centos
- Linux vi命令大全
- 进程03
- 有种生活态度叫 Linux
- Linux常用命令大全
- linux操作系统svn开机自启
- linux下free -m命令详解
- linux下varnish4配置语法(基础)
- Linux中java应用程序的部署,使其开机自动启动
- Linux查看文件编码格式及文件编码转换