操作系统 -- 文件系统实现

102 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

1、文件系统布局

屏幕截图 2022-05-28 211031.jpg

2、文件的实现

  • 连续分配 把每一个文件作为一连串连续数据块储存在磁盘上。

屏幕截图 2022-05-28 194347.jpg

  • 优点: 实现简单,每个文件记住两个数字即可。读操作性能好,单个读操作就可以读出整个文件。
  • 缺点: 随时间推移,磁盘会变得零碎。则可以通过压缩磁盘、从新使用空闲空间来解决,但都不是很好的解决方案。
  • 链表分配 为每一个文件构建磁盘块链表。

屏幕截图 2022-05-28 194500.jpg

  • 优点:充分利用每一个磁盘块,不会产生磁盘碎片,顺序读取很方便。
  • 缺点:随机访问非常缓慢,因为每次访问都要从头开始。
  • 采用内存中的表进行链表分配 取出每个磁盘块的指针放进内存中的表。

屏幕截图 2022-05-28 194636.jpg

  • 优点:解决链表分配的随机访问慢的缺点。
  • 缺点:当文件数量很大时,维护表的内存会很大,所以这并不实用。
  • i 结点 每一文件赋予一个 i 结点,i 结点包括文件属性和文件块地址。

屏幕截图 2022-05-28 195115.jpg

  • 相对于内存表,在内存占用方面具有很大优势,若每个 i 结点有 n 字节,当打开 k 个文件时,只需要 kn 字节。

3、目录的实现

  • 目录系统的主要功能是把文件名映射成定位文件数据所需的信息。
  • 文件属性可以放在目录里或在文件的i节点里面。

屏幕截图 2022-05-28 204421.jpg

  • 文件名储存:①限制最长长度。②固定一个结束符。③文件名放在堆中。通过储存文件名散列值加速查询。

屏幕截图 2022-05-28 205851.jpg