一种嵌入式系统的文件存储方法和装置与流程

文档序号:12597442阅读:347来源:国知局
一种嵌入式系统的文件存储方法和装置与流程

本发明属于文件存储领域,尤其涉及一种嵌入式系统的文件存储方法和装置。



背景技术:

在对安全性要求高的移动式电子终端设备,比如POS机等,由于其操作对象为银行卡等敏感数据,因此,需要严格保证其中的数据的存储安全可靠。

目前为了保证数据的安全可靠,通常的操作方式包括以下步骤:

1、将文件系统数据和日志本身数据写入到日志记录中,也即,在日记记录中即保存了日志本身的数据,还保存了文件系统数据;

2、提交日志数据,使日志数据有效,提交日志数据实际上是对日志记录进行完整性较验,所述完整性较验方法可以为CRC较验方法等;

3、将文件系统数据写入到文件系统。

通过上述方法对文件系统数据进行存储,可有效的保证文件系统数据的安全性。比如,当步骤3之后出现系统意外崩溃,由于文件系统数据已经写入到文件系统,因此数据不会丢失;当步骤2后系统崩溃,因为日志记录有效,所有写入的文件系统数据也是完整的;当步骤2之前出现系统崩溃,即步骤2也没有完成,由于没有对文件系统写入数据,因此文件系统的数据不会发生变化,不会影响文件系统中数据的安全性。

但是,上述数据存储方法中,可以较好的保证文件系统中数据的安全性,但是,由于Monitor等嵌入式操作系统中,使用的文件系统的文件数量支持的 个数有限,最多为256个文件,而在复杂的应用中,可能需要同时使用很多的文件数量。因而,使得现有的文件系统中的文件个数不能满足终端越来越多的文件个数,比如多个共享库的要求。



技术实现要素:

本发明的目的在于提供一种嵌入式系统的文件存储方法,以解决现有技术的文件系统中的文件个数不能满足终端越来越多的文件个数,比如多个共享库的要求的问题。

第一方面,本发明实施例提供了一种嵌入式系统的文件存储方法,所述方法包括:

在嵌入式系统的文件系统中的文件上创建虚拟的文件系统,所述虚拟的文件系统包括文件目录项和存储的文件数据,所述文件目录项包括根目录项和子目录项;

当在所述虚拟的文件系统中更新文件时,更新文件数据并通过所述子目录项记录更新的文件的名称、大小以及文件初始块号。

结合第一方面,在第一方面的第一种可能实现方式中,所述在所述虚拟的文件系统中更新文件包括新增文件操作、删除文件操作和变更文件操作,其中:

所述新增文件操作包括:

判断新增文件的名称是否与子目录项中记录的名称相同;

如果和子目录项中记录的名称相同,则不允许增加;

如果和子目录项中记录的名称不相同,则增加空的子目录项,并在所述空的子目录项中记录新增文件的对应信息;

所述删除文件操作包括:

判断删除文件的名称是否在子目录项中有记录;

如果子目录项中没有记录所述名称,则不允许删除;

如果子目录项中有记录所述名称,则删除文件数据,并设置所述文件对应的子目录项为空的子目录项;

所述更新文件操作包括:

判断更新文件操作中文件的大小以及名称是否发生变化;

如果更新文件操作中文件的大小发生变化,或者文件的名称发生变化,则更新对应的子目录项。

结合第一方面,在第一方面的第二种可能实现方式中,所述方法还包括对嵌入式文件系统的文件数据操作的步骤,包括:

当新增加文件或者删除文件的大小为零,或者文件重命名时,不对文件数据发生变更;

当删除文件的大小非零时,删除该文件所对应的数据块,并将子目录项中的初始块块号置0;

当在文件中添加数据时,则申请空闲数据块,添加并链接至所述文件数据块的末尾。

结合第一方面,在第一方面的第三种可能实现方式中,所述虚拟的文件系统中的文件还设置有属主属性,所述属主属性中记录文件归属的用户信息,所述方法还包括:

当用户访问或者修改所述虚拟的文件系统中的子目录项时,获取所述用户的信息;

将获取的当前用户的信息与待修改的子目录项中记录的在属主属性中记录的文件归属的用户信息比对是否一致;

如果将获取的用户的信息与待修改的子目录项中记录的属主属性中记录的文件归属的用户信息比对不一致,则拒绝访问或者修改。

结合第一方面,在第一方面的第四种可能实现方式中,在所述虚拟的文件系统还设置有缓存区,所述缓存区包括独立的读缓存和写缓存,所述方法还包括:

通过近期最少使用算法(Least-Recently-Used)进行缓存替换,通过写透策略,在数据写入缓存时,将数据写入存储器。

结合第一方面,在第一方面的第五种可能实现方式中,所述虚拟的文件系统还设置有物理块和逻辑块,所述物理块和所述逻辑块通过逻辑-物理映射表相关联,并且,通过写时复制(Copy-On-Write)方式,更新所述文件系统中的数据。

结合第一方面的第五种可能实现方式,在第一方面的第六种可能实现方式中,所述方法还包括:

通过日志数据记录所述逻辑-物理映射表的更新内容。

第二方面,本发明实施例提供了一种嵌入式系统的文件存储装置,其特征在于,所述装置包括:

虚拟文件系统创建单元,用于在嵌入式系统的文件系统中的文件上创建虚拟的文件系统,所述虚拟的文件系统包括文件目录项和存储的文件;

文件更新单元,用于当在所述虚拟的文件系统中更新文件时,更新文件数据并通过所述子目录项记录更新的文件的名称、大小以及文件初始块号。

结合第二方面,在第二方面的第一种可能实现方式中,所述文件更新单元具体包括:新增文件操作子单元、删除文件操作子单元和更新文件操作子单元,其中:

所述新增文件操作子单元用于:

判断新增文件的名称是否与子目录项中记录的名称相同;

如果和子目录项中记录的名称相同,则不允许增加;

如果和子目录项中记录的名称不相同,则增加空的子目录项,并在所述空的子目录项中记录新增文件的对应信息;

所述删除文件操作子单元用于:

判断删除文件的名称是否在子目录项中有记录;

如果子目录项中没有记录所述名称,则不允许删除;

如果子目录项中有记录所述名称,则删除文件数据,并设置所述文件对应的子目录项为空的子目录项;

所述更新文件操作子单元用于:

判断更新文件操作中文件的大小以及名称是否发生变化;

如果更新文件操作中文件的大小发生变化,或者文件的名称发生变化,则更新对应的子目录项。

结合第二方面,在第二方面的第二种可能实现方式中,所述装置还包括文件数据操作单元,用于:

当新增加文件或者删除文件的大小为零,或者文件重命名时,不对文件数据发生变更;

当删除文件的大小非零时,删除该文件所对应的数据块,并将子目录项中的初始块块号置0;

当在文件中添加数据时,则申请空闲数据块,添加并链接至所述文件数据块的末尾。

在本发明中,通过在嵌入式的文件系统中的文件上创建虚拟的文件系统,并通过所述虚拟的文件系统中的文件目录项中的子目录项记录在所述虚拟的文件系统中更新的文件的名称、大小以及初始块号,通过读取虚拟的文件系统的子目录项的数据,即可对所述虚拟的文件系统中的文件数据进行读写操作,通过子目录项的动态增长,使其能够满足现有技术中的嵌入式操作系统,比如Monitor操作系统等的多文件要求,可以使其支持的文件数量不受限制,更好的满足嵌入式系统中应用多个共享库的要求。

附图说明

图1是本发明实施例提供的嵌入式系统的文件存储方法的实现流程图;

图2是本发明实施例提供的文件目录项与数据块对应示意图;

图3是本发明实施例提供的在所述虚拟的文件系统中写入文件的实现流程图;

图4为本发明实施例提供的访问所述虚拟的文件系统中的文件的流程示意图;

图5为本发明实施例提供的嵌入式系统的文件存储装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例的主要目的在于,解决现有技术中存在的由于嵌入式系统,比如Monitor系统中,由于系统可支持的文件数量有限的问题,目前Monitor系统的文件系统只能支持最多256个文件,在一台终端设备,比如POS机中安装多个应用的情况下,在支持动态库的应用中,根据银联U架构的需求,需要提供很多的共享库,并且共享库不能进行合并,必须以单个文件形式存在,Monitor系统可能不能满足多个共享库的文件数目要求,需要扩展文件系统可容纳的文件数量。

除此之外,本发明还进一步提供了保障文件安全性的方法,通过设定文件的属主属性,从而避免其它用户对虚拟的文件系统中的文件的修改或者访问操作。

通过将原数据先从逻辑块读出,更新需要写入的数据到缓存并写入到物理块的空闲区,然后再更新物理块与逻辑块的映射表,使其能够进一步保证数据的完整性。

另外,本发明还包括通过设置缓存区,同时将写入缓存区的数据写入到存储区,避免掉电时造成缓存区的数据丢失,提高数据的可靠性。

下面通过实施例具体进行说明。

图1示出了本发明实施例提供的嵌入式系统的文件存储方法的实现流程,详述如下:

在步骤S101中,在嵌入式系统的文件系统中的文件上创建虚拟的文件系统,所述虚拟的文件系统包括文件目录项和存储的文件数据,所述文件目录项包括根目录项和子目录项。

具体的,本发明实施例中所述虚拟的文件系统,是在文件上实现的文件系统,存储介质不是Flash或者磁盘,而是其它文件系统,比如嵌入式系统中的文件。

所述虚拟的文件系统,可以只存在一个根目录,所有的文件都在根目录下。根目录被当作一个特殊的文件进行处理,其内容是所有其它文件的子目录项。因为目录被当作文件,其大小可以随着文件增多而变大,因此可以支持数目不限的文件数量,其限制只与文件系统空间大小有关。

子目录项必须包含下列几个元素,名称,大小和文件第一个数据块。为了与Monitor文件系统保持兼容以及安全性考虑,还需要包含文件的属主与文件类型两项标记。

文件数据块被组织为链表的形式,可以通过子目录项中的第一个数据块,遍历所有其他的数据块。

在本发明实施例中,所述虚拟的文件系统中,使用的数据单位为簇。文件数据块以簇作为分配单位。为了管理簇,引入FAT(英文全称为File Allocation Table,中文全称为文件配置表)。

由于虚拟的文件系统的大小通常不会太大,在本发明实施例中,可以使用两个字节表示一个簇号,最多只能有0xFFFF个簇,因为0xFFFF被用作文件簇链结束标记,实际簇号最大到0xFFFE。当簇大小为2K时,虚拟的文件系统空间最大不能超过128M-2K。

FAT被用于同时管理文件的数据块链表(簇链)与文件系统的空闲数据块。 FAT有下面的结构。FAT中每个簇的内容为0,表示簇空闲,为FFFF,表示文件最后一个簇。其他数值,表示的是文件下一个簇的编号。

如图2所示为通过FAT管理文件数据块并反应在文件目录项的结构示意图,在图中,文件数据块包括3个簇,分别为3、4、6,且第一个簇号等于3。

在步骤S102中,当在所述虚拟的文件系统中更新文件时,更新文件数据并通过所述子目录项记录更新的文件的名称、大小以及文件初始块号。

其中,所述在所述虚拟的文件系统中更新文件包括新增文件操作、删除文件操作和变更文件操作,其中:

所述新增文件操作包括:

判断新增文件的名称是否与子目录项中记录的名称相同;

如果和子目录项中记录的名称相同,则不允许增加;

如果和子目录项中记录的名称不相同,则增加空的子目录项,并在所述空的子目录项中记录新增文件的对应信息;

所述删除文件操作包括:

判断删除文件的名称是否在子目录项中有记录;

如果子目录项中没有记录所述名称,则不允许删除;

如果子目录项中有记录所述名称,则删除文件数据,并设置所述文件对应的子目录项为空的子目录项;

所述更新文件操作包括:

判断更新文件操作中文件的大小以及名称是否发生变化;

如果更新文件操作中文件的大小发生变化,或者文件的名称发生变化,则更新对应的子目录项。

对文件数据块的操作,主要有三个:释放某个文件占用的数据块,申请文件系统中的空闲数据块,以及遍历属于某个文件的所有数据块。

其中,在新增文件时:

文件的数据不会发生变化,因为根本就没有文件数据。

在删除文件时:

如果文件大小为0,那么文件数据也不会发生变化。

在变更文件时:

如果是文件重命名,文件数据不变化。

如果文件数据发生变化的情况,要么是文件数据大小变化,要么是数据发生变更。

如果是数据大小变化,一种可能是删除一个非0大小的文件,需要遍历文件的所有数据块,把数据块归还给文件系统,当所有数据块都释放后,将所述文件数据对应的子目录项中的初始块块号变为0;第二种可能是在文件末尾添加数据,需要向文件系统申请空闲数据块,添加到文件数据链表的末尾。

如果是已有数据发生变更,则直接更改原有数据块的内容。

上述的数据块,即逻辑块,下面将描述如何把逻辑块数据写入到物理块中。具体可以包括如下步骤:

1、变更文件,写入1块数据(或者小于1块数据);

2、获取逻辑块(可以是以前已经申请的,或者是刚向文件系统申请的)。

3、通过逻辑-物理块映射表,获取物理块。把物理块数据读入缓存,如果没有对应物理块,则认为数据为0;

4、把变更的数据复制到缓存中;

5、通过逻辑-物理块映射表,获取物理块,如果无映射,那么申请一个空闲的物理块,更新映射表(映射表尚未写入存储器,只是修改内存中的映射);如果已有映射,释放已有的物理块(但是旧物理块中的数据不会删除),申请一个新的物理块,更新映射表;

4、把缓存数据写入物理块;

5、当文件的所有变更完成后(包括目录项和数据),使用日志记录映射表更新的内容;

6、把映射表更新的那些数据写入存储器;

7、删除日志。

在本发明实施例中,需要保证一次性写入的数据是完整的,因此,需要使用日志系统来达到此目的。本发明所述的日志文件系统具体介绍如下:

在本发明实施例中,为更好的保障数据的安全,先定义逻辑块和物理块,其中:把虚拟的文件系统的空间,以块为单位进行划分(指数据块,1块通常是2/4/8K字节),数据块集合称为逻辑块。把虚拟的文件系统对应的具体文件以块为单位进行划分,数据块集合称为物理块。

在本发明实施例中,一个逻辑块,如果其不对应任何物理块,那么逻辑块的数据内容全部为0。如果一个物理块,不对应任何逻辑块,表示物理块是空闲的。

要写入逻辑块时,需要先找到一个空闲的物理块与其建立映射关系,最后把数据写入物理块。逻辑块与物理块的对应关系,称为逻辑-物理块映射。

为了保证文件系统的可靠性,需要使用日志,日志会导致写入文件系统的数据量,变成用户写入数据量的两倍。其原理如下。

在不使用逻辑-物理块映射时的日志,需要执行以下的操作。

1.写日志记录,包括日志本身数据以及文件系统数据

2.提交日志

3.写文件系统数据到文件系统

4.删除日志

可以设想,假如在步骤3之后,系统意外崩溃,文件系统的数据已经写入,数据不会出现丢失情况。如果在2后系统崩溃,因为日志数据有效,所以写入数据也是完整的。如果2之前(包括2)步骤没有完成,对文件系统而言,数据根本不会出现变化。在步骤1和3,文件系统数据(用户写入数据)被写入了两次,分别写入日志和文件系统。

当使用逻辑-物理块映射时,需要执行如图3所示的以下的操作:

在步骤S301中,从原逻辑块对应的物理块读出数据缓存;

在步骤S302中,复制更新数据到缓存,然后把缓存中的数据写入空闲物理块;

在步骤S303中,更新逻辑-物理块映射表。

当能够保证步骤S303是一原子操作(表示操作内部的各个步骤,在意外发生时,从用户角度上看,要么全部完成,要么根本一个都没有执行)时,那么写入的数据将是可靠的。如果S303写失败,逻辑块对应的物理块,包括物理块数据都不变,当S303写入成功时,因为S302已经完成,随着新的映射建立,逻辑块对应的物理块和数据将同时发生变化。

写入的冗余数据量是更新逻辑-物理块映射表的数据。对于64M的虚拟的文件系统,映射表需要64K,更新小数据时,如果整个映射表更新,冗余数据量太大,可以通过只写入映射表的变化部分数据来减少冗余数据量。但是当映射表的更新不连续时,需要使用日志记录映射表的离散写入。如果映射表连续写入,可以不用日志,因为嵌入式系统本身是可靠时,一次性写入映射表是安全的。

另外,在本发明实施例中,为了进一步保证虚拟的文件系统中文件安全性,所述虚拟的文件系统中的文件还设置有属主属性,所述属主属性中记录文件归属的用户信息,所述方法还包括如图4所述步骤:

在步骤S401中,当用户访问或者修改所述虚拟的文件系统中的子目录项时,获取所述用户的信息;

在步骤S402中,将获取的当前用户的信息与待修改的子目录项中记录的在属主属性中记录的文件归属的用户信息比对是否一致;

在步骤S403中,如果将获取的用户的信息与待修改的子目录项中记录的属主属性中记录的文件归属的用户信息比对不一致,则拒绝访问或者修改。

在本发明实施例中,通过文件的属主属性的设置,可以实现对文件的访问和修改权限的设置,从而进一步保证虚拟的文件系统的安全性。

另外,在本发明实施例中,还可以在所述虚拟的文件系统还设置有缓存区, 所述方法还包括:当数据写入缓存区时,同时写入虚拟的文件系统所对应的数据存储器。

缓存的加入,主要是为了加速文件的读取速度。缓冲替换策略为LRU(Least-Recently-Used)。每个文件都拥有自己的读缓冲区。

为了保证文件系统的可靠性,写缓冲的类型为写透(Write-Through),每个文件同样有自己的写缓冲区,且只有一个。因为FAT在文件读写时会有频繁的读写操作,所以FAT也有一个专用的读写缓冲区。

图5示出了本发明实施例提供的嵌入式系统的文件存储装置的结构示意图,详述如下:

如图5所示,本发明实施例所述嵌入式系统的文件存储装置,包括:

虚拟文件系统创建单元501,用于在嵌入式系统的文件系统中的文件上创建虚拟的文件系统,所述虚拟的文件系统包括文件目录项和存储的文件;

文件更新单元502,用于当在所述虚拟的文件系统中更新文件时,更新文件数据并通过所述子目录项记录更新的文件的名称、大小以及文件初始块号。

优选的,所述文件更新单元具体包括:新增文件操作子单元、删除文件操作子单元和更新文件操作子单元,其中:

所述新增文件操作子单元用于:

判断新增文件的名称是否与子目录项中记录的名称相同;

如果和子目录项中记录的名称相同,则不允许增加;

如果和子目录项中记录的名称不相同,则增加空的子目录项,并在所述空的子目录项中记录新增文件的对应信息;

所述删除文件操作子单元用于:

判断删除文件的名称是否在子目录项中有记录;

如果子目录项中没有记录所述名称,则不允许删除;

如果子目录项中有记录所述名称,则删除文件数据,并设置所述文件对应的子目录项为空的子目录项;

所述更新文件操作子单元用于:

判断更新文件操作中文件的大小以及名称是否发生变化;

如果更新文件操作中文件的大小发生变化,或者文件的名称发生变化,则更新对应的子目录项。

优选的,所述装置还包括文件数据操作单元,用于:

当新增加文件或者删除文件的大小为零,或者文件重命名时,不对文件数据发生变更;

当删除文件的大小非零时,删除该文件所对应的数据块,并将子目录项中的初始块块号置0;

当在文件中添加数据时,则申请空闲数据块,添加并链接至所述文件数据块的末尾。

图5所述嵌入式系统的文件存储装置与图1至图4所述嵌入式系统的文件存储方法对应,在此不作重复赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元 中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1