发信人: ddxyj()
整理人: ipaq(2001-05-28 15:14:05), 站内信件
|
(近来关于FAT32 的讨论不少. 但从中看到部分战友对FAT32
的认识不够清楚. 俺特从权威杂志摘来有关文章, 希望大家
读后能对FAT32 有个正确的理解)
Windows 95的加强型档案系统
---------------------------------------------------------------------- --
曾几何时,那看起来似乎永远用不完的2GB上限,
现在已经变成另一个需要克服的难题了,
FAT32为FAT档案系统注入新生命
---------------------------------------------------------------------- --
在1987年时,个人电脑的世界中出现了一个危机。微软公司
十年前为其自己的基本磁碟转换程式 (Standalone Disk Basic
interpreter),也就是後来的 DOS所发展出来的 FAT档案系统已
经到达了它的极限。当时的 FAT档案系统只能支援最多32MB的硬
碟,因此使用者都无法利用新一代高密度硬碟所多出来的容量。
而一些独立厂商便使用它们自己的程式以便存取更高的容量,整
个危机一直到微软推出了DOS 4.0 之後才,暂时地得到了解决。
微软的DOS 4.0 大幅改变了档案系统的架构,使得作业程式
得以处理高达 128MB的容量;而其稍後所做的少许扩充又将整个
处理上限提高到 2GB。在当时,这个容量看起来超大,很难想像
有谁会用到它。但是个人电脑的历史如果有立下任何真理的话,
那就是任何「看起来远远超过需求」的事物很快的会变成「完全
赶不上需求」。事实上容量超过 2.5GB的?磁碟现在已经随处可
见。曾几何时,那看起来似乎永远用不完的 2GB上限现在已经变
成另一个需要克服的难题了。
现在微软已经针对Windows 95系统,发展出 FAT32,一个新
的扩充型FAT档案系统,并且悄悄的将其附在OEMService Pack 2
中一起发行。FAT32只提供给新装机的PC而无法从现有的Windows
95升级上取得,然而微软指出它将会包含在预计在年底推出的下
一版的Windows 95之中(代号Memphis)。本文中,我们将回顾FAT
档案系统的一般架构,然後再探讨 FAT32里到底增加了那些东西
。为了避免混淆,我们将使用 FAT16来表示先前旧版的16位元档
案系统。
磁碟区域
当磁碟机被格式化之後,档案系统需要用到一些特殊的区域
来组织它本身的资料;包括主开机记录 (Master Boot Record)
、磁区分割表(Partition Table)、开机纪录(Boot Record)、档
案配置表(File Allocation Table,这也是FAT的名称由来)以及
根目录 (RootDirectory)。在低阶的部份,磁片被分割成一块块
512-byte的区域,称为磁区(Sector)。FAT 档案系统将数个磁区
合并成一个磁丛 (Cluster)当成配置档案时的基本单位。磁丛里
的磁区数目必须是 2的次方。(你可以用CHKDSK或者SCANDISK指
令查看你系统里的磁丛大小)。微软把这些磁丛称为配置单元(
AllocationUnit),而SCANDISK则会回报给你它们的大小,例如
「各个配置单元共有16,384个位元组」等。通常你可以藉著将磁
碟机的容量除以64K(65,536 个位元组),再将得出来的数据进
位到最接近2的次方数以求得磁丛大小。例如一个1.2GB的磁碟其
磁丛的大小可以由1.2GB(1,258,291.2K)除以65,536得到19.2K再
进位到最接近的 2的次方数得知为32K。
FAT连结
FAT 是一个记录磁碟机上头档案大小及其所相对映磁丛的资
料库。它对每一个磁丛都有一个相对的记录表(EntryPoint)。最
前面两个记录点包含了 FAT本身的资料。第三个及後续的记录表
则被分配为 为档案所使用的磁碟空间。FAT 记录表会包含一些
特殊的值来表示∶
■磁丛为空白的-表示没有任何档案使用到它(在 FAT16时其值
为0000H)
■磁丛包含了一个或数个不可使用的受损磁区(在 FAT16时其值
为FFF7H)
■此磁丛为档案的最後一个磁丛 (在FAT16时其值为FFFFH)
如果磁丛已经被使用但不是档案的最後一个磁丛,那么FAT
记录表会记录其下一个磁丛的位置。
每一个目录,无论是根目录或者是子目录,也都是一个资料
库。一个 DOS的目录针对每一个档案都会有一个主要的记录表 (
Windows95 使用额外的记录表来记录长档名)。跟 FAT不同的是
,在 FAT里每一个记录表只有一个 独的栏位 (field),然而在
目录中的每一个档案的记录表都包含了许多的栏位。其中某些栏
位,像是名称(Name)、附属档名 (Extension)、档案大小(Size)
、日期(Date)以及时间(Time)等,可以用 DOS中的 DIR指令来显
示。但是FAT档案系统用到的是那些DIR命令无法显示的栏位-档
案所配置到的第一个磁丛号码。
当一个程式对作业系统要求提供某一个档案的内容时,作业
系统会到此档案的目录记录表去寻找它的第一个磁丛号码,然後
再到FAT记录表里去找在此一联结(Chain)里的下一个磁丛。此动
作不断的重覆直到找到档案的最後一个磁丛为止,作业系统可以
精确的计算那些磁丛属於这个档案及其先後顺序。经由此方式,
作业系统可以提供程式所要求之档案的任何部份。这种组织档案
的方式称为 FAT联结(FAT Chain)。
在 FAT档案系统下,档案永远被分配到整数单位的磁丛。在
一个每一磁丛大小为32K的1.2GB磁碟机中,一个只包含「Hello,
World 」这几个字的文字档,在其目录记录表中可能只记载其档
案大小为12个位元组,但是这个档案还是要在磁碟机中占上32K
的空间。在磁丛中没有用到的部份称为耗损 (Slack)。小档案的
耗损几乎与整个磁丛相当;平均来说,一个档案会有一半左右的
耗损。
在一个每一磁丛为16K的850MB硬碟中,其中平均档案大小为
50K 的话,大概有 16%配置给档案的硬碟空间实际上浪费掉了而
并未被真正用到。一般硬碟压缩程式,如DriveSpace,增加磁碟
机容量的方式之一是将那些虚损的空间转换出来以供其他档案使
用。
计算磁区与磁丛
最早用在 DOS 1.0上使用的是12-bit FAT档案系统。(目前
12-bitFAT 系统仍旧在软碟上使用) 。从DOS2.0开始,由於加入
了对硬碟的支援,因此改用 16-bitFAT记录方式。而在1987年时
碰到了第一个问题,这个问题是根源於作业系统低阶呼叫的方式
,因为当时的 DOS作业系统是以16-bit为参数来记录磁区数目以
便存取档案,而16-bit的记录方式最多只能有65,536个不同的数
值,而65,536乘上每个磁区为512bytes,则最多只能定址到32MB
。这是作业系统所能记录的最多磁区数目。而当时的硬碟容量已
经开始超出这个数目,因而从 DOS 4.0开始,改以32-bit方式来
记录低阶段磁区数目。
目前DOS的2GB容量上限严格来讲并不是作业系统的问题,而
是现有应用程式的问题。一颗硬碟当其容量超过 2GB时,其磁丛
大小为64K,也就是65,536 bytes(参考图二)。但是 16-bit的最
大值只到 65,535,64K就变的太大了。微软发现许多应用程式根
本就直接假设每个磁丛的位元数目可以塞进16-bit的数值中。
就算在硬碟容量 2GB时没有这个16-bit的问题发生,作业系
统也会拒绝存取超过 4GB容量以上的硬碟。在 FAT16的系统中,
作业系统本身会在其设置的磁碟参数表中用一个byte储存每个磁
丛包含多少磁区的数目。这个数字必须是 2的次方,而其值不可
以大於 256。因此磁丛的最大可能大小为128个磁区,也就是64K
。所以即使没有 2GB的上限,FAT16 也仅能使用在 4GB以下容量
的硬碟之中。在FAT32系统上市之後,FAT记录表及磁区数目现在
都变成了32-bit。这表示你可以存取到最大的硬碟空间为2的32
次方(也就是4,294,967,296)乘上每个磁区 512byte,结果得到
2 terabytes (2,199,023,255,552 bytes)。
减少无谓的耗损
现在由於最大的磁丛数目跟最大磁区数目已经一样,你可能
希望 FAT32可以减低无谓的损耗空间,将磁丛的数目直接对映到
每一个磁区。但是现实总是有妥协的,目前 FAT32的规格将 8GB
容量以下硬碟的磁丛大小定为4K。
会这么做,主要是因为 FAT本身大小的问题。因为作业系统
会保持两份 FAT记录,所以每个磁丛的 FAT记录表会占据8bytes
空间。在一颗 2GB的硬碟中,如果每个磁丛大小都只有512bytes
的话,FAT 记录表将会占去32MB的硬碟空间。然而如果每个磁丛
大小为4K的话,这两份FAT记录表将会只占掉4MB的空间,足足节
省了28MB。
但硬碟空间并不是做此妥协的主要原因,还有一个原因是硬
碟效率的问题。VCACHE,这个内建的磁碟快取程式,会尽其可能
的将整个 FAT记录放在 RAM上头以便增加磁碟机的存取速度。很
显然地, 存一个 2MB大小的 FAT记录会比放一个16MB FAT记录来
的容易许多。你可能会担心要存取一个这么大数目的磁丛跟双份
的 FAT记录表会使的VCACHE的效率不佳,但是根据微软的说法,
由於FAT32使用了新的快取方式,因此其整体效能变的更好。
FAT32的其他改变
为了容纳增加了以後所可能出现的大量磁丛数目,每一个档
案的目录记录表中的磁丛开始位置必须用到 4 bytes来记录,而
不再像 FAT16只需要 2 bytes。传统上,每个目录记录表皆是一
个32 bytes的记录。在其中间有10个 byte (bytes 12到21),微
软将其保留下来以供其未来扩充之用。现在其中两个byte被用来
容纳 FAT32扩充磁丛数目之後所需的额外空间。
作业系统虽然在硬碟上保存了两份 FAT记录,但是只使用到
一份而已。有了 FAT32後,作业系统现在可以使用其中任何一份
。另外一项改变是根目录的改变,以前根目录必须放在特定的位
置且只能占用固定的硬碟容量,现在则可以跟子目录一样随著需
要增减。而根目录的数目在也不再有任何限制。由於每一个长档
名要用掉好几个目录记录,因此这项改变显得格外重要。
可移动式根目录以及可使用任意一份的 FAT记录表这两样东
西的结合,使得 FAT32可以提供更平顺且动态的硬碟分割能力,
譬如它可以为了其他作业系统挪出空间来使用。这个新方法比起
在 FAT16之下用独立厂商的公用程式来分割硬碟来得更为安全。
虽然 Windows中并没有包含任何公用程式以便将 FAT32的这
项功能发挥出来,然而 Third-Party厂商已经发表了这类的产品
。它们包含了PowerQuest公司的 Partition Magic 3.0及Quart-
erdeck公司的PartitionIt)
结语
FAT32只有在Windows 95才有支援。微软并没有承诺Windows
NT会支援它,而且还暗示其将来可能也不会这样做。然而该公司
也声称如果 NT5.0不支将AT32的话,他们将会提供一个公用程式
以便将 FAT32转成NTFS (WindowNT 的内建档案系统),所以升级
的人将不会有任何问题。
但是目前为止,如果你想在同一部机器上既跑Windows 95也
跑Windows NT的话,你必须先确定这两个作业系统所共用的磁碟
是使用 FAT16而不是 FAT32,否则Windows NT会看不懂 FAT32,
而同样的Windows95也无法读取NTFS。
你也必须知道由於目录表中的档案大小栏位为32bits,因此
单一档案的大小也不能超过4GB。
最後,每次档案系统做大幅度改变时,你将会无法使用一些
低阶的磁碟工具程式,如Norton Utilities等。请准备将它们升
级吧。而档案管理程式及(像是Norton Navigator等)应该可以
继续在FAT32中使用。
如果我们选择采用 FAT32的话,可能要再等上15年我们才会
碰到它的2-terabyte上限,那时才需要再次转移到 FAT64。但是
如果讲到目标导向档案系统的话,我们可以肯定的预测那时我们
早就不再使用 FAT档案系统了,如同在1987年时我们就已经预测
在 FAT达到其 2GB的上限之前将会消失。
-- ————————————————————
OICQ:792385
E-MAIL:[email protected]
※ 来源:.月光程序代码网 http://www.moon-soft.com.[FROM: 202.110.153.98]
|
|