• neohope
    置顶
    2021-08-07
    一、数据结构 1、rfs文件系统大小为4M,直接存放于内存中,这样就可以忽略硬件读取的细节,专注于文件系统的实现。 2、文件系统的最前面4K,是 rfssublk_t超级块结构,用于描述整个文件系统的类型、版本、状态、超级块大小、位图块位置、根目录等。而且4K并没有全部被使用。 3、4M空间被划分为1024个4K的逻辑块,用位图表示逻辑块的占用情况,1表示可用,0表示不可用; 为了计算方便,奢侈了一把,用一个字节作为一位,实际占用了1K空间,连一个逻辑块4K都没能用完。 位图逻辑块地址记录在了超级块中,位图实际上被放到了第2个逻辑块中。 4、有文件系统,就要有目录,使用 rfsdir_t结构描述目录结构,长度位128字节。而根目录所在逻辑块直接记录在了超级块中。 rfsdir_t结构,可以指向目录也可以指向文件,通过rdr_type表示了所指向逻辑块中存放的数据类型。 如果所指向类型为目录,则指向的逻辑块,前512字节为文件管理头,后续都是rfsdir_t结构 如果所指向类型为文件,则指向的逻辑块,前512字节为文件管理头,后续都是文件内容 5、文件,使用 fimgrhd_t结构表示,包括了文件名,文件类型,文件大小,访问记录等。 fimgrhd_t存放于文件的第一个逻辑储存块的首个 512 字节。 文件较小时,通过 filblks_t数组,按文件顺序,记录多个连续的逻辑块。 如果连续存储块超出FBLKS_MAX个,会再申请一个 fmd_linknblk结构,并用当前 fmd_linknblk指向新的逻辑块,并将新逻辑块的fmd_linkpblk指向当前存储块,然后,在新的逻辑存储块中继续记录文件信息。
    展开

    作者回复: 铁汁 66666

    
    11
  • pedro
    2021-07-21
    不同设备的物理块都不同,难以兼容,还不如自己搞一个逻辑块抽象一层,降低程序复杂度

    作者回复: 对的 铁汁

    
    13
  • 吴建平
    2022-01-06
    文件管理管理头其实对应这linux的inode;这里比较特殊的是文件管理头和文件内容存储在一起,放在逻辑块的开始位置,而不是linux的inode集中存储。

    作者回复: 是的

    
    1
  • 残天噬魂
    2021-12-16
    文件系统属于存储设备,而不同的存储设备块的大小不同,单独去适配每一种存储设备会使得文件系统非常复杂,而且不易于扩展,所以抽象一个逻辑存储块出来进行统一管理

    作者回复: 是的

    
    1
  • 艾恩凝
    2022-05-11
    打卡,要仔细琢磨琢磨了

    作者回复: 好的

    
    
  • 搬铁少年ai
    2021-10-09
    比如一个文件占用:4~8、10~15、30~40 的逻辑储存块,那么就在 fmd_fleblk[0]中保存 4 和 4,在 fmd_fleblk[1]中保存 10 和 5,在 fmd_fleblk[2]中保存 30 和 10 这句是什么意思没看懂

    作者回复: 认真看课程

    共 2 条评论
    
  • Ronny
    2021-09-29
    抽象

    作者回复: 嘿嘿

    
    
  • Fan
    2021-08-05
    请问,我们文件系统的储存单位为什么要自定义一个逻辑储存块? 方便扩展,因为存储设备太多,有各种格式。

    作者回复: 正确的 铁汁

    
    
  • 青玉白露
    2021-08-01
    主要是为了兼容同的存储设备,将存储单位自定义为逻辑存储块,而实际存储单位则根据存储设备自行决定。

    作者回复: 对的 铁汁

    
    
  • 相逢是缘
    2021-07-21
    rfsdir_t结构和fimgrhd_t 的关系没有搞清楚,看里面的字段,这两个都能表示文件或是目录吗?

    作者回复: fimgrhd_t是管理文件数据的 rfsdir_t是目录项 ,但是目录也是文件 在目录文件中就是保存的目录项,即一个个rfsdir_t

    
    