面试题答案
一键面试空间管理和分配策略对文件系统性能的影响
- 连续分配
- 优点:文件读取性能高,因为数据在磁盘上是连续存储的,磁头移动距离短,顺序访问速度快。例如,对于视频文件这种需要连续大量读取的文件,连续分配能极大提升播放流畅度。
- 缺点:文件扩展困难,若文件大小增长,可能需要重新分配整个文件空间,导致性能下降;并且容易产生外部碎片,浪费磁盘空间。比如一个初始大小为10MB的文件,分配了连续10MB空间,后续若要扩展到15MB,可能找不到连续15MB空间,需要重新整理磁盘。
- 链式分配
- 优点:文件扩展方便,只需在链表末尾添加新的块即可。能有效利用磁盘上的零散空间,减少外部碎片。
- 缺点:随机访问性能差,要访问文件中的某一块,需要从链表头开始遍历。例如,若要访问一个大文件中间某块数据,需要依次读取前面所有块的指针,这会带来大量的寻道时间开销。
- 索引分配
- 优点:支持高效的随机访问,通过索引表可以直接定位到文件的任意块。文件扩展相对容易,只需在索引表中添加新的块指针。对于需要频繁随机访问的数据库文件非常适用。
- 缺点:索引表本身需要占用额外的磁盘空间,并且对于小文件,索引表带来的开销相对较大。比如一个1KB的小文件,可能索引表也有几百字节的开销。
常见的优化方式
- 预分配
- 原理:在文件创建或扩展时,提前为文件分配一定数量的连续块。这样在文件写入过程中,减少了频繁分配小块空间的开销,同时保证后续写入的数据能尽量连续存储。
- 举例:数据库系统在创建新表时,通常会预分配一定数量的页空间,避免在数据插入过程中频繁申请小块空间,提高数据插入性能。
- 成组链接法
- 原理:将空闲块分组,每组的第一个块记录下一组的块号等信息。这种方式既能高效管理大量空闲块,又便于快速分配和回收。
- 举例:UNIX文件系统采用成组链接法管理空闲块,在文件删除时,将释放的块快速加入空闲块组,在文件创建时,从空闲块组中快速分配所需块。
- 位示图
- 原理:用一个二进制位来表示磁盘上的一个块是否空闲,0表示空闲,1表示已占用。通过对这些二进制位的操作,可以快速判断和分配空闲块。
- 举例:在一个有1000个块的磁盘分区中,用1000位的位示图来管理,查找空闲块时,遍历位示图找到为0的位,即可分配相应块。