• pedro
    置顶
    2021-07-28
    请说一说 super_block,dentry,inode 这三个数据结构 ,一定要在储存设备上对应存在吗? 不需要严格对应,之所以要对应是为了使用、维护更加方便,抽象是软件设计最大的魅力。

    作者回复: 铁子 正确

    
    6
  • neohope
    2021-08-08
    一、数据结构 1、四大基本结构 A、超级块管理为super_block,用于描述存储设备上的文件系统,可以从super_block出发把存储设备上的内容读取出来 B、目录结构管理为dentry,通过其来组织整个目录结构 C、文件索引节点管理为inode,可以先把它看作是存储设备上的具体对象,一个inode可以对应多个dentry【比如link】 D、文件管理为file,描述进程中的某个文件对象 2、Linux在挂载文件系统时,会读取文件系统超级块super_block,然后从超级块出发读取并构造全部dentry目录结构;dentry目录结构指向存储设备文件时,是一个个的inode结构。 3、应用程序在打开文件时,在进程结构task_struct->fs_struct中,记录进程相关的文件系统信息,这样就可以对文件系统,进行新增、删除、打开、关闭等相关操作。 4、同时,在进程结构task_struct->files_struct->fdtable->file,保存全部打开的文件指针,文件指针file结构中,会保存inode指针,从而可以获取文件权限、文件访问记录、文件数据块号的信息,进一步可以从文件读取文件信息。 二、trfs demo 1、除上面的结构外,内部使用了两个结构:文件描述fileinfo,目录描述dir_entry A、fileinfo记录在了inode的私有数据中,这样通过inode就可以方便的找到fileinfo B、如果是文件,fileinfo.data中记录的就是文件内容 C、如果是文件夹,fileinfo.data记录的就是一个个dir_entry 2、trfs基于非连续内存 A、由MAX_FILES+1个fileinfo组成,记录在全局变量finfo_arr中,但第0和第MAX_FILES个好像没有使用 B、每个fileinfo中包含一个文件块,大小为MAX_BLOCKSIZE C、并没有使用单独的位图,而是通过每个fileinfo来记录其使用情况的 3、初始化 A、初始化了finfo_arr结构 trfs_init->init_fileinfo B、超级块创建,占用了finfo_arr[1] trfs_mount->mount_nodev->trfs_fill_super 4、使用 A、每次新建文件或文件夹,就占用一个空闲的fileinfo B、删除文件或文件夹,就将一个fileinfo设置为可用 C、读写文件就是通过file找到fileinfo.data D、查找和枚举就是通过file找到fileinfo.data,然后访问其中的每个dir_entry
    展开

    作者回复: 正确 的

    
    3
  • Fan
    2021-07-29
    请说一说 super_block,dentry,inode 这三个数据结构 ,一定要在储存设备上对应存在吗? 要的。

    作者回复: 不需要 只是需要对应的文件系统代码在内存中构造出相应的结构就行了

    共 2 条评论
    1
  • 蓝色梦幻
    2022-05-14
    请教一下:"有了上述代码,挂载 trfs 到 /mnt 下,我们就可以用 touch 建立一个文件,然后用 cat 读取这个文件了。" 这里具体要怎么操作呀?我可以用findmnt 查看到trfs系统的挂载,后续要怎么操作呢? TARGET SOURCE FSTYPE OPTIONS ├─/mnt none trfs rw,relatime

    作者回复: 直接 用touch cat 啊

    
    
  • 艾恩凝
    2022-05-13
    打卡

    编辑回复: 加油咯

    
    
  • Geek_cb2b43
    2021-11-13
    请问在一个新建的空文件,从100兆的位置写200兆数据,操作的流程是什么,文件的大小是300兆吗?

    作者回复: 不一定的

    
    
  • 不及胜于过之
    2021-08-08
    文件系统就是 super_block/和super_operations,dentry和dentry_operations,inode和inode_operations,file 和 file_operations,真的是醍醐灌顶,大佬可以按这个表述风格,详细说下mount 嘛, 一直理解的不是很深刻,尤其是容器用到的union mount

    作者回复: 好的 敬请期待

    
    