鸿蒙内核源码分析(文件系统篇) | 用图书管理说文件系统

本篇讲一个大型图书馆的管理方案,来说清楚计算机文件系统是如何管理的.如果读懂了这个方案,就基本了解了文件系统最底层的运行机制.

如何建图书馆

假如给你一个100*100米,高10米的场地用于建图书馆,放置全世界的图书档案,有以下几个运营要求:

  • 图书有大有小,差异巨大,比如一本大英百科全书,估计有几百万页,同时也有只有薄薄一页的一封电报.
  • 图书不是一次性给齐,后续不断有新增的,修改的,删除的,比如第一次给的24史不全只有12本,后面陆陆续续补上了.
  • 书的规模是千万级的.必须要在最短的时间内找到书,新书也要在最短的时间内找到地方搁置.
  • 每一次对书的操作都要记录下来,比如何时入库,何时修改,何时被借阅了.
  • 权限验证,不同的人对书有不同的权限,比如有的人可以在书上涂鸦,但有的人只能看.
  • 图书馆必须安全,不能因为局部失火导致整个图书馆不能正常运营.
  • 可以存放目录信息,每个人都可以建自己的书籍目录,要求这些目录信息也能被保存.
  • 让借书,还书,拿目录信息变简单,每个人只凭条形码操作.

请问如果是你会如何设计这个图书馆?并让它即安全又高效的运行.

小易的解决方案

有个叫小易的小伙子提出了一种解决方案:

  • 全仓库建大小相同的格子,这种格子统一叫单元格.甭管是什么内容最后都是放到格子里,若每个格子按 0.250.250.25 米算, 整个场地可建设成 640万个单元格.单元格有唯一且统一的编号.从0一直编到640万-1.

  • 因为单元格太多,管理非常复杂,所以将场地分成大A区,大B区,大C区,…N区,比如分成8大区,每个区分配80万个单元格. 大A区编号[0 - 799999],…依次类推.

  • 每个大区又划分成统计区,目录区,图书区.

    • 统计区是描述整个图书馆和各分区的信息数据,占用1000个单元格
    • 目录区是为管理图书区而产生的信息,占19000个单元格,分成三块:
      • 索引表块(占18900个单元格):小易规定后续将用一页纸来记录书的索引信息,并把这页纸叫索引页,将索引页装订成一本索引表书,这本书有连续的统一的页编号(也叫条形码). 像大英百科全书这样有几百万页的一本书,不管后续在图书区里占用多少单元格,但其在索引表书中就是一张纸,这张纸有固定格式,记录书的名称,权限,修改时间等等信息.
      • 索引页位图块(占10个单元格):记录索引页的使用情况,0|1代表未使用|已使用.
      • 图书区单元格位图块(:占90个单元格):记录图书区单元格的使用情况,0|1代表未使用|已使用.
  • 图书区里放的是真正要管理的书籍,按单元格的容量来放,大点的书会分成多个单元格来存放.共占78万个单元格.

将以上信息简化成树形图表示如下:

└─图书馆  => 共 640万个单元格,平均被分成八大战区
    ├─大A区 => 80万单元格
    │  ├─图书区 => 78万个单元格
    │  ├─目录区 => 19000个单元格
    │  │  ├─图书区单元格位图块 => 90个单元格
    │  │  ├─索引表块 => 18900 个单元格
    │  │  │  ├─A文件索引页 => 信息登记表,占一页纸,描述一本书的名称,权限,时间 ==
    │  │  │  ├─...    
    │  │  │  └─B目录索引页
    │  │  └─索引页位图块 => 10个单元格
    │  └─统计区 (1000) => 记录图书馆和各分区的全局信息,使用频率高
    └─大B区
        ├─图书区
        ├─目录区
        │  ├─图书区单元格位图块
        │  ├─索引表块
        │  │  ├─A文件索引页
        │  │  ├─...           
        │  │  └─B目录索引页
        │  └─索引页位图块
        └─统计区
    ...    

请务必理解这些概念关系,在脑海中形成脑图,这是后续理解整个文件系统如何运作和管理的最关键底层逻辑.以下一一展开说明这些概念.

单元格

因为需求是图书大小没有限制,差别极大,有的书大到上千万页,有的小到只有一页.是个开放问题,需要在空间和时间上进行取舍,不想浪费时间就得浪费空间.没有边界就不方便做特殊处理,这需要标准化的统一管理.如何标准化? 答案是: 建相同的格子

至于是大格子还是小格子可以灵活,但必须是一样尺寸的.小易建了 0.250.250.25米的标准格,可放1000页(1K页)书的,所有图书都是统一按页数放,放满1000页就换个格子放剩下的. 格子是图书的关系是(N:1)的关系,即一本书可以分多个格子放,但一个格子中不能放两本不一样的书

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值