原创
IC卡内的文件的存储
2008-12-7 22:43
3274
4
4
分类:
软件与OS
1、文件存储的类别
文件在卡内的存储结构包括两个部分。
* 单个文件的存储,也就是在卡内如何来描述单个文件对象的数据结构,用于COS对单个文件的管理。
* 文件链的存储,也就是描述整个文件系统文件之间联系的数据结构,用于COS对整个文件系统进行检索,查找和定位某一文件。
2、单个文件形式的存储
单个文件在卡内的存储一般包括两部分的内容。
* 一是文件描述块。文件描述块也称为文件属性标识块或者文件头信息,COS用于记录对应文件的属性信息。文件描述块一般包含的是对文件和应用的描述,例如文件大小、文件类型、文件标识等,根据不同文件类型可能有一定差别,主要由COS来进行解释和维护,也可以保留部分字节给应用,由应用来独立使用。文件描述块是管理文件系统最重要的信息。
* 二是文件体。文件体也就是对应文件的实际数据信息。如果是EF文件的话,文件体包含的是EF文件保存的实际数据内容;如果是DF文件的话,文件体保存的是其所有子文件对象,包括子文件的文件描述块和子文件的文件体。文件体是文件系统管理的对象。
一般的,文件描述块和文件体在物理上连续存放,文件体紧跟在文件描述块的后面。
文件描述块的设计是文件系统中最为重要的一个部分,它需要实现考虑到几个方面的内容。
* 文件描述的内容。需要在文件描述块中的内容一方面包括能够描述文件对象的属性,另一方面也可以包括那些文件对象中固有的数据。
* 文件描述块的大小。文件描述块的大小根据所包含的内容来决定,通常在几十个字节左右。此外,还应该保留足够的字节给应用使用和将来的扩展。
* IC卡中存储介质的操作。我们知道,IC卡芯片采用的是EEPROM作为存储介质,这种存储介质在写操作中有一定的控制逻辑,还必须分块来完成。考虑到文件描述块的重要性,最终实现的文件描述块的大小最好能够是数据块大小的整数倍,这样能够最大程度的减少EEPROM的读写操作次数。要做到这一点,在文件空间分配时,对新文件的空间要从一个块的起始位置开始,这样文件数据体的空间也将从一个块的起始位置开始。例如,对DF一般选择32Byte作为文件描述块的大小,如果数据块的大小是32Byte的话,正好是1个数据块,如果数据块的大小是16Byte的话,正好是两个完整的数据块。
需要注意的是,采用这种文件描述块的设计方式可能会造成存储空间的损失,浪费了宝贵的卡片资源。但是从卡片总体来考虑,这点损失是值得的,一方面可以从硬件操作上确保数据的完整性,一方面也能够简化对文件描述块操作可能需要的额外保护所带来实现上的复杂度。另外,从应用角度来说,只要充分考虑到数据空间分配的这一特点,在应用文件结构设计时也能够最大程度的避免这类的空间浪费。
3、文件链形式的存储
文件链是维系整个文件系统结构的重要保障,和IC卡树状的文件系统结构类似,文件链在逻辑上也一个树状的结构。
在开始认识文件链以前,从分析IC卡操作命令中可以得到一些很重要的信息:在IC卡系统中,对文件的操作是单向进行的。也就是说,文件之间的显式的选择操作是不具有可逆性的。从文件树的角度来考虑,可以选择子层的文件,但是从子层一般不进行选择父文件的操作。如果确实存在这类特殊需求的话,也可以通过显式选择MF来实现。所以,在COS中要实现的文件链也只需要一个单向检索功能。
从实现上来说,文件链包括了3个部分的内容。
* MF的入口定位。MF是整个文件系统的根,也是整个文件系统的入口。在卡片复位以后,将自动完成选择MF操作,进入文件系统。
* DF和子文件之间的检索。文件链的这一部分内容用以层次之间文件关系的维护。
* 同一层次文件间的检索。文件链的这一部分内容用以同一层次文件关系的维护。
MF由于其在卡内的特殊性,其起始位置可以在COS中预先指定,例如选择EEPROM的第一个或者第N个数据块作为MF的文件描述块的起始地址,选择MF时就从这一指定位置进入。
后两部分内容其实是文件链的两种不同结构,一般的,同一DF子层下的所有文件都按照其建立的时间顺序在物理上连续存储,按照物理地址的顺序上看相当于是一个中序优先的遍历方式。其实现上有两种不同的形式。
* 显式链接。显式链接也就是在文件描述块中显式地记录逻辑上同一层次的下一个文件的起始位置,在遍历时可以通过这个指针进行。对于DF来说,还必须在文件描述块中记录其子层中逻辑上第一个文件的起始位置。这样才能够将不同层次的文件子链链接在一起。这种链接方式在遍历效率上较高,但是有一定的维护工作,而且占用文件描述块中的空间。
* 隐式链接。隐式链接也就是在卡片中并不显式的专门记录前后文件的起始位置指针。不同关系的文件之间的定位方式由COS来定义和解释。常用的做法是,文件空间的分配按块连续进行,也就是文件与文件之间没有完整的空闲数据块。文件起始位置也就是块的起始位置,子文件的空间分配从父文件数据体的起始位置开始。那么通过文件描述块中记录的文件大小就可以临时计算出逻辑上下一个文件的起始位置,进行文件遍历。采用这种方式时,还需要记录下当前DF的入口地址,重新选择文件以后必须同时更新地址。这种方式在遍历操作上效率较低,尤其是文件较多,遍历的链很长时表现尤为突出,但是这种可能性在IC卡应用中其实很少存在,一般同一层的文件都在10个以内,超过30个的很少见到。但是这种方式不需要专门维护指针,只需要严格按照预定的模式进行空间分配即可,这种方式也不需要占用额外的空间。
在目前对卡片响应要求不是特别严格,而且卡片文件很少的情况下,一般选择第二种方法实现,也就是隐式链接方式。
文章评论(0条评论)
登录后参与讨论