虚拟文件系统(VFS)
为用户空间程序提供了文件和文件系统相关的接口。内核在它的底层文件系统接口上建立了一个抽象层。vfs定义了所有文件系统都支持的基本的接口和数据结构。
VFS对象
超级块对象,索引节点对象,目录项对象,文件对象以及它们的操作对象。
超级块对象:用于存储特定文件系统的信息。 magic,dirty,s_op
索引节点对象:包含了内核在操作文件和目录时需要的全部信息。仅在文件被访问时,才在内存中创建。 dirty
目录项对象:每个目录项代表路径中的一个特定部分。 /bin/vi inode,
文件对象:表示进程已打开的文件
linux文件系统
为用户空间程序提供了文件和文件系统相关的接口。内核在它的底层文件系统接口上建立了一个抽象层。vfs定义了所有文件系统都支持的基本的接口和数据结构。
VFS对象
超级块对象,索引节点对象,目录项对象,文件对象以及它们的操作对象。
超级块对象:用于存储特定文件系统的信息。 magic,dirty,s_op
索引节点对象:包含了内核在操作文件和目录时需要的全部信息。仅在文件被访问时,才在内存中创建。 dirty
目录项对象:每个目录项代表路径中的一个特定部分。 /bin/vi inode,
文件对象:表示进程已打开的文件
linux文件系统
引导块,超级块,空闲空间管理(块位图,inode位图),索引节点表(i-node table),数据块(data block)
文件类型
“-”正规文件(文本文件和二进制文件)
“d”目录
“s”, ”l”符号链接
“p”管道
“c”字符设备文件
“b”块设备文件
高速缓存区
位于内核代码块和主内存区之间。
高速缓存区在块设备和内核其他程序之间起一个桥梁的作用。
高速缓存头结构(双向循环链表,空闲链表),缓存块
高速缓存头结构:b_prev, b_next, b_prev_free, b_next_free
free_list 头指针,指向空闲块链表中第一个最为空闲缓存块
为了能快速有效的在缓存区中寻找判断出请求的数据块是否已经读入到缓存区中,buffer.c使用了一个具有307个buffer_head指针项(散列项)的hash数组表结构。
更新和同步
任何同步操作都被分成俩个阶段,
(1)数据结构信息和高速缓存区的缓存块同步问题,由驱动程序独立负责。
(2)高速缓存区中数据块和磁盘对应块的同步问题,由缓存管理程序负责。