FAT
作为一种文件系统名称,FAT听起来似乎有些陌生,然而,它实际上正是文件分配表的英文缩写。自1981年首次问世以来,FAT已经成为一个历经沧桑的计算机术语。由于时代原因,包括Windows NT、Window 98、MacOS以及多种UNIX版本在内的大多数操作系统均对FAT提供支持。
FAT文件系统限制使用8.3格式的文件命名规范,这就是说,在一个文件名中,句点之前部分的最大长度为8个字符,句点之后部分的最大长度为3个字符。FAT文件系统中的文件名必须以字母或数字开头,并且不得包含空格。此外,FAT文件名不区分大小写字母。
文件配置表(英文:FileAllocationTable,首字母缩略字:FAT)是一种由微软发明的并带有部分专利[1]的文件系统,供MS-DOS使用,也是非NT内核的微软窗口使用的文件系统。
FAT文件系统考虑当时计算机效能有限,所以未被复杂化,因而被几乎所有个人计算机的操作系统支持。这特性使它成为理想的软盘和记忆卡文件系统,也适合用作不同操作系统中的数据交流。
但FAT有一个严重的缺点:当文件被删除并且在同一位置被写入新数据,他们的片段通常是分散的,减慢了读写速度。磁盘碎片重整是一种解决方法,但必须经常重组来保持FAT文件系统的效率。
FAT文件系统遵行已用了多年的软件方法来进行规范。它在1977年由比尔·盖茨和马斯·麦当劳为了管理磁盘而发明,并在1980年被添·彼得逊的86-DOS操作系统采用。这也是86-DOS操作系统与CP/M操作系统最大的不同点,若非此项差异,86-DOS操作系统与CP/M操作系统几乎可说完全相同。
FAT12
初期的FAT就是现在俗称的FAT12。作为软盘的文件系统,它有几项限制:不支持分层性结构,丛集寻址只有12位(这使得控制FAT有些棘手)而且只支持最多32M(216)的分区。
当时入门级的磁盘是5.25"、单面、40磁道、每个磁道8个扇区、容量略少于160KB。上面的限制超过了这个容量一个或几个数量级,同时允许将所有的控制结构放在第一个磁道,这样在读写操作时移动磁头。这些限制在随后的几年时间里被逐步增大。
由于唯一的根目录也必须放在第一个磁道,能够存放的文件个数就限制在了几十个。
目录
为了很好地支持以带有10MB硬盘为特色的IBMPCXT新计算机,在1983年年初MS-DOS2.0几乎与该计算机在同时发布,它引进了层次目录结构。除了允许更好地组织文件外,目录允许在硬盘上存储更多的文件,这是因为最大文件个数不再受制于(仍然是固定的)根目录大小。这个数目现在能够等同于簇的数目(甚至更大,这是考虑到长度为0的文件并不占据任何FAT簇)。
FAT本身的格式并没有改变。PCXT的10MB的硬盘有4KB大小的簇。如果后来安装了一个20MB的硬盘,并且使用MS-DOS2.0格式化,最后的簇大小将变为8KB,硬盘容量将变为15.9MB。
FAT16的开始
在1984年,IBM发布PCAT,这是一个20MB的硬盘。微软公司也同步发布了MS-DOS3.0。簇集地址增加至16位,允许更大数量的簇(最大65,517),所以有更大的文件系统大小。但是,最大数量磁区及最大分割区(相当于磁盘)的大小仍是32MB。所以,尽管技术上已经是“FAT16”,这种格式并不是我们今天常见到的这个名字所代表的格式。在MS-DOS3.0格式化一个20MB的硬盘,这硬盘将不能被MS-DOS2.0或之前的版本所存取。当然,MS-DOS3.0仍然可存取MS-DOS2.0的格式(8KB簇的分割区)。
MS-DOS3.0也开始支持高密度1.2MB5.25"磁盘,最著名的是每个磁道有15个扇区,这样就允许FAT有更大的空间。这或许促进了一个对于簇大小的不确定的优化,簇大小从2个扇区减到1个。这样做的最后结果是高密度磁盘比旧的双密度磁盘的速度大幅度降低。
扩展分区和逻辑驱动器
除了改进FAT文件系统本身的结构之外,一个并行的提高FAT存储空间的开发路线是支持多个磁盘分区。最初,由于主引导分区中文件分配表的固定结构的原因一个硬盘只能使用多达4个分区。然而,由于DOS设计要求只能有一个分区标识为“活动的”,它也是主引导代码启动所用的分区。使用DOS工具不可能创建几个“主”DOS分区,并且第三方的工具也至少会警告这样一个机制将与DOS不兼容。
为了用一种兼容的方式使用更多的分区,一种新的分区类型被开发出来(1986年]1月的MS-DOS3.2),扩展分区它实际上是另外称为逻辑分区的一个容器。最初它里面只允许有一个逻辑分区、支持最大64MB的硬盘。在MS-DOS3.3(1987年8月)这个限制更改到24个分区;它可能来自于强制性的C:-Z:的磁盘命名规则。逻辑分区表使用盘上的数据结构来描述,可能是为了简化编码它与主引导记录非常相似,并且它们组织成类似于俄罗斯套娃那样的结构。系统中只能有一个扩展分区。
在扩展分区引入之前,一些硬盘控制器(当时是独立的板子,因为还没有IDE标准)能够将大硬盘显示为两个独立的硬盘。作为一种选择,如Ontrack[1]的磁盘管理员这样的一些特殊软件可以用于同样目的。
最终的FAT16
1987年11月我们今天称为FAT的格式最终到来,它在康柏DOS3.31中去掉了磁盘扇区的16位计数器。这个结果曾经一度被称为DOS3.31大文件系统。尽管看起来磁盘上的变动很小,这个DOS的磁盘代码都必须检查并转换到32位的扇区数,由于它全部是16位的汇编语言这样一个现实,这项工作就变得非常复杂。
1988年这项改进通过MS-DOS4.0得到广泛应用。现在分区大小受限于每个簇的8位有符号扇区计数,它最大能达到2的64次方,对于一个常用的有32KB个簇每扇区512字节的硬盘来说,将FAT16分区大小的“明显”限制扩充到2GB。在磁光盘媒体上,它能使用1或者2KB的扇区,这样大小限制也就成比例地增大。
后来,视窗NT通过将每个簇的扇区数当作无符号数将最大的簇大小增加到64KB。然而这个格式与当时其它的任何FAT实现都不兼容并且产生了大量内部碎片。视窗98也支持这种格式的读写操作但是它的磁盘管理工具不支持这种格式。
长文件名(VFAT,LFN)
Windows95设计人员的一个用户体验目标就是除了传统的8.3文件名以外在新操作系统中使用长文件名(LFN)。长文件名通过在目录条目排列时使用一个工作区来实现(参见下面)。按照Windows95VxD设备驱动程序的命名规则这个新扩充的文件系统通常称为VFAT。
有意思的是,VFAT驱动在早于Windows95的WindowsforGroups3.11中就已经出现,但它仅仅用于实现32位文件访问,一个绕过DOS的视窗自带高性能保护模式文件管理系统,它能够直接使用BIOS或者更好的32位磁盘访问,如视窗自带的保护模式磁盘驱动程序。它是一个后门;微软为WindowsforGroups3.11所作的广告说32位文件访问基于“芝加哥项目的32位文件系统”。
在WindowsNT中,FAT文件系统对于长文件名的支持从3.5版就已经开始了。
FAT32
为了解决FAT16对于卷大小的限制同时让DOS的真实模式在非必要情况下不减少可用常规内存状况下处理这种格式,微软公司决定实施新一代的FAT,它被称为FAT32,带有32位的簇数,目前用了其中的28位。
理论上,这将支持总数达268,435,438(>1)+*pFcbName++;
returnsum;
}
旧版的PC-DOS错误地将根目录中的长文件名当作卷标,这样它们就会显示错误的卷标。
每个假条目包含13UTF-16个字符(26字节),通过使用包含文件大小或者时间记录的区域获得除了旧的8+3之外的另外15个字节(但是出于安全和磁盘检查工具的考虑开始簇的区域没有使用保留值为0)。参见8.3中另外的解释。
如果一个文件名只包含小写字母、或者是一个小写字母的名加上大写扩展名的混合或者与此相反,没有特殊的字符并且满足8.3的限制,在视窗NT上就不创建VFAT的条目。相反,在目录条目的偏移0x0c处的没有说明的位用来指示文件名全部或者部分是小写字母。特别明确的是,位4意味着小写字母的扩展名,位3意味着名是小写字母,这样就允许如“example.TXT”和“HELLO.txt”这样的组合,但是不允许“Mixed.txt”这样的组合。很少有操作系统支持这种功能。非NT视窗版本当这个扩展使用时将把文件名当作大写字母。缺省情况下,Linux的最近版本将认识这个扩展但是在写时并不使用它。
第三方扩展
在微软公司添加长文件名和创建/访问时间戳之前,其它的操作系统使用目录表字节0x0C-0x15存储其它的元数据。
在二十世纪九十年代中期微软公司申请并获得了一系列的FAT文件系统内核部分的专利。由于具有广泛的兼容性和易于理解,FAT经常被选为用于数码相机和个人数码助理中闪存的数据交换格式。
2003年12月3日微软公司宣布使用FAT规范和“相关智慧产权”将需要得到授权,被个销售单元支付0.25美元的版权费,每个授权协议最多250,000美元的版权费。
为了这个目的,微软公司提及了四个关于FAT文件系统的专利作为它的知识产权主张的基础。所有这些与长文件名扩展有关的FAT首先出现在Windows95中:
美国专利5,745,902-访问使用不同文件名格式的文件名的方法和系统。1992年7月6日备案。这包括生成、联系一个8.3兼容格式的短文件名和长文件名的方法(如“Microsoft.txt”和“MICROS~1.TXT”),以及列举相互冲突的短文件名的方法(如“MICROS~2.TXT”和“MICROS~3.TXT”)。现在还不清楚这个专利是否覆盖不具有显式长文件名能力的FAT实现。Unix文件系统中的硬连接看起来不是先行者:从长文件名删除一个FAT文件也将删除它的短文件名。将一个文件重命名为一个“短”文件名也将一致地更改长文件名;同样,将一个文件重命名为“长”文件名也将重新生成一个“短”文件名。在NTFS中,硬连结和两个名字是不同的概念,并且每个硬连结都有两个名字。最后,在API的层面上,当在系统中进行目录搜索时两个文件名都会出现;它们看起来不是两个独立的文件并且它们也没有有必要去“映射”确定同一个文件。
美国专利5,579,517-长、短文件名公用的命名空间。1995年4月24日备案。这包括将多个连续8.3目录条目链接在一起支持长文件名的方法,其中一些条目特殊进行标记阻止可能引起混淆地早期的不支持长文件名的FAT实现。
公共专利基金会成功地对这项专利发起了挑战;这个专利申请由于所申请的技术在专利美国专利5,307,494和美国专利5,367,671中的先期发现在2004年9月14日被驳回]。这个决定后来在2006年1月10日被美国专利局所推翻。
美国专利5,758,352-长、短文件名公用的命名空间。1996年9月5日备案。它非常类似于5,579,517。
公共专利基金会成功地对这项专利发起了挑战;美国专利商标局基于"thesixassigneesnameswereincorrect"[4]在2005年10月5日驳回了这项专利。这个决定也在后来的2006年1月10日被美国专利局推翻。
美国专利6,286,013-在操作系统中为长、短文件名提供一个公用的命名空间的方法和系统。1997年1月28日备案。它所申请的内容包括Windows95、Windows98和WindowsMe的长文件名提供给它们MS-DOS兼容层所用的方法。它看起来不影响非微软的FAT实现。
许多技术评论断言这些专利仅仅涵盖了支持长文件名的FAT实现,那些只使用短名字的移动固态媒体和消费设备将不受影响。
另外,在微软2000年12月6日出版的"MicrosoftExtensibleFirmwareInitiativeFAT32FileSystemSpecification,FAT:GeneralOverviewofOn-DiskFormat",微软公司明确地给出了一些授权,许多读者将它认为是微软允许操作系统厂商实现FAT。
控诉
由于人们广泛要求重新审查这些专利,公众专利基金会向美国专利和商标局(USPTO)提出了一些证据争辩这些专利的有效性,其中包括施乐公司和IBM的早期参考资料。美国专利商标局承认这些证据提出了“可专利性的实质性的新问题”并且对于微软公司FAT专利的有效性展开调查。
2004年9月30日,美国专利商标局主要基于公共专利基金会所提供的证据驳回了美国专利5,579,517的专利主张。这个基金会的执行总裁DanRavicher说“现在专利局只不过是确认了我们已经知道了一段时间的事情,微软公司的专利是假的。”
PUBPAT的新闻发布会说,“微软公司仍然有机会回应专利局的驳回。有代表性的是第三方的重新审查要求如PUBPAT提供的资料成功地减小了专利的范围或者有70%的机会完全驳回专利。”
2005年10月5日,专利局宣布随着调查的深入它驳回了专利5.579,517的专利主张,另外它发现专利美国专利5,758,352有错误的专利受益人而无效。
最后在2006年1月10日,专利局裁定微软公司的FAT系统的实现特点是“新颖和非显然的”,推翻了早期的两个非最终裁决。
^专利申请的是在文件系统中支持长文件名的技术,而不是文件系统内核本身。
^Duncan,Ray(1989).DesigngoalsandimplementationofthenewHighPerformanceFileSystem.MicrosoftSystemsJournal4(5).
^Thompson,RobertBruceandBarbaraFritchmanThompson,PCHardwareinaNutshell,3rdEdition,,O'Reilly,ISBN059600513X(p.506reMicrosoft"bizarrely"saying32GBlimitationisbydesign
^LimitationsofFAT32FileSystem,Microsoftknowledgebasearticle184006
^Norton,Peter(2002页面文件)
文件分配表 reiserfs DBR FAT16 HFS CDFS ntfs FAT32 HPFS Fsutil
)


