本篇讲一个大型图书馆的管理方案,来说清楚计算机文件系统是如何管理的.如果读懂了这个方案,就基本了解了文件系统最底层的运行机制.
如何建图书馆
假如给你一个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)的关系,即一本书可以分多个格子放,但一个格子中不能放两本不一样的书

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



