智能设备启动过程的数据处理方法及智能设备转让专利

申请号 : CN201410298614.2

文献号 : CN104102695B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 贺宏波孙明勇

申请人 : 晨星半导体股份有限公司

摘要 :

本发明公开了一种智能设备启动过程的数据处理方法及智能设备。其中,智能设备启动过程的数据处理方法包括:智能设备在启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含数据请求所请求的数据,小数据文件是指其数据量小于设定阈值的文件;在页高速缓冲存储器包含请求的数据时,判断数据请求是读数据请求还是写数据请求;在数据请求是读数据请求时,从页高速缓冲存储器拷贝请求的数据至数据请求后返回。通过上述方式,本发明能够缩短开机启动时间。

权利要求 :

1.一种智能设备启动过程的数据处理方法,其特征在于,包括:

智能设备在启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含所述数据请求所请求的数据,所述小数据文件是指其数据量小于设定阈值的文件;

在所述页高速缓冲存储器包含所述请求的数据时,判断所述数据请求是读数据请求还是写数据请求;

在所述数据请求是读数据请求时,从所述页高速缓冲存储器拷贝所述请求的数据至所述数据请求后返回;

所述方法还包括:获取开机所需的小数据文件,将所述小数据文件,以页的形式存储在页高速缓冲存储器中,并采用基数树的形式管理存储在所述页高速缓冲存储器中的所有页。

2.根据权利要求1所述的方法,其特征在于,所述采用基数树的形式管理存储在所述页高速缓冲存储器中的所有页的步骤还包括:将所述页高速缓冲存储器中的所有页都连接到一个双向链表中。

3.根据权利要求1-2任意一项所述的方法,其特征在于,所述方法还包括:

在系统内存不足时,调用释放函数使页高速缓冲存储器释放指定数目的页,所述指定数目的页是从双向链表的表头开始的指定数目的页。

4.根据权利要求3所述的方法,其特征在于,所述页高速缓冲存储器释放指定数目的页的步骤包括:页高速缓冲存储器从所述双向链表中删除所述指定数目的页,并将所述基数树中的所述指定数目的页删除。

5.根据权利要求1所述的方法,其特征在于,所述从所述页高速缓冲存储器拷贝所述请求的数据至所述数据请求后返回的步骤包括:当所述页高速缓冲存储器包含所述请求的数据的部分数据时,若所述页高速缓冲存储器包含的所述部分数据覆盖所述数据请求所请求的数据最开始的连续一段数据或覆盖所述请求的数据结束的一段连续的数据,则将包含的所述部分数据拷贝至所述数据请求中,没有包含的所述请求的数据的部分数据从外存储器设备中读取;若所述页高速缓冲存储器包含的所述部分数据覆盖所述数据请求所请求的数据中间一段或零散部分,直接将所述页高速缓冲存储器中包含的所述部分数据删除,从外存储器设备中读取所述请求的数据。

6.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在所述页高速缓冲存储器没有包含所述请求的数据,且所述数据请求为读数据请求时,从外存储器设备中读取所述请求的数据。

7.根据权利要求5或6所述的方法,其特征在于,所述从外存储器设备中读取所请求的数据的步骤包括:在所述请求的数据小于设定的阈值时,从所述外存储器设备中读取包含所述请求的数据在内的所述阈值大小的数据,从读取的所述阈值大小的数据中将所述请求的数据拷贝至所述数据请求后返回,剩余的数据添加到页高速缓冲存储器;在所述请求的数据大于等于所述设定的阈值时,直接从所述外存储器设备中读取所述请求的数据拷贝至所述数据请求后返回。

8.根据权利要求1所述的方法,其特征在于,所述方法还包括:

在所述页高速缓冲存储器包含所述请求的数据,且所述数据请求为写数据请求时,将所述页高速缓冲存储器包含的所述请求的数据删除,再将所述数据请求所请求的数据写到外存储器设备;在所述页高速缓冲存储器没有包含所述请求的数据,且所述数据请求为写数据请求时,直接将所述请求的数据写入到外存储器设备。

9.一种智能设备,其特征在于,所述智能设备包括查找模块、判断模块以及处理模块,其中:

所述查找模块用于在智能设备启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含所述数据请求所请求的数据,所述小数据文件是指其数据量小于设定阈值的文件;

所述判断模块在所述查找模块查找到在所述页高速缓冲存储器包含所述请求的数据时,判断所述数据请求是读数据请求还是写数据请求;

所述处理模块用于在所述判断模块判断到所述数据请求是读数据请求时,从所述页高速缓冲存储器拷贝所述请求的数据至所述数据请求后返回;

所述智能设备还包括预存模块,所述预存模块用于获取开机所需的小数据文件,将所述小数据文件,以页的形式存储在页高速缓冲存储器中,并采用基数树的形式管理存储在所述页高速缓冲存储器中的所有页。

10.根据权利要求9所述的智能设备,其特征在于,所述预存模块还用于将所述页高速缓冲存储器中的所有页都连接到一个双向链表中。

11.根据权利要求9-10任意一项所述的智能设备,其特征在于,所述智能设备还包括释放模块,所述释放模块用于在系统内存不足时,调用释放函数使页高速缓冲存储器释放指定数目的页,所述指定数目的页是从双向链表的表头开始的指定数目的页。

12.根据权利要求11所述的智能设备,其特征在于,所述释放模块具体用于调用释放函数使页高速缓冲存储器从所述双向链表中删除所述指定数目的页,并将所述基数树中的所述指定数目的页删除。

13.根据权利要求9所述的智能设备,其特征在于,在所述页高速缓冲存储器包含所述请求的数据的部分数据时,若所述页高速缓冲存储器包含的所述部分数据覆盖所述数据请求所请求的数据最开始的连续一段数据或覆盖所述请求的数据结束的一段连续的数据,所述处理模块将包含的所述部分数据拷贝至所述数据请求中,没有包含的所述请求的数据的部分数据从外存储器设备中读取;若所述页高速缓冲存储器包含的所述部分数据覆盖所述数据请求所请求的数据中间一段或零散部分,所述处理模块直接将所述页高速缓冲存储器中包含的所述部分数据删除,从外存储器设备中读取所述请求的数据。

14.根据权利要求9所述的设备,其特征在于,所述处理模块还用于在所述页高速缓冲存储器没有包含所述请求的数据,且所述数据请求为读数据请求时,从外存储器设备中读取所述请求的数据。

15.根据权利要求13或14所述的智能设备,其特征在于,所述处理模块用于在所述请求的数据小于设定的阈值时,从所述外存储器设备中读取包含所述请求的数据在内的所述阈值大小的数据,从读取的所述阈值大小的数据中将所述请求的数据拷贝至所述数据请求后返回,剩余的数据添加到页高速缓冲存储器;或用于在所述请求的数据大于等于所述设定的阈值时,直接从所述外存储器设备中读取所述请求的数据拷贝至所述数据请求后返回。

16.根据权利要求9所述的智能设备,其特征在于,所述处理模块还用于在所述页高速缓冲存储器包含所述请求的数据,且所述数据请求为写数据请求时,将所述页高速缓冲存储器包含的所述请求的数据删除,再将所述数据请求所请求的数据写到外存储器设备;或用于在所述页高速缓冲存储器没有包含所述请求的数据,且所述数据请求为写数据请求时,直接将所述请求的数据写入到外存储器设备。

说明书 :

智能设备启动过程的数据处理方法及智能设备

技术领域

[0001] 本发明涉及一种智能设备启动过程的数据处理方法及智能设备。

背景技术

[0002] 随着智能设备功能的不断增加,其上的软件越来越复杂,开机时间随之也变的越来越长。因为系统比较庞大,开机时就需要从存储器上读取更多的资料,而更多的外存储器访问无疑会增加系统启动时间。
[0003] 对于开机过程中需要读取的大文件,文件系统本身提供的预读方法已经提供了数据的预加载了:当上层读了前几笔资料后,文件系统会自动读取后面的资料,以实现处理器的资料处理跟外存储器数据读取的并发进行,减少了能够影响到开机时间的外存储器访问,从而整体上提高系统性能。但是文件系统的预读是针对每个文件内部的,不能跨不同的文件。所以,对于开机过程中的大量小文件(小于4K bytes)就无能为力了。
[0004] 有鉴于此,如今迫切需要设计一种新的针对智能设备启动过程的数据处理方法,以便解决现有系统开机慢的缺陷。

发明内容

[0005] 本发明主要解决的技术问题是提供一种智能设备启动过程的数据处理方法,能够缩短开机启动时间。
[0006] 为解决上述技术问题,本发明采用的一个技术方案是:提供一种智能设备启动过程的数据处理方法,包括:智能设备在启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含所述数据请求所请求的数据,所述小数据文件是指其数据量小于设定阈值的文件;在所述页高速缓冲存储器包含所述请求的数据时,判断所述数据请求是读数据请求还是写数据请求;在所述数据请求是读数据请求时,从所述页高速缓冲存储器拷贝所述请求的数据至所述数据请求后返回。
[0007] 为解决上述技术问题,本发明采用的另一个技术方案是:提供一种智能设备,所述智能设备包括查找模块、判断模块以及处理模块,其中:所述查找模块用于在智能设备启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含所述数据请求所请求的数据,所述小数据文件是指其数据量小于设定阈值的文件;所述判断模块在所述查找模块查找到在所述页高速缓冲存储器包含所述请求的数据时,判断所述数据请求是读数据请求还是写数据请求;所述处理模块用于在所述判断模块判断到所述数据请求是读数据请求时,从所述页高速缓冲存储器拷贝所述请求的数据至所述数据请求后返回。
[0008] 本发明的有益效果是:区别于现有技术的情况,本发明通过开机需要读取数据的时候,先从预存有开机所需的小数据文件的页高速缓冲存储器中查找,如果查找到就直接从页高速缓冲存储器中获取需要读取的数据。通过这样的方式,能够加速智能设备在开机过程中小数据文件的读取,使得系统开机速度加快。

附图说明

[0009] 图1是本发明数据处理系统的结构示意图;
[0010] 图2是本发明智能设备启动过程的数据处理方法一个实施方式的流程图;
[0011] 图3是本发明智能设备启动过程的数据处理方法一个实施方式中数据请求的结构示意图;
[0012] 图4是本发明智能设备启动过程的数据处理方法一个实施方式中数据请求的逻辑视图;
[0013] 图5是本发明智能设备启动过程的数据处理方法一个实施方式中页高速缓冲存储器的基数树示意图;
[0014] 图6是本发明智能设备一个实施方式的结构示意图。

具体实施方式

[0015] 首先,针对本发明实现的数据处理系统进行一个简单的介绍,请参阅图1,图1是本发明智能设备启动过程的数据处理系统的结构示意图,本发明智能设备启动过程的数据处理系统包括智能设备100以及外存储器设备110,其中,智能设备100包括用户应用程序、文件系统、通用块层以及块设备,当文件系统需要数据时,将发数据请求到通用块层,在通用块层数据请求将被构造为读/写数据请求,最终这些读/写数据请求将被按照一定规则放到目标设备(即图中的块设备)所关联的队列中,最终由块设备来进行处理。本发明智能设备启动过程的数据处理方法的实现处于数据处理系统的块设备,这样便于根据不同的物理设备对于其实现以及参数做出调整,达到最好的性能。
[0016] 其中,上述的外存储器设备可以是EMMC,表1是本发明对于市场上几个主流EMMC产品的读性能分析。从表1中可以看出,随着读取单位的增大,速度也随着成正比例增加,这一关系一直会持续到比较大的读取单元如16K或者32K。也就是说,读4KB的数据跟读16KB比特数据需要的时间一样。这样当文件系统层需要小块的数据时,块设备就可以在不增加时间的前提下,读取更多的数据提前存储起来。
[0017] 表1:EMMC产品的读取性能分析表
[0018]
[0019] 请参阅图2,图2是本发明智能设备启动过程的数据处理方法一个实施方式的流程图,本实施方式的智能设备启动过程的数据处理方法包括:
[0020] S101:智能设备在启动过程中检测到数据请求;
[0021] 智能设备在启动过程中,检测到数据请求。本发明实施方式中数据请求的数据结构如图3所示,每个数据请求是由若干个BIO(Block Input Output,块输入和输出),每个BIO由若干个结构体(bio_vec)组成,bio_vec包含一个page(页)。逻辑上可以认为每个数据请求为图4所示,这些页在物理外存储器上是一组连续存放的数据,对于本发明中的外存储器设备,也就是块号是连续的。
[0022] 其中,本发明实施方式的智能设备启动过程的数据处理方法还可以包括在页高速缓冲存储器中预存开机所需小数据文件的步骤。即获取开机所需的小数据文件,将小数据文件连续的存放到页高速缓冲存储器中。这里的小数据文件是指其数据量小于设定阈值的文件。具体地,将小数据文件,以页的形式存储在页高速缓冲存储器中,并采用基数树的形式管理存储在所述页高速缓冲存储器中的所有页。
[0023] 其中,以安卓智能电视为例,针对安卓智能电视的文件系统为ext4本实施方式可以通过以下方式获取开机所需小数据文件:修改对应文件系统的打开文件(Open File)函数,将所打开文件根据大小、文件名过滤出来,过滤出小于设定阈值的数据文件即为开机所需的小数据文件。然后是修改安卓的文件系统中扫描目录的规范(Code),使得它优先处理开机需要的小数据文件,这样小数据文件就会被连续的放到一起,增加从页高速缓冲存储器中查找到请求数据的命中率。
[0024] 也就是说,需要预读的开机所需的小数据文件是以页的形式存储在基数树中的(如图5所示),这个页对应的主键(Key)值就是所存储块的块号。因为基数树是高叉搜索树,所以给出Key值,就可以立即得到页高速缓冲存储器中相应页的指针。如果找不到,就返回空指针。
[0025] 对于基数树的操作本实施方式提供了4组操作:查询单个页是否存在于页高速缓冲存储器中,查询从某个块号起始的N个页是否存在于页高速缓冲存储器中,添加一个页到页高速缓冲存储器中,从页高速缓冲存储器中移除某个页。
[0026] 为了便于回收页高速缓冲存储器中的页,在构造页高速缓冲存储器的同时,也将页高速缓冲存储器中的所有页都连接到一个双向链表中。比如可以使用页数据结构中的数据项链头表结点struct list_head lru将页串进双向链表中。而这个双向链表的操作存在于3个地方:当添加新的页到基数树的时候,同时需要将这些页加到双向链表的末尾;从基数树删除页的时候,同时从双向链表中拿掉对应的页;最后是当系统内存紧张时,会调用注册的释放函数内存收缩器memory shrinker。对于本发明中的memory shrinker,就是从双向链表的头部开始,释放指定数目的页,系统调用释放函数的时候会指定这个参数,同时也需要将基数树中的对应的页删除掉。
[0027] 由于双向链表可能同时被两个不同的进程(Process)操作,所以可以通过锁mutex来保护。而基数树、双向链表的初始化以及释放函数的注册,在系统初始化外存储器设备的时候完成。
[0028] 在系统内存不足时,可以调用释放函数使页高速缓冲存储器释放指定数据的页,该指定数据的页是从双向链表的表头开始的指定数据的页。具体地,当内存紧张时,遍历页高速缓冲存储器的链表,从链表头开始释放一定数量的页给系统。
[0029] S102:查找预存有开机所需小数据文件的页高速缓冲存储器是否包含数据请求所请求的数据;
[0030] 对于数据请求,智能设备首先在页高速缓冲存储器(Page Cache)中查找数据请求所请求的数据。其中,页高速缓冲存储器预先存有开机所需的小数据文件,所述小数据文件是指其数据量小于设定阈值的文件。设定的阈值可以根据需要自行设定,本发明实施方式采用16K作为设定阈值。
[0031] 查找页高速缓冲存储器中是否包含有数据请求所请求的数据,如果包含则进行步骤S103,否则进行步骤S104。
[0032] S103:判断数据请求是读数据请求还是写数据请求;
[0033] 在页高速缓冲存储器中包含有数据请求所请求的数据时,进一步判断数据请求是读数据请求还是写数据请求,在数据请求为读数据请求时,进行步骤S105,在数据请求为写数据请求时,进行步骤S106。
[0034] S105:从页高速缓冲存储器拷贝请求的数据至数据请求后返回;
[0035] 当页高速缓冲存储器中包含数据请求所请求的数据,且所述数据请求为读数据请求时,从页高速缓冲存储器中拷贝请求的数据至数据请求后返回。
[0036] 其中,从页高速缓冲存储器中拷贝请求的数据至数据请求后返回的的具体实现过程又分为两种情况:
[0037] 第一种情况:当页高速缓冲存储器中包含数据请求的所有请求的数据,则直接从页高速缓冲存储器中将请求的数据拷贝至数据请求后返回。
[0038] 第二种情况:当页高速缓冲存储器中包含请求的数据的部分数据,这时候要进一步判断页高速缓冲存储器中所包含的部分数据的具体情况,若页高速缓冲存储器包含的部分数据覆盖数据请求所请求的数据最开始的连续一段数据或覆盖请求的数据结束的一段连续的数据,则将包含的部分数据拷贝至数据请求中,没有包含的请求的数据的部分数据从外存储器设备中读取;若页高速缓冲存储器包含的部分数据覆盖数据请求所请求的数据中间一段或零散部分,直接将页高速缓冲存储器中包含的部分数据删除,从外存储器设备中读取请求的数据。
[0039] 针对第二种情况,事实上就是针对查找到的部分数据在数据请求中所处的位置进行分析然后再决定如何处理。只对查找到的部分数据是数据请求的前端或者后端连续的部分做处理。比如查找到的部分数据从第0页(page 0)开始的若干个页,或者是从最后第n页(page n)开始往前连续的若干个页,这时就将查找到的部分数据拷贝进数据请求返回给上层。如果查找到的部分数据是数据请求中间的连续的若干页或者零散的页(也就是不包含page 0和page n),直接将这部分数据从页高速缓冲存储器中删除,因为把中间的页拷贝进数据请求返回的话,这样就会导致从外存储器设备读取请求的剩余部分数据时,前端和后端至少两次读取,一般情况下回导致性能下降,反而没有做一次连续的读取操作速度快。
[0040] 其中,从外存储器设备中读取所请求的数据的具体实现过程为:首先要判断需要从外存储器设备读取的数据是否小于设定的阈值,在请求的数据小于设定的阈值时,从外存储器设备中读取包含请求的数据在内的阈值大小的数据,从读取的阈值大小的数据中将请求的数据拷贝至数据请求后返回,剩余的数据添加到页高速缓冲存储器;在请求的数据大于等于设定的阈值时,直接从外存储器设备中读取请求的数据拷贝至数据请求后返回。
[0041] 比如以本实施方式以设定的阈值为16KB为例,如果需要从外存储器设备读取的数据大于等于16K,直接从外存储器设备读取。当需要从外存储器设备读取的数据小于16K,就从外存储器设备读取16K的数据,从这16K的数据中将请求的数据拷贝至数据请求中返回给上层,多读出来的那一部分数据,向操作系统内核(Kernel)申请页,将数据拷贝进去,然后将这些页添加到页高速缓冲存储器中。
[0042] S106:将页高速缓冲存储器包含的请求的数据删除,再将数据请求所请求的数据写到外存储器设备;
[0043] 如果页高速缓冲存储器中包含数据请求所请求的数据,且所述数据请求为写数据请求时,将页高速缓冲存储器包含的请求的数据删除,再将数据请求所请求的数据写到外存储器设备。
[0044] S104:判断数据请求是读数据请求还是写数据请求;
[0045] 在页高速缓冲存储器中没有包含数据请求所请求的数据时,也要进一步判断所述数据请求是读数据请求还是写数据请求。在数据请求为读数据请求时,进行S107,在数据请求为写数据请求时,进行步骤S108。
[0046] S107:从外存储器设备中读取请求的数据;
[0047] 如果页高速缓冲存储器中没有包含数据请求所请求的数据,且所述数据请求为读数据请求时,从外存储器设备中读取请求的数据。其中,从外存储器设备中读取请求的数据的具体实现流程跟上述描述的方式一样,在此不再赘述。
[0048] S108:直接将请求的数据写入到外存储器设备;
[0049] 如果页高速缓冲存储器中没有包含数据请求所请求的数据,且所述数据请求为写数据请求时,直接将请求的数据写到外存储器设备中。
[0050] 其中,本发明提供的实施方式中,在进行举例或者具体描述的时候,都以智能电视作为举例说明,但这并不用以限制本发明所要求保护的范围。事实上,本发明的数据处理的方法同样可以适用于其他的智能设备,如笔记本电脑、平板电脑等等。
[0051] 上述实施方式的描述,可以理解,本发明通过开机需要读取数据的时候,先从预存有开机所需的小数据文件的页高速缓冲存储器中查找,如果查找到就直接从页高速缓冲存储器中获取需要读取的数据。通过这样的方式,能够加速智能设备在开机过程中小数据文件的读取,使得系统开机速度加快。
[0052] 通过以上方法实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可以借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但是很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等等)执行本发明各个实施方式所述方法的全部或部分步骤。而前述存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0053] 请参阅图6,图6是本发明智能设备一个实施方式的结构示意图,本实施方式的智能设备200包括查找模块21、判断模块22以及处理模块23,其中:
[0054] 查找模块21用于在智能设备启动过程中检测到数据请求时,查找预存有开机所需小数据文件的页高速缓冲存储器是否包含数据请求所请求的数据,小数据文件是指其数据量小于设定阈值的文件;
[0055] 智能设备在启动过程中,检测到数据请求。对于数据请求,查找模块21首先在页高速缓冲存储器(Page Cache)中查找数据请求所请求的数据。其中,页高速缓冲存储器预先存有开机所需的小数据文件,所述小数据文件是指其数据量小于设定阈值的文件。设定的阈值可以根据需要自行设定,本发明实施方式采用16K作为设定阈值。
[0056] 判断模块22在查找模块21查找到在页高速缓冲存储器包含请求的数据时,判断数据请求是读数据请求还是写数据请求;
[0057] 在查找模块21查找到页高速缓冲存储器中包含有数据请求所请求的数据时,判断模块22进一步判断数据请求是读数据请求还是写数据请求,将判断结果输出给处理模块23。
[0058] 处理模块23用于在判断模块22判断到数据请求是读数据请求时,从页高速缓冲存储器拷贝请求的数据至数据请求后返回。
[0059] 处理模块23用于当页高速缓冲存储器中包含数据请求所请求的数据,且所述数据请求为读数据请求时,从页高速缓冲存储器中拷贝请求的数据至数据请求后返回。
[0060] 其中,从页高速缓冲存储器中拷贝请求的数据至数据请求后返回的的具体实现过程又分为两种情况:
[0061] 第一种情况:当页高速缓冲存储器中包含数据请求的所有请求的数据,则处理模块23直接从缓冲存储器中将请求的数据拷贝至数据请求后返回。
[0062] 第二种情况:当页高速缓冲存储器中包含请求的数据的部分数据,这时候要进一步判断页高速缓冲存储器中所包含的部分数据的具体情况,若页高速缓冲存储器包含的部分数据覆盖数据请求所请求的数据最开始的连续一段数据或覆盖请求的数据结束的一段连续的数据,则处理模块23将包含的部分数据拷贝至数据请求中,没有包含的请求的数据的部分数据从外存储器设备中读取;若页高速缓冲存储器包含的部分数据覆盖数据请求所请求的数据中间一段或零散部分,处理模块23直接将页高速缓冲存储器中包含的部分数据删除,从外存储器设备中读取请求的数据。
[0063] 针对第二种情况,事实上就是针对查找到的部分数据在数据请求中所处的位置进行分析然后再决定如何处理。只对查找到的部分数据是数据请求的前端或者后端连续的部分做处理。比如查找到的部分数据从第0页(page 0)开始的若干个页,或者是从最后第n页(page n)开始往前连续的若干个页,这时就将查找到的部分数据拷贝进数据请求返回给上层。如果查找到的部分数据是数据请求中间的连续的若干页或者零散的页(也就是不包含page 0和page n),直接将这部分数据从页高速缓冲存储器中删除,因为把中间的页拷贝进数据请求返回的话,这样就会导致从外存储器设备读取请求的剩余部分数据时,前端和后端至少两次读取,一般情况下回导致性能下降,反而没有做一次连续的读取操作速度快。
[0064] 其中,处理模块23从外存储器设备中读取所请求的数据的具体实现过程为:首先要通过判断模块22判断需要从外存储器设备读取的数据是否小于设定的阈值,在请求的数据小于设定的阈值时,处理模块23从外存储器设备中读取包含请求的数据在内的阈值大小的数据,从读取的阈值大小的数据中将请求的数据拷贝至数据请求后返回,剩余的数据添加到页高速缓冲存储器;在请求的数据大于等于设定的阈值时,处理模块23直接从外存储器设备中读取请求的数据拷贝至数据请求后返回。
[0065] 比如以本实施方式以设定的阈值为16KB为例,如果需要从外存储器设备读取的数据大于等于16K,直接从外存储器设备读取。当需要从外存储器设备读取的数据小于16K,就从外存储器设备读取16K的数据,从这16K的数据中将请求的数据拷贝至数据请求中返回给上层,多读出来的那一部分数据,向操作系统内核(Kernel)申请页,将数据拷贝进去,然后将这些页添加到页高速缓冲存储器中。
[0066] 处理模块23还用于在页高速缓冲存储器没有包含请求的数据,且数据请求为读数据请求时,从外存储器设备中读取所述请求的数据。
[0067] 如果页高速缓冲存储器中没有包含数据请求所请求的数据,且所述数据请求为读数据请求时,处理模块23从外存储器设备中读取请求的数据。其中,从外存储器设备中读取请求的数据的具体实现流程跟上述描述的方式一样,在此不再赘述。
[0068] 另外,处理模块23还用于在页高速缓冲存储器包含请求的数据,且数据请求为写数据请求时,将页高速缓冲存储器包含的请求的数据删除,再将数据请求所请求的数据写到外存储器设备;或用于在页高速缓冲存储器没有包含请求的数据,且数据请求为写数据请求时,直接将请求的数据写入到外存储器设备。
[0069] 如果页高速缓冲存储器中包含数据请求所请求的数据,且所述数据请求为写数据请求时,处理模块23将页高速缓冲存储器包含的请求的数据删除,再讲数据请求所请求的数据写到外存储器设备。
[0070] 如果页高速缓冲存储器中没有包含数据请求所请求的数据,且所述数据请求为写数据请求时,处理模块23直接将请求的数据写到外存储器设备中。
[0071] 请继续参阅图6,在本发明智能设备另一种可能的实施方式中,智能设备200还可以进一步包括预存模块24,预存模块24用于获取开机所需的小数据文件,将小数据文件连续的存放到页高速缓冲存储器中。
[0072] 具体地,预存模块24用于将小数据文件,以页的形式存储在页高速缓冲存储器中,并采用基数树的形式管理存储在页高速缓冲存储器中的所有页。更进一步地,预存模块24还用于将页高速缓冲存储器中的所有页都连接到一个双向链表中。
[0073] 其中,以安卓智能电视为例,针对安卓智能电视的文件系统为ext4本实施方式可以通过以下方式获取开机所需小数据文件:修改对应文件系统的打开文件(Open File)函数,将所打开文件的整个Pathdump出来,过滤出小于设定阈值的数据文件即为开机所需的小数据文件。然后是修改安卓的文件系统中扫描目录的规范(Code),使得它优先处理开机需要的小数据文件,这样小数据文件就会被连续的放到一起,增加从页高速缓冲存储器中查找到请求数据的命中率。
[0074] 也就是说,需要预读的开机所需的小数据文件是以页的形式存储在基数树中的,这个页对应的主键(Key)值就是所存储块的块号。因为基数树是高叉搜索树,所以给出Key值,就可以立即得到页高速缓冲存储器中相应页的指针。如果找不到,就返回空指针。
[0075] 对于基数树的操作本实施方式提供了4组操作:查询单个页是否存在于页高速缓冲存储器中,查询从某个块号起始的N个页是否存在于页高速缓冲存储器中,添加一个页到页高速缓冲存储器中,从页高速缓冲存储器中移除某个页。
[0076] 为了便于回收页高速缓冲存储器中的页,在构造页高速缓冲存储器的同时,也将页高速缓冲存储器中的所有页都连接到一个双向链表中。比如可以使用页数据结构中的数据项struct list_head lru将页串进双向链表中。而这个双向链表的操作存在于3个地方:当添加新的页到基数树的时候,同时需要将这些页加到双向链表的末尾;从基数树删除页的时候,同时从双向链表中拿掉对应的页;最后是当系统内存紧张时,会调用注册的释放函数memory shrinker。对于本发明中的memory shrinker,就是从双向链表的头部开始,释放指定数目的页,系统调用释放函数的时候会指定这个参数,同时也需要将基数树中的对应的页删除掉。
[0077] 由于双向链表可能同时被两个不同的进程(Process)操作,所以可以通过mutex来保护。而基数树、双向链表的初始化以及释放函数的注册,在系统初始化外存储器设备的时候完成。
[0078] 更进一步地,请继续参阅图6,在本发明智能设备的另一种可能的实现方式中,智能设备200还可以进一步包括释放模块25,释放模块25用于在系统内存不足时,调用释放函数使页高速缓冲存储器释放指定数目的页,指定数目的页是从双向链表的表头开始的指定数目的页。
[0079] 具体地,释放模块25用于调用释放函数使页高速缓冲存储器从双向链表中删除所述指定数目的页,并将基数树中的指定数目的页删除。
[0080] 上述本发明智能设备启动过程的数据处理方法及智能设备实施方式的具体阐述,可以理解,本发明通过预先将开机所需的小数据文件预读到页高速缓冲存储器中,在开机需要读数据的时候,先从页高速缓冲存储器中查找,如果查找到就直接从页高速缓冲存储器中获取需要读取的数据。该方法针对于开机需要写入数据的时候同样适用,在页高速缓冲存储器中有需要写入的数据则直接删除页高速缓冲存储器中的相应的页,然后直接将数据写入外存储器设备。通过这样的方式,能够加速智能设备在开机过程中小数据文件的读取,使得系统开机速度加快。从而解决软件越来越庞大,带来的开机变慢的问题。
[0081] 在本发明所提供的几个实施方式中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0082] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
[0083] 另外,在本发明各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0084] 以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。