购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 CDFS

CDFS即光盘(CD-ROM)文件系统,是为了兼容计算机上现有的文件系统而定义的,专门针对CD格式的一种文件系统。1985年,飞利浦、索尼、苹果、微软等12家公司制定了一个跨平台的CD-ROM文件系统标准,称为High Sierra文件系统,High Sierra文件系统的出现解决了由于CD-ROM文件系统不同而限制信息交换的问题。High Sierra文件系统很快被CD-ROM厂商所接受,并且经国际标准化组织(ISO)进行改进后于1988年颁布,命名为ISO9660,ISO9660标准对CD-ROM光盘上存储数据文件的逻辑格式和结构进行了明确的规定,实现了不同操作系统之间的数据交换。

2.4.1 逻辑存储结构

光盘文件系统的格式包括物理格式和逻辑格式,物理格式规定数据如何存放在光盘上,包括物理扇区地址、数据类型、数据块大小、错误检测和校正码等;逻辑格式又称为文件格式,规定了如何将文件组织到光盘上以及指定文件在光盘上的物理位置,包括文件的目录结构、文件大小及所需的盘片数目。由于CD-ROM与磁盘的特性不同,因此在定义CD-ROM逻辑格式时与定义磁盘的逻辑格式有差异。考虑到CD-ROM的只读性,不需要定义与写有关的操作,如对文件和文件目录进行删除、添加和重命名。

对CD-ROM的逻辑结构的描述从以下几个方面展开。

1.扇区

CD-ROM一个物理扇区共有2352字节,除去12个同步字节、4个记录扇区地址的字节以及288个用作错误检测和校正的字节后,还剩下2048字节用于存放用户数据。将2048字节的数据域定义为一个逻辑扇区,且每个逻辑扇区都有唯一的逻辑扇区号(Logical Sector Number,LSN)进行标识,逻辑扇区的大小也可以自定义,但大小要等于2n,n为正整数。

一个逻辑扇区又可以分成一个或多个逻辑块,每个逻辑块也都有自己的编号(Logical Block Number,LBN)进行标识,逻辑块的大小也可以自定义,但大小要等于2n,且不能超过扇区的大小。

物理扇区、逻辑扇区与逻辑块的关系如图2-10所示。

图2-10 物理扇区、逻辑扇区与逻辑块的关系

2.文件

每个文件可分为一个或者多个文件节,一个文件节放在由许多个逻辑块组成的文件空间里,这些逻辑块被顺序编号,组成的文件空间又称为文件域。一个较大的文件可以分成多个文件节,分别存储在多片CD-ROM盘的文件域中;一个中等大小的文件可以分成若干文件节,存储在一片CD-ROM盘的多个文件域中;小文件不需要分文件域,存放在单个文件节中即可。

光盘上的文件标识符由文件名、文件后缀名和文件版本号组成,其中文件名和文件后缀名是必需的,文件标识符只能由大写字母A~Z、数字0~9以及下划线组成。在DOS环境下,文件名不能超过8个字符,文件后缀名不能超过3个字符。

3.目录

光盘文件系统采用隐式分层目录形式,由于CD-ROM是只读的,无须提供对目录的增加或删除等操作,相对于一般磁盘文件系统的显式分层目录形式,隐式分层目录形式能减少查找文件时的时间花费。在这种目录结构下,文件的目录也被看成一个文件,把包含目录的文件称为目录文件。

目录文件由一组长度可变的目录记录组成,每个目录记录由多个记录域组成,记录域中包含了有关该文件的各项信息,如文件标识、文件段及其扩展属性记录的位置信息等,具体如表2-5所示:

表2-5 目录记录的格式

如果一个文件被分散在多个文件域中时,则需要设置多个目录记录,每个目录记录都需要给出相应的文件域地址,并且标识出该文件域是否是最后一块。每个目录记录不能横跨两个逻辑扇区,当一个目录在这个逻辑扇区中放不下的时候,应该移到后一个逻辑扇区中。

目录文件、目录记录和记录域的关系如图2-11所示。

目录具有层次结构,一个目录层次树中有一个根目录,在基本卷描述符或辅助卷描述符中进行标识,其他每个目录都由其对应的父目录中的一个记录进行标识,另外每个目录也都有一个记录用来指出它的父目录。目录层次树中有多个层,根目录是第一层,目录树的层数不能超过8。

图2-11 目录文件、目录记录和记录域的关系

4.路径表

路径表的提出主要是为了解决目录嵌套层数太深而导致文件查询时间过长的问题,路径表由多个路径记录组成,每个路径记录分别对应根目录和各个子目录,路径记录中包含了各子目录的开始地址即逻辑块号LBN,这样通过路径表就可以快速访问每一个子目录。

具体的目录结构与路径表如图2-12所示。

图2-12 目录结构与路径表的关系

由图2-12可以看出,每张路径表用来描述一个目录树,对于目录树中的每个目录(根目录除外)都有一个相应的记录标识出该目录及其父目录,也给出该目录的位置信息。路径表中的记录编号从1开始,其中第一个记录用来指出根目录及其位置,一个目录的目录号就是路径表中标识该目录的记录的序号。路径表记录的格式如表2-6所示。

表2-6 路径表记录格式

5.卷

记录CD-ROM盘所含信息的结构称为卷,在ISO9660标准中,一张CD-ROM称为一个卷,一个应用软件通常由多个文件组成,对于一个小的应用软件,一卷可能包含多个文件;对于一个中等的应用软件,一卷可能包含一个文件;对于一个较大的应用软件,可能需要多个卷才能包含一个文件。

卷被分为系统区和数据区两部分,其中LSN0~LSN15为系统区,从LSN16开始到最后一个LSN为数据区,数据区主要记录卷描述符、文件目录、数据文件等信息。其中LSN16为卷描述符,主要用于描述卷空间、卷的属性、根目录及路径表的位置、卷空间的划分等信息。卷描述符主要分为五种类型,分别为主卷描述符、辅助卷描述符、卷划分描述符、引导记录、卷描述符集结束符。其中前四种描述符可以任意组合,形成卷描述符序列,卷描述符序列应该遵循以下规则:序列中主卷描述符应该至少出现一次,卷描述符集结束符只能出现一次,并且只能出现在最后。卷描述符的结构如表2-7所示。

表2-7 卷描述符格式

由表2-7可知,卷描述符是一个由2048字节组成的固定长度记录,卷描述符结构根据卷描述符类型的不同而不同,其中第一字节是卷描述符的类型,取值范围如表2-8所示。

表2-8 卷描述符类型区对应值

由表2-8可知,卷描述符类型255(0xff)表示这是卷描述符序列最后的结束符,卷描述符类型4~254是保留的,1表示是主卷描述符,由于主卷描述符提供了卷的信息、特点、文件系统逻辑块大小等一系列的信息,因此需要对主卷描述符的内容进行研究。主卷描述符的具体结构如表2-9所示。

表2-9 主卷描述符结构

其中偏移位置156字节处,有一个长度为34字节的记录域,即根目录的目录记录,通过解析根目录的目录记录,可以找到根目录下的所有文件或目录,从而读取出相应的信息。

6.多字节数据的存储

在ISO9600中,对16位二进制数和32位二进制数分别定义了以下几种存储方式。

(1)16位二进制在CD-ROM上的三种存储方式

·Little Endian Word:两个连续字节,低字节在先。

·Big Endian Word:两个连续字节,高字节在先。

·Both Endian Word:四个连续字节,前两字节用Little Endian Word方式存储,后两字节用Big Endian Word方式存储。

(2)32位二进制在CD-ROM上的三种存储方式

·Little Endian Double Word:四个连续字节,低字节在先。

·Big Endian Double Word:四个连续字节,高字节在先。

·Both Endian Double Word:八个连续字节,前四字节用Little Endian Double Word方式存储,后四字节用Big Endian Double Word方式存储。

2.4.2 CD-ROM上数据的定位

主要有两种方法来定位CD-ROM上的一个文件记录,一种方法是使用路径表进行搜索,另一种方法是搜索完整的目录结构,比较方便和快捷的方法是缓存路径表,然后在需要时下载目录。在这里主要介绍如何通过遍历根目录来进行文件及目录的搜索,具体的流程阐述如下。

CD-ROM上的卷分为系统区和数据区,其中LSN0~LSN15为系统区,LSN16到最后一个LSN为数据区,即光盘的前32768(16×2048)字节为系统区,换成十六进制就是0x8000,即数据区从0x8000开始。文件系统的逻辑扇区格式如表2-10所示。

表2-10 主卷描述符结构

由表2-10所示,数据区从0x8000开始,由于主卷描述符中包含了关于卷的信息、文件系统逻辑块等一系列的内容,因此需要在数据区中找到主卷描述符并且进行解析。数据区开头便是一系列的描述符,描述符的类型通过表2-8中的卷描述符类型区对应值来进行区分,通过判断卷描述符的第一字节是不是“1”可以找到主卷描述符。

找到主卷描述符后,可以通过解析主卷描述符找到对应的目录文件系统,主卷描述符的信息非常多,如表2-9中所示,主要关注偏移156位置处长度为34字节的变量,即157~190字节处的根目录的目录记录。其中几个重要的变量如表2-11所示。

表2-11 目录记录中几个重要变量的含义

由于根目录的目录记录为34字节,即目录记录长度变量为0x22,查找0x8000地址后的内容,与0x22值匹配的记录为对应的根目录信息,如图2-13所示。

图2-13 对应目录记录相应内容

如图2-13所示,0x00008090开始的第一行中“22”对应的地方,表明目录记录长度为0x22,即有34字节,与根目录的目录记录相匹配,查看第34字节位置处,文件标识符为“/”。第3~10字节位置处的8字节表示文件域的地址,这8字节以Both Endian Double Word格式存储,前四字节为小端LBA号(逻辑区块地址),后四字节为大端LBA号,因此“1800000000000018”表明LBA号为0x18,对于目录,指向的是一个数组;对于文件,存储的是相应的文件内容。计算偏移0x18=(24)10,24×2048=0x18×0x800=0xc000,对应找到0x0000c000地址处的内容,如图2-14所示。

图2-14 对应文件域地址相应内容

分析图2-14中的文件信息可知,目录记录长度为0x90,第3~10字节表示对应的文件域地址,1800000000000018表明逻辑区块地址LBA号为0x18,由于指向的LBA号小于等于自身的LBA号,将其略过,直到找到指向LBA号大于自身LBA号的文件,如图2-15所示地址的文件。

图2-15 对应文件域地址相应内容

如图2-15所示,第一行“84”值位置处为起始地址,其后的第3~10字节为对应的文件域地址,1b0000000000001b表明LBA号为0x1b,由此可计算对应文件的偏移地址。第11~18字节为数据长度,0002000000000200表明文件大小为0x200,即文件大小为512字节。第33字节为文件标识符的长度,表示0x0a字节都是文件名,即文件名为“BOOT.BIN;1”,由于ISO存储文件会自动把文件后面加上“;1”,并且将小写转换为大写,因此需要我们自己对得到的文件名进行处理,然后可以根据LBA号和文件大小将对应的文件取出。

利用以上描述的方法,遍历所有的文件,便可以得到CD-ROM上的相关文件目录信息。

2.4.3 CDFS的改进

文件系统一般是操作系统的核心,不同的操作系统其文件系统也不相同,对于CD-ROM,由于它的只读性及其文件组织形式也与其他文件系统有所不同,1988年国际标准化组织(ISO)颁布了ISO9660标准,对CD-ROM光盘上存储数据文件的逻辑格式和结构进行了明确的规定,实现了不同操作系统之间的数据交换。

1.ISO9660

ISO9660是目前被最广泛支持的光盘文件系统,能被所有的主流操作系统识别,支持“8+3”格式的文件名,目录层次深度不能超过8级。由于没有一个操作系统在一开始就被设计成能识别ISO9660标准光盘上存储的数据,因此每个操作系统都需要开发出针对ISO9660的扩展驱动程序,以实现ISO9660与各操作系统之间的信息转换,方便用户直接查看CD-ROM盘上的文件。

微软公司开发了针对DOS操作系统的MSCDEX(Microsoft CD-ROM Extension)扩展驱动程序,与CD-ROM驱动器生产厂家提供的硬件设备驱动程序配合,能够将ISO9660格式光盘上的文件转化为DOS上可以识别的数据。苹果公司开发了专门针对Macintosh操作系统的Foreign File Access扩展驱动程序,可以以HFS(Hierarchical File System)的格式读取ISO9660格式光盘上的数据。由于ISO9660的跨平台通用性,使得用户可以在多种操作系统上访问CD-ROM光盘,推动了CD-ROM的发展和使用。

2.UDF

UDF又称为通用磁盘格式(Universal Disc Format),它主要是针对ISO9660文件结构的CD-R光盘不能追加刻录新的数据的缺点而进行改进的,由于ISO9660文件系统主要针对CD-ROM只读型光盘而制定,因此光盘上的数据和文件结构已经确定,虽然ISO9660文件结构刻录的CD-R光盘允许用户在多种操作系统下进行访问,但是却无法追加刻录新的数据。另外,虽然借助于各种扩展驱动程序,可以实现ISO9660与各操作系统之间的信息转换,但是操作系统无法识别CD-R和CD-RW刻录机,需要使用各种各样的刻录软件才可以实现利用CD-R或CD-RW刻录机进行读写操作。为此1996年OSTA(光学存储技术协会)制定了UDF文件格式,采用包刻录(Packet Writing)技术,将CD-R和CD-RW盘当作硬盘使用,允许用户在光盘上修改和删除文件。

3.Rock Ridge

鉴于ISO9660格式只支持不超过8个字符文件名、不超过3个字符扩展名以及8层文件目录深度的限制,专门制定了Rock Ridge文件格式,通过对ISO9660进行延伸,制定出使CD-ROM能兼容UNIX的文件系统,支持文件名字母大小写、符号字符、长文件名以及超过8层的目录结构。

4.Joliet

微软公司将ISO9660标准进行扩展,制定了Joliet文件系统,可以支持64个字符的长文件名和中文文件名,同时也记录相应的DOS文件名(“8+3”格式),以便于被DOS或低版本的Windows操作系统读取。 Oapk9tnOlk06cb7Rmwjo20i7kb4RMBUw0c28yXFIUw8dQ3sSMBKF/dzOnyIciKkP

点击中间区域
呼出菜单
上一章
目录
下一章
×