文件系统设计考虑

一个磁盘可以有数个分区,典型的UNIX系统中每个磁盘分区会有几个文件系统。顺序介绍几个概念,会对以后的问题更为清晰。

MBR

主引导记录(Master Boot Record),整个磁盘的0号扇区。它的最基本作用就是引导载入计算机的操作系统。过程如下:
1.计算机启动BIOS
2.BIOS读入执行MBR
3.MBR的结尾有分区表。
就是C,D分区在磁盘的物理起始位置和结束地址。另外,其中大多数情况下,C盘会被标记为活动分区(操作系统所在的地方)。
4.读入活动分区的第一个块,这个块叫做引导块
5.引导块记录着怎么装载操作系统,之后是一些和文件系统相关的系统。

PS:关于磁盘分区中的结构有待进一步研究。

文件和目录

这个问题根本不用阐述,但系统考虑问题,就是需要把基本问题罗列。
况且只知道文件和目录层级关系远远是不够的,深入文件系统的实现:

文件系统通过目录管理文件,每个文件都有属性和记录其物理磁盘块地址的信息。如果对于windows,那应该先说文件,对于UNIX那应该先说目录。
关于windows的实现请参考:
作者Andrew S. Tanenbaum的《modern operating system》

Unix把文件抽象成一个称为 i <script type="math/tex" id="MathJax-Element-1">i</script> 节点的数据结构。i节点的结构如下:
i 节点结构

结构描述
文件属性列表包括所有者,创建日期等内容
磁盘块地址列表记录文件的实际物理地址
(可选)指针块通常i节点是固定长度的,大文件需要指向另一个额外列表

这样UNIX的目录就变成了这样:

元素名i节点指针
one.png文件one的i节点
second.doc文件second的i节点

这个实现简单而且节省开销,为什么呢?紧接着看下面

文件系统内存中目录对文件磁盘块的管理

上下文:由于文件包含数个磁盘块在磁盘上的不连续分配,我们需要一个指针对应文件的一个磁盘块。
Windows
因为windows对目录项的处理每个文件构造一个链表,文件从起始位置开始可以获得整个文件。而所有文件的链表保存在一个表中,这个表叫
FAT-文件分配表(File Allocation Table)

假设文件sample的磁盘块组成如下:
4->7->2->10->12

FAT结构如下:
第一项序号表示物理块的地址,而第二项表示下一个物理块的地址。
如果下一个物理块地址没有,代表文件结尾,第二项填-1。空闲块不填任何数。

物理块序号下一个物理块
0
1
210
3
47(文件开始)
6
72
8
9
1012
11
12
13
14-1(文件结尾)
15

这个开销和磁盘上的文件数是成正比的。如果文件占的总磁盘数为n,那么目录项数也是n。

UNIX
这个就非常简单了,在内存中载入i节点。这就增大了灵活性,如果在目录下你打开文件,目录项会存在一个硬连接指向 i 节点,然后动态载入内存。开销是你打开的所有文件的所占的磁盘块数总数。明显,UNIX取出所有文件的子集。

看来动态分配和抽象封装的思想是多么伟大啊!动态分配降低成本,而抽象封装为动态分配提供了基础,即管理的方便。

文件系统优化时的权衡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值