找回密码
 新注册用户
搜索
查看: 2662|回复: 0

FCES - 一种全新的分区文件系统结构 一

[复制链接]
发表于 2005-5-2 01:36:22 | 显示全部楼层 |阅读模式
自由簇规范执行标准
Free Cluster Executive Standard [FCES]
1、使用权利和义务的规定
1、定义、内容和通用准则
本规定[使用权利和义务的规定,下同]是您[包括任何组织和个人,下同]与开发组成员[开发组成员资料集中包含的所有核心开发者和修改者,下同]之间订立的通用准则,仅当您使用[包括查阅、修改、发布以及用程序语言实现,详细参阅本部分的以下内容]本规范[包括当前和以后任何版本的修改稿,下同]以及之后,并因此产生任何对您和[或]开发组成员的影响时生效。只有当您认可本规定订立的所有规则之后,方可以正式使用本规范所包含的技术。如果对此有任何疑义,请致询开发组成员。如有任何异议,请不要使用本规范。并敬请删除您所拥有的所有本规范的副本。
本规定将主要包括以下几个部分
1、关于免费使用范围的规定
2、关于有偿使用范围的规定
3、关于有偿使用者的权利和义务的规定
4、关于违反本规定之前规则的惩罚
本规定之后将逐一阐述上述的内容,对于本规定中可能存在的遗漏和错误,将在以后的修改中添加和修正,恕不另行通知。本规定的最终解释权归开发组成员,且对本规定的解释必须获得所有核心开发者和超过2/3的修改者认可。
通用准则
1、规范开发组成员申请法律保护的准则
以下提及的任何准许的法律保护,如果没有特殊说明,均不得以妨碍其它规范开发组成员申诉为代价。具体法律保护程序及最终保护权利,视所在地的法律规定。
2、开发组认可的准则
以下提及的任何的开发组认可,如果没有特殊说明,均是指获得所有核心开发者和超过2/3的修改者的认可。
2、免费使用范围
1、无偿原则
任何个人和组织可以在无偿的原则上查阅、修改、发布以及用程序语言实现[包括汇编及高级语言]本规范。但任何的使用都不可以妨碍他人使用作为代价。
2、对于修改、发布和用程序语言实现的额外要求
对本标准的无条件修改限于第二部分[规范明细]中的分区结构、文件系统处理等。第一部分[使用权利和义务的规定]及第三部分[开发组成员资料集]不允许随意修改。但是参与修改的个人或组织,可以在第三部分中的[修改组资料集]中添加和修改自己的资料,但必须告知所有核心开发者方可认为生效。经所有核心开发者同意后,可以将提供重大修改意见的修改者加入核心开发组资料集,从而成为核心开发者。如果需要修改第一部分[使用权利和义务的规定]或第三部分[开发组成员资料集]中不属于自己的资料,则必须将修改意见告知所有开发组成员,并且获得开发组认可,方可按照认可的修改意见加以改动。
对于本规范的发布要求完整的发布全文,特别不得在发布中任意删减第一部分[使用权利和义务的规定]或第三部分[开发组成员资料集]。
对于在免费使用前提下,使用程序语言实现本规范或任何版本的修改稿的个人或组织,要求所开发的程序不得以盈利作为目的发布。如需要带有赢利性质的使用本规范,请参阅以下的有偿使用范围。
3、有偿使用范围
1、有偿原则
有偿使用本规范,只限于使用程序语言实现[包括汇编及高级语言]。并且不可以妨碍他人使用作为代价。即本规范完全共享,永不出售给任何组织和个人。对于有偿使用本规范的个人或组织,只拥有使用本规范或某一版本的修改稿中所包含的技术开发,并将完成开发的程序有偿出售、出租给第三方的权利。
2、有偿使用限制
1、提供有偿使用方式
任何组织和个人都有提出有偿使用的要求,但必须告知所有开发组成员,签订相关书面协议,并且协议获得开发组认可后,方可正式开始有偿开发和将完成的程序出售、出租给第三方等的盈利商业活动。并且有偿使用权利仅限于此,有偿使用方没有将有偿使用权转让的权利。如果存在未获得认可就加以有偿使用,和[或]转让有偿使用权的情况,规范开发组的任何成员都有权独立或联名申述侵权和[或]申请相关的法律保护。
2、时间限制
规范开发方有权在书面和口头协议中提出有偿使用的时间限制。订立的有偿使用时间限制需要经过开发组认可。有偿使用方可以对订立的限制时间提出质疑,并要求规范开发组重新订立限制时间。但具体修改仍视规范开发组。
有偿使用方若存在超期限使用的,规范开发方的任何成员都有权独立或 联名申述违约和[或]申请相关的法律保护。
4、对于违反本规范使用权利和义务的惩罚
本部分[本规范使用权利和义务]是强制性的准则,对任何个人和组织有效,并且包括任何开发组成员。
1、对非开发组成员的违规使用或违约等的处理方式
对非开发组成员的违规使用[包括有偿和无偿使用]或违约等的处理方式遵循本部分以前两节[免费使用范围]和[有偿使用范围]中的相关规定。
2、对开发组成员的违规使用等的处理方式
1、开发组成员违规的定义
开发组成员违规包括,某一个、或多个开发组成员联合,违反了前两节[免费使用范围]和[有偿使用规范]中的规定,包括在违反了第三节[有偿使用范围]中相关程序的情况下,将本规范的有偿使用权出售、转让或出租,以及用任何盈利或不盈利方式提供给第三方进行有偿开发。或者在获知存在其他组织或个人违规的情况下,未及时告知其他开发组成员,和[或]故意向其他开发组成员隐瞒,并因此造成其他开发组成员利益的损害。以及任何与本规定之前规则矛盾的使用、转让、出租和出售等行为。
2、对开发组成员的违规使用等的处理方式
如果一个或多个开发组成员涉及上述的违规行为,其余的开发组成员可以独立或联名申诉侵权和[或]申请相关的法律保护。如经合法裁定或判决确认其违背并侵害了其余的开发组成员的利益,则在法律保护以外,经过开发组认可,可以将违规的开发组成员降级或者除名。具体包括,从核心开发组成员降级至修改组成员或从开发组成员中除名,以及将修改组成员从开发组成员中除名。

2、规范明细:
1、本规范涵盖内容
本规范不包含对MBR[主引导记录]和PBS[分区启动区]部分的修改。前者不属于此规范所需要处理的内容,后者因与具体的操作系统相关,尚未被处理。
本规范仅包含信息存储部分的内容,对应于传统FAT文件系统的BPB[基础参数区]、FAT[文件分配表]及其后的部分。
2、基于当前硬盘规范的设定
1、扇区与数据存储的基本方式
当前的主流硬盘系统都是以扇区作为最小的存取单元。本规范遵循此标准,即所有的数据存取工作均是以扇区为单位。且根据通行的512字节作为一个扇区,但大多数的规范操作内容不依赖于扇区的大小,可能存在的个别情况将被特别标注或加以详细说明。
2、接口与传输规范
本规范中不涉及此类的问题,本规范的设计将不依赖于硬盘的物理接口以及传输规范。
3、MBR中的分区信息
为与其它类型的分区加以区别,定义在MBR中的FCES分区类型为90H。其余分区信息依赖于特定的硬件系统,如起始和终止头、柱面和扇区信息。
为了描述的方便,现约定假设存在一个FCES分区从0盘面0柱面1扇区起。
4、分区的主要分配和组成方式
除去PBS[分区启动区]外,FCES分区将包含以下的三部分。
1、分区基础属性区[BPB]
2、索引记录区[IRB]
3、数据记录区[DRB]
5、分区基础属性区详细
1、区域主要功能
与FAT文件系统中的BPB[基础参数区]功能相近。记录分区的基本属性,用于初始化相应的系统保留内存,供后期对文件和路径的组织访问和修改使用。将在以下的属性列表中说明各属性的独立作用。
2、区域位置
在PBS[分区启动区]后,即起始扇区后一柱面的第一个扇区开始[0盘面1柱面1扇区],最多扩展至后24个扇区[0盘面1柱面24扇区]。
3、基础属性表
功能说明        扇区编号        区内偏移量        区块长度        演示值
BPB长度        0x02        0x0000        Byte        0x02
索引长度        0x02        0x0001        Byte        0x04
字符名长度        0x02        0x0002        Word        0x00FF
地址指针长度        0x02        0x0004        Byte        0x08
卷序列号        0x02        0x0025        16 Bytes        '1ACEFK..'
4、基础属性详细说明
这个部分是FCES正常工作所需要的最基本信息,这四个值不依赖于版本,但整个基础属性表将可能被扩充。索引长度和地址指针长度一般依照于硬盘的物理性质进行设定,BPB长度和字符名长度依照用户或操作系统的规定进行设定。通常情况下,对基础属性表的修改会被限制在一个较高权限要求之下,或者不允许修改。因为根据FCES,对此的任何修改将可能造成对整个分区的无法存取。但这种问题可以通过对此表的修改而解决。[详见逻辑数据损坏处理中的说明]
1、BPB长度
记录基础属性区所占用的扇区数,以便于扩展。
2、索引长度
记录索引记录区中独立的文件或目录的索引号所占用的字节数,最大为255。根据文件与目录索引区分方法[详见索引记录区中的说明],约将可以容纳256^255/2个文件以及256^255/2个目录。[不排除部分系统保留文件索引号。]
3、字符名长度
记录索引记录区中独立的文件或目录的字符串名称的最大长度。最大为65535,即可以使用65535个字节长度的字符串标注一个目录或文件。
4、地址指针长度
记录索引记录区中和任一自由簇前后的地址指针所占用的字节数。
5、卷序列号
此序列号作为对卷索引的唯一标示,若存在多个FCES分区,则不允许此卷序列号重复。一般应由分区程序自动生成并写入基础属性表。无须最终用户或客户程序管理。
5、扩展属性表
区内偏移量均以演示值计算。
功能说明        扇区编号        区内偏移量        区块长度        演示值
扩展标示        0x02        0x0015        32 Bytes        'FCES.BASIC'
卷标        0x02        0x0035        32 Bytes        'User Disk'
用户个数        0x02        0x0055        Byte        0x06
用户名列表        0x02        0x0056        每个16 Words
最大 4032 Bytes        'User1..'
类型个数        0x02        0x0116        Byte        0x10
类型名列表        0x02-0x03        0x0117        每个16 Words
最大 8192 Bytes        'Hidden..'
路径分隔符        0x03        0x0117        Word        '\'
6、扩展属性详细说明
这个部分是FCES扩展功能实现所需要的信息,基于FCES的不同版本和发展将可能会有较大的改动和扩充。其中的信息均为连续存储,忽略扇区终止符。
1、扩展标示
说明此扩展属性表的标示信息,用于支持系统确认是否可以实现全部的扩展功能,和[或]跳过其中某些不支持的扩展功能。
2、卷标
用于最终用户对此分区的说明,此说明同时也可成为此分区根目录的字符串标示。
3、用户个数
记录整个分区将可能被多少个用户同时或同时段使用[包括尚未注册但预留记录空间的用户],最大为127,即允许最多127个用户对分区进行可能包括受限的读写访问。
4、用户名列表
记录所有注册用户的用户名,并预留下记录空间供未注册的用户。根据用户名的前后顺序进行排序和设立用户编号。用户编号将用于文件的用户访问权限以及加密确认校验。编号0x00的用户为共享用户,不存在编号为0x80的用户[详见索引记录区中的说明]。不存在可以访问任何用户文件的超限级用户。
在索引记录区中,用户所属的文件的索引记录中将包含用户编号,从而成为一种不依赖于绝对或相对路径的文件组织形式和搜索方法。[详见索引记录中的说明]
5、类型个数
记录整个分区中存在的所有文件类型的总个数,如早期的[只读]、[存档]等。对于一个FCES分区,所支持的文件类型最多为256个[包括未登记但预留记录空间的类型]。类型个数应为8的倍数,以保证存储空间的有效利用[详见索引记录中的说明]。可能根据支持系统的不同,其中的某些会被作为缺省类型而不可以被更名或删除。
6、类型名列表
记录所有已登记类型的字符名称,并预留下记录空间供未登记的类型。根据类型名的前后顺序进行排序和设立编号,用于对文件进行不依赖于绝对或相对路径的组织和搜索。[详见索引记录中的说明]
同时,类型名还可以用于定义不同级别的文件误删除和误修改保护。
7、路径分隔符
记录用于绝对或相对路径显示时的路径层分隔符号,以适应不同的自然语言中对路径层分隔符号在习惯上的不同。因在FCES分区中文件或目录名称只是简单的符号标记,因此可能出现路径分隔符和文件或目录名称中的符号重复,而无法区分的问题。所以根据支持系统的不同,可能会不允许此分隔符出现在文件或目录名称中,和[或]限制对此符号的修改。
6、索引记录区详细
1、区域主要功能
记录文件和目录的用户权限、加密确认校验、字符名称、类型、创建[或修改]时间。同时记录文件和目录、目录和目录的从属关系,以及文件的起始扇区编号。
2、区域位置
由分区最后一个扇区开始反向记录,以保证存储空间能够得到完全的利用。
3、区域结构
索引记录区由若干个独立的索引记录组成,每个索引记录记录一个文件或目录的信息。每个索引记录一般占用1个扇区的存储空间[视基础属性表中的设定,将在以下内容中详细说明。],若字符名称长度超过467Bytes则独立于第二之后的扇区。对于目录,不记录文件起始扇区的编号,即相应位置空置。
索引记录的排列依照索引编号的顺序。对于一个已经被设定过基础和扩展属性表的分区而言,任意一条索引记录所占用的扇区数将被固定,这样通过索引编号与每条索引记录占用的扇区数就可以直接定位任意一条索引记录的位置,从而提高文件和目录检索的速度。
4、单独索引记录结构表
采用相对扇区编号,即
[0x01]表示此索引记录中的第一记录扇区。
区内偏移量以及区块长度均以基础属性表和扩展属性表中的演示值为准。
                        以文件的索引记录为例,且仅为演示,无实际意义,下同。
功能说明        扇区编号        区内偏移量        区块长度        演示值
检查使用标记        0x01        0x0000        Byte        0xFF
用户编号        0x01        0x0001        Byte        0x81
索引编号        0x01        0x0002        DWord        0x0001000A
父目录索引编号        0x01        0x0006        DWord        0x8000010B
类型编号        0x01        0x000A        Word        0xAC
创建[修改]时间        0x01        0x000C        5 Bytes        0x1F54420000
字符名称        0x01        0x0011        256 Bytes        'UserFile1.txt..'
起始扇区编号        0x01        0x0267        8 Bytes        略
5、单独索引记录详细说明
1、检查使用标记
记录此索引记录区域是否已被使用,如果未被使用或隶属文件或目录已被删除,则标记为0x00,否则标记为0xFF。
2、用户编号
由8位的2进制数组成。其中后7字位组成的数与此用户在扩展属性表中的顺序编号相同。第一位为加密确认校验位。1表示此文件的全部数据经过加密处理[包括此条索引记录中余下的部分],直接获取的数据与真实数据不同。0表示没有经过加密处理。
如演示值中的81H=10000001B,表示此文件是编号为1的用户的加密文件。此位对目录同样有效,因为索引与父目录索引编号同样被密码保护,所以从属于此目录的所有目录和文件,无视加密与否同样无法在以目录方式检索时被获取。
3、索引编号
具体长度依赖于基础属性表中关于索引占用字节数的记录。是文件或目录在整个文件系统中的唯一标号,用于对文件和目录以及之间的从属关系的检索。索引编号的分配依赖于支持的操作系统,无须最终用户或客户程序管理。[详见操作系统的索引编号管理和分配]
依演示值,索引编号由32位的2进制数组成,分为2个部分。第一部分是文件和目录的区分位,占用1字位。0表示为文件,需要在存取文件时读取随后的起始扇区编号。1表示为目录,不存在起始扇区编号。后31位为剩余编号位。定义0x80000000为分区根目录,定义0x00000000的文件为未使用索引编号表记录文件[详见操作系统的索引编号管理和分配中的说明]。
4、父目录索引编号
FCES使用相对目录管理文件和目录的从属关系,即不记录下全部的目录树结构,而只是通过记录相对路径关系来形成完整的目录树结构。
[这样虽然可以提高索引编号检索、相对路径检索以及修改绝对和相对路径的速度,但是却可能造成目录文件从属关系检索时的迟钝。因为如果需要检索一个目录下属的所有文件和目录,则必须检索整个索引记录区。为此,可能需要加以修改。]
父目录索引编号就是此文件或目录所属目录的索引编号。依演示值,如果索引编号为0x80000000,则表示此文件或目录从属于分区根目录。
5、类型编号
记录此目录或文件所具有的类型,其占用字节数为扩展属性表中分区的[类型个数]/8。每一位2进制数表示一种类型,其排列顺序与类型在类型名列表中的编号顺序一致。为设置为1时,表示此目录或文件拥有此种类型。否则,设置为0。
如演示值,ACH=10101100B,表示此文件拥有编号为1、3、5、6的类型。
6、创建/修改时间
记录此文件或目录的创建或最后一次修改的时间。整个记录分为6个部分,分别为年、月、日和时、分、秒。2进制分段表如下:
功能说明        2进制位偏移量        区块长度        演示值
年        0x0000        14字位        00011111010101B
月        0x000E        4字位        0001B
日        0x0012        5字位        00001B
时        0x0017        5字位        00000B
分        0x001C        6字位        000000B
秒        0x0022        6字位        000000B
如演示值0x1F54420000,表示2005年1月1日0时0分0秒。
7、字符名称
记录目录或文件到字符名称,这个名称只作为最终用户对其中信息的一个简要描述,可用于文件名检索,但并没有区分不同目录和文件的作用。因此除非支持系统的限制,其中准许出现任何的字符,并且准许同一相对路径下存在多个同字符名称的目录或文件。
但此字符名称仍然可以准许使用当前Windows系统中通用的后缀名区分文件打开或执行方式的模式,即后缀名可以由支持系统或者客户程序指定。
8、起始扇区编号
记录文件数据的起始扇区,以提供文件存取的磁盘物理位置的入口。[详见数据记录区的说明。]
7、数据记录区详细
1、区域主要功能
记录文件中的数据。
2、区域位置
紧接于分区基础属性区之后,依演示值为0盘面1柱面3扇区起。
3、数据链式存储方式
为了能够完全利用存储空间,FCES沿用通行的链式文件存储方式。但使用自由簇作为逻辑存储的最基本单位。
4、单一自由簇结构
自由簇分为八个部分
功能说明        扇区编号        区内偏移量        区块长度        演示值
检查使用标记        0x0001        0x0000        1 Byte        0xFF
自由簇长度记录        0x0001        0x0001        8 Bytes        略
最后扇区长度记录        0x0001        0x0009        Word        0x001B
文件结尾标记        0x0001        0x000B        1 Byte        0xFF
隶属文件索引编号        0x0001        0x000C        8 Bytes        0x0001000A
随后簇起始扇区编号        0x0001        0x0014        8 Bytes        略
前一簇起始扇区编号        0x0001        0x001C        8 Bytes        略
簇数据        0x0002起        0x0000        [随机]        略
5、单一自由簇结构详细说明
1、检查使用标记
记录此自由簇是否已经被使用,如果未被使用,或隶属文件已经被删除,则标记为0x00,否则标记为0xFF。
2、自由簇长度记录
记录此自由簇占用的扇区数,包括第一扇区的自由簇属性记录。即自由簇数据区扇区数+1。
3、最后扇区长度记录
记录此自由簇占用的最后一个扇区中,文件数据占用的长度。以便于准确获取未完全包含整数个完整扇区的文件的长度。
4、文件结尾标记
标注隶属文件是否在此自由簇中结束。如果结束,则标记为0xFF,且最后扇区长度记录生效,但随后簇起始扇区编号将无效。否则,标记为0x00。
5、隶属文件索引编号
标注此自由簇所隶属的文件索引编号,如果此自由簇是为处理分区物理损坏而生成的,则此记录标记为0x00000000。[详见分区的检查和整理中对分区物理损坏的处理方式。]
6、随后簇起始扇区编号
如果隶属文件未在此自由簇中结束,则此编号记录下一隶属同一文件的自由簇所在位置的编号,以便可以查找到隶属文件的随后数据。否则置空。
7、前一簇起始扇区编号
如果记录隶属文件不由此自由簇开始,则此编号记录上一隶属同一文件的自由簇所在位置的编号,以便可以查找到隶属文件的以前数据。否则记录隶属文件的索引记录所在位置。因为索引记录区的位置固定,所以如果前一簇起始扇区编号属于索引记录区,则说明文件由此自由簇开始。
8、簇数据
记录文件需要被保存的数据的部分或全部。
8、操作系统的索引编号管理和分配
1、概述
索引编号作为文件和目录在文件系统中的唯一标识,对文件和目录的检索、管理等都有很重要的作用。所以作为文件系统的实现和管理,操作系统中的文件系统管理部分的工作之一就是对索引编号进行有效的管理和分配。
为了能够有效的管理和分配已经使用和未使用的索引编号,操作系统必须产生和维护两张数据表,其基本结构一致,分别用于管理文件和目录的索引编号。
此处将此数据表称之为未使用索引编号表[简称UUIT],之所以记录未使用的索引编号,是为了能在建立文件或目录时方便检索到最小的未使用索引编号,并在删除时减少可能产生的工作量。
2、UUIT结构
UUIT可由数组或链表等数据结构构成,主要包含三个域,见下表。
域长度以基础属性表和扩展属性表中的演示值为例。
名称        域长度        功能说明        演示值
Index        DWord        作为数组或链表等的标识或索引        0x00000001
Start        DWord        未用段的起始索引编号        0x0000001E
End        DWord        未用段的末尾索引编号        0x0000021D
3、各域功能详细说明
1、Index
作为系统对数据处理等的索引,如在数组中,则为数组第一维的编号。
2、Start和End
Start记录未使用索引段的起始编号,End记录未使用索引段的末尾编号。如若0x0000001E至0x0000021D的索引编号都未被使用,则将0x0000001E记入Start,0x0000021D记入End。
如使用数组等定长数据结构,则可能还需要DWord的MaxIndex来记录当前已使用UUIT区域的最大Index。
4、UUIT的管理、保存、维护和初始化
1、目录和文件建立时的处理
总是优先从Index=0的未使用索引段中选取Start位置的编号,如发现此选取的索引编号为0x00000000[对于目录则为0x80000000,本段下同],则选取Index=1的未使用索引段中Start位置的编号,再为0x00000000,则选取Index=2,以此类推。并在选取后,将对应位置的Start改写为Start+1。如果此时Start>End,则将Start改写为0x00000000。
在选取了可使用的索引编号后,检查对应索引编号记录区域的检查使用标记是否为0x00。如果为0xFF,则可能是上一次未能正常保存UUIT,需要检查分区,以重新获取UUIT。[详见检查与逻辑数据损坏处理。]
2、目录和文件删除时的处理
获取被删除目录或文件所占用的索引编号,然后将第一个未被使用的UUIT区域中的Start和End都标记为此索引编号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~
欢迎大家多多支持基金会~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2025-5-12 14:23

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表