filesystem
简介
user sapce read()/write() syscall
----------------------------
kernel space vfs
ext4/xfs/bcachefs
BIO
IO scheduler
block driver
----------------------------
hardware disk我们平时所说的 superblock 对象,inode 对象,dentry 对象,file 对象 分别代表 struct super_block、struct inode、struct dentry、struct file 结构体。
每打开一个文件,创建一个 file 对象。
每创建一个目录,创建一个 dentry 对象。
每创建一个新文件,创建一个 inode 对象。
每格式化一个新文件系统,创建一个 superblock 对象。
实现一个文件系统,实际上就是实现 super_operations, inode_operations, dentry_operations 结构体(file_operations 等于 inode_operations), 这样 vfs 才能正常地使用文件系统进行工作。
open() 系统调用返回的 FD
用户空间使用 fd = open(filename) 打开一个文件后,返回一个整型 fd。 这个整型 fd 就是 task.files.fdtable.fd[] 数组的下标。
每一次调用 open() 都会分配一个新 struct file,保存在 task.files.fdtable.fd[]
如何初始化 file->inode 成员
file->inode 成员open(filename) 通过 filename 找到 dentry 对象,dentry对象能够找到 inode 对象, 最后将 inode 对象赋值给 file->inode 成员
如何初始化 fd 结构体
在使用 write(fd) 系统调用时,传递整型 fd 下来,初始化 fd.file = task.files.fdtable.fd[fd]
Last updated
Was this helpful?