CN104133691B - 加速启动的方法及装置 - Google Patents
加速启动的方法及装置 Download PDFInfo
- Publication number
- CN104133691B CN104133691B CN201410187308.1A CN201410187308A CN104133691B CN 104133691 B CN104133691 B CN 104133691B CN 201410187308 A CN201410187308 A CN 201410187308A CN 104133691 B CN104133691 B CN 104133691B
- Authority
- CN
- China
- Prior art keywords
- data
- host process
- application
- prefetch
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4403—Processor initialisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种加速启动的方法及装置,属于互联网领域。该方法包括:当监控到应用的登录进程启动时,获取该应用的主进程对应的预取数据,并将获取的预取数据加载到缓存中,该预取数据根据对该应用的主进程的历史启动过程得到;当监控到登录进程启动完成或监控到该应用的主进程启动时,停止获取该应用的主进程对应的预取数据;根据缓存中加载的预取数据,完成该主进程的启动过程。该装置包括:获取模块、停止模块和启动模块。本发明加速了该应用的启动,并且预取数据的过程是和登录进程同时进行的,当该登录进程登录完成时或启动主进程时,停止该预取数据的过程,并没有耽误主进程的启动过程,进而不会延长该主进程的启动过程。
Description
技术领域
本发明涉及互联网领域,特别涉及一种加速启动的方法及装置。
背景技术
随着互联网技术的快速发展,开发者开发的应用的种类越来越多,用户使用的应用也越来越多。当用户使用某个应用时,为了较快地启动该应用,需要对该应用的启动过程进行加速。
目前加速启动的过程具体为:当终端监控到该应用启动时,挂起该应用启动过程中的进程。根据该进程的名称和该进程的内容数据,从该终端的磁盘文件中查找对应的预取信息,该预取信息是根据监控预设时间段内该进程从磁盘中读取的数据得到。如果查找到,则解析该预取信息,并从该预取信息中获取缓存中没有加载的数据的路径、偏移值和长度值。根据获取的路径、偏移值和长度值,预取对应的数据,并将预取的数据加载到该缓存中。此时,恢复该进程,使该进程从该缓存中读取需要的数据,如果该缓存中没有需要的数据,则可以从磁盘中读取需要的数据。由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以实现了加速启动。
由于不同的进程启动过程中花费的时间不同,所以针对不同的进程,终端根据预取信息预取数据时,只能预取到预设时间段内的数据时,当该进程启动过程中花费的时间小于该预设时间段时,终端会预取到该进程加载所需的数据之外的其他数据,当该进程启动过程中花费的时间大于该预设时间段时,终端会预取到的数据少于该进程加载所需的数据。并且当进程启动时,终端会首先挂起该进程,当预取数据加载完成后再恢复该进程,如果预取数据的准确率较低,会导致预取数据的命中率较低,此时会延长该进程的启动过程。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种加速启动的方法及装置。所述技术方案如下:
一方面,提供了一种加速启动的方法,所述方法包括:
当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中,所述预取数据根据对所述应用的主进程的历史启动过程得到;
当监控到所述登录进程启动完成或监控到所述应用的主进程启动时,停止获取所述应用的主进程对应的预取数据;
根据所述缓存中加载的预取数据,完成所述主进程的启动过程。
另一方面,提供了一种加速启动的装置,所述装置包括:
第一获取模块,用于当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中,所述预取数据根据对所述应用的主进程的历史启动过程得到;
停止模块,用于当监控到所述登录进程启动完成或监控到所述应用的主进程启动时,停止获取所述应用的主进程对应的预取数据;
启动模块,用于根据所述缓存中加载的预取数据,完成所述主进程的启动过程。
在本发明实施例中,该应用具有固定的模式,即先启动该应用的登录进程,当该登录进程登录完成时,该登录进程拉起该应用的主进程,所以,在该登录进程刚开始启动时,获取该主进程的预取数据,并将该预取数据加载到缓存中。为了避免IO请求之间产生冲突,在该登录进程登录完成时或主进程启动时,停止获取该预取数据。此时,该应用的主进程从该缓存中加载所需的数据,由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以加速了该应用的启动。并且,该主进程的预取数据是根据对该应用的主进程的历史启动过程得到的,所以该预取数据是该主进程的完整启动过程中读取的数据。此外,预取数据的过程是和登录进程同时进行的,当该登录进程登录完成时或启动主进程时,停止该预取数据的过程,并没有耽误主进程的启动过程,进而不会延长该主进程的启动过程。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种加速启动的方法流程图;
图2是本发明实施例提供的另一种加速启动的方法流程图;
图3是本发明实施例提供的一种生成IO训练数据的示意图;
图4是本发明实施例提供的一种应用显示界面示意图;
图5是本发明实施例提供的一种加速启动的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种加速启动的方法流程图,参见图1,该方法包括:
步骤101:当监控到应用的登录进程启动时,获取该应用的主进程对应的预取数据,并将该预取数据加载到缓存中,该预取数据根据对该应用的主进程的历史启动过程得到;
步骤102:当监控到该登录进程启动完成或监控到该应用的主进程启动时,停止获取该应用的主进程对应的预取数据;
步骤103:根据该缓存中加载的预取数据,完成该主进程的启动过程。
可选地,获取该应用的主进程对应的预取数据,并将该预取数据加载到缓存中,包括:
根据该登录进程标识,获取该应用的主进程对应的预取信息;
根据该预取信息,从磁盘文件中读取对应的数据;
将读取的数据确定为该应用的主进程对应的预取数据,并将该预取数据加载到缓存中。
可选地,根据该登录进程标识,获取该应用的主进程对应的预取信息,包括:
根据该登录进程标识,获取该应用的主进程标识;
根据该主进程标识,确定该主进程对应的预取信息的存储路径;
根据该主进程对应的预取信息的存储路径,获取该主进程对应的预取信息。
可选地,根据该预取信息,从磁盘文件中读取对应的数据,包括:
对该预取信息进行解析,得到解析后的预取信息;
将解析后的预取信息组成特定数据结构的数据信息,该数据信息包括该应用程序的主进程所需数据的文件路径、偏移值和长度值;
根据该文件路径、偏移值和长度值,从磁盘文件中读取对应的数据。
进一步地,该方法还包括:
在该应用的主进程启动过程中,根据该预取信息对应的总数据大小和该主进程已加载数据大小,计算该主进程的启动进度;
根据该主进程的启动已耗时间、该主进程已加载数据大小、预取数据大小和该启动进度,计算该主进程已加速时间;
将该主进程的启动进度和已加速时间进行显示。
可选地地,当监控到应用的登录进程启动时,获取该应用的主进程对应的预取数据,并将该预取数据加载到缓存中之前,还包括:
对该应用的主进程的历史启动过程进行监控,得到该应用的启动数据;
根据该启动数据,获取该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值;
根据该启动数据所在文件的文件路径、该偏移值和该长度值,生成预取信息。
可选地,当监控到应用的登录进程启动时,获取该应用的主进程对应的预取数据,并将获取的预取数据加载到缓存中之前,还包括:
接收IO(input/output,输入/输出)训练数据,该IO训练数据包括文件数据和该主进程对应的文件数据所在文件的相对文件路径;
根据该主进程在终端中的安装路径,将该主进程对应的文件数据所在文件的相对文件路径转换为对应的绝对文件路径;
将该文件数据转换为对应的偏移值和长度值;
根据该绝对文件路径、偏移值和长度值,生成预取信息。
在本发明实施例中,该应用具有固定的模式,即先启动该应用的登录进程,当该登录进程登录完成时,该登录进程拉起该应用的主进程,所以,在该登录进程刚开始启动时,获取该主进程的预取数据,并将该预取数据加载到缓存中。为了避免IO请求之间产生冲突,在该登录进程登录完成时或主进程启动时,停止获取该预取数据。此时,该应用的主进程从该缓存中加载所需的数据,由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以加速了该应用的启动。并且,该主进程的预取数据是根据对该应用的主进程的历史启动过程得到的,所以该预取数据是该主进程的完整启动过程中读取的数据。此外,预取数据的过程是和登录进程同时进行的,当该登录进程登录完成时或启动主进程时,停止该预取数据的过程,并没有耽误主进程的启动过程,进而不会延长该主进程的启动过程。
图2是本发明实施例提供的一种加速启动的方法流程图,参见图2,该方法包括:
步骤201:当监控到应用的登录进程启动时,获取该应用的主进程对应的预取信息,该预取信息根据对该应用的主进程的历史启动过程得到。
具体地,当监控到应用的登录进程启动时,根据该登录进程标识,获取该应用的主进程标识;根据该主进程标识,确定该主进程对应的预取信息的存储路径;根据该主进程对应的预取信息的存储路径,获取该主进程对应的预取信息。
其中,根据该登录进程标识,获取该应用的主进程标识的具体操作可以为:根据该登录进程标识,从已存储的应用标识与登录进程标识之间的对应关系中获取对应的应用标识;根据该应用标识,从已存储的应用标识与主进程标识之间的对应关系中获取对应的主进程标识。
其中,当登录进程和主进程启动时,操作系统会创建该登录进程和主进程,并且操作系统会向该登录进程和主进程分别分配一个标识,即登录进程标识和主进程标识。登录进程标识可以唯一标识该登录进程,且登录进程标识可以为登录进程的名称;主进程标识也可以唯一标识该主进程,且主进程标识可以为该主进程的名称。
其中,根据该主进程标识,确定该主进程对应的预取信息的存储路径的具体操作可以为:根据该主进程标识,获取该主进程对应的执行文件的内容数据。根据该主进程标识和该主进程对应的执行文件的内容数据,确定该主进程对应的预取信息所在文件的文件名称,根据该文件名称确定该主进程对应的预取信息的存储路径。例如,该存储路径可以为应用安装目录\*.pref。
其中,预取信息存储在终端包括的文件中,可以根据该文件名称查找到该预取信息的存储路径。
其中,在本发明实施例中,触发获取该应用的主进程对应的预取信息的条件不仅可以为监控该应用的登录进程的启动,还可以是当检测到窗口显示时,触发获取该应用的主进程对应的预取信息,当然,还可以是其他的方式,在本发明实施例中对此不做具体限定。
进一步地,在本发明实施例中,预取信息可以是该终端对该应用的主进程的历史启动过程进行监控得到,也可以是运营人员对应的终端事先启动该主进程,并对该主进程的启动过程进行监控,得到IO训练数据,并将该IO训练数据下发给该用户对应的终端,使该用户对应的终端生成预取信息。
当该预取信息为该终端对该应用的主进程的历史启动过程进行监控得到时,生成预取信息的具体过程为:对该应用的主进程的历史启动过程进行监控,得到该应用的启动数据;根据该启动数据,获取该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值;根据该启动数据所在文件的文件路径、偏移值和长度值,生成预取信息。
其中,根据该启动数据,获取该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值的具体操作可以为:从该启动数据中获取硬缺页事件,对该硬缺页事件进行分析,得到启动IO数据,该启动IO数据包括该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值。
当该预取信息为运营人员对应的终端事先启动该主进程,并对该主进程的启动过程进行监控,得到IO训练数据,并将该IO训练数据下发给该用户对应的终端,使该用户对应的终端生成预取信息时,该终端生成预取信息的具体操作可以为:接收IO训练数据,该IO训练数据包括该主进程对应的文件数据和该文件数据所在文件的相对文件路径。从该IO训练数据中获取该文件数据所在文件的相对文件路径,根据该主进程在该用户对应的终端中的安装路径,将该主进程对应的文件数据所在文件的相对文件路径转换为对应的绝对文件路径。并将该IO训练数据中的文件数据转换为对应的偏移值和长度值;根据该绝对文件路径、偏移值和长度值,生成预取信息。
例如,相对文件路径可以为该文件在该应用的安装文件下的哪个文件中,绝对文件路径可以为该文件在该终端中的哪个磁盘中的哪个文件下。
其中,终端生成预取信息之后,存储该预取信息,即该预取信息对应一个存储路径。
如图3所示,运营人员对应的终端事先启动该主进程,并对该主进程的启动过程进行监控,得到IO训练数据的具体操作可以为:运营人员可以事先启动该主进程,当该主进程启动后,该主进程可以向文件系统发送IO请求,此时IO捕获器对该主进程进行监控,获取到该IO请求,并将该IO请求发送给IO数据训练组件。该IO数据训练组件根据该IO请求,获取该主进程在启动过程中从磁盘中读取的数据,将读取的数据确定为该应用的启动数据。从该启动数据中获取硬缺页事件,对该硬缺页事件进行分析,得到启动IO数据,该启动IO数据包括该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值。将该启动IO数据转换为文件数据,即将该偏移值和长度值转换为对应的文件位置。根据该应用的主进程的安装路径和该文件数据所在文件的文件路径,从该文件数据中选择该应用的主进程对应的文件数据。将该主进程对应的文件数据所在文件的绝对文件路径转换为相对文件路径。合并相邻的文件数据,根据合并后的文件数据和该主进程对应的文件数据所在文件的相对文件路径,生成IO训练数据。
其中,该启动IO数据对应的文件位置可以为该启动IO数据在该文件中所占的比特位置。例如,该启动IO数据包括三个数据块,第一个数据块对应的文件位置为该文件中的第1-15比特,第二个数据块对应的文件位置为该文件中的第15-25比特,第三个数据块对应的文件位置为该文件中的第30-45比特。其中,合并相邻的文件数据时,由于第一个数据块的比特位置与第二数据块的比特位置相接,所以第一个数据块与第二个数据块相邻,可以将第一个数据块和第二个数据块合并为一个数据块,即合并后的数据块对应的文件位置为该文件中的第1-25比特。
其中,根据该应用的主进程的安装路径和该文件数据所在文件的文件路径,从该文件数据中选择该应用的主进程对应的文件数据的具体操作可以为:将该应用的主进程的安装路径和该文件数据所在文件的文件路径进行比较,如果该文件数据所在文件的文件路径位于该应用的主进程的安装路径下,则将该文件数据确定为该应用的主进程对应的文件数据。如果该文件数据所在的文件路径不在该应用的主进程的安装路径下,则确定该文件数据不为该应用的主进程对应的文件数据。
进一步地,当该应用更新时,可以重新根据上述步骤生成IO训练数据,并根据新生成的IO训练数据,判断预取效果是否达到预设的效果,如果达到,则可以将该IO训练数据进行发布,使用户根据该IO训练数据更新预取信息。
其中,判断预取效果是否达到预设的效果的具体操作可以为:根据该IO训练数据,获取对应的预取数据,并根据获取的预取数据完成该主进程的启动过程。判断该主进程的启动过程花费的时间是否小于或等于预设阈值,如果是,则确定该预取效果达到预设的效果;否则,确定该预取效果未达到预设的效果。
步骤202:根据该主进程的预取信息,从磁盘文件中读取对应的数据。
具体地,对该主进程的预取信息进行解析,得到解析后的预取信息;将解析后的预取信息组成特定数据结构的数据信息,该数据信息包括该应用的主进程所需数据的文件路径、偏移值和长度值;根据该文件路径、偏移值和长度值,从磁盘文件中读取对应的数据。
其中,根据该主进程的预取信息,从磁盘文件中读取对应数据的模块可以为内核预取功能模块,特定数据结构的数据信息为该内核预取功能模块可以识别的数据信息。该内核预取功能模块可以根据操作系统提供的接口,实现数据的预取。
其中,根据该文件路径、偏移值和长度值,从磁盘文件中读取对应的数据的具体操作可以为:根据该文件路径和偏移值,确定要读取的数据在磁盘中的起始位置。从该起始位置处,读取长度为该长度值的数据。
其中,该文件路径即为上述所说的绝对文件路径。
例如,预取信息包括的偏移值和长度值之间的对应关系可以如下表1所示,
表1
偏移值 | 长度值 |
0 | 5 |
15 | 10 |
30 | 10 |
其中,根据该预取信息中的文件路径和偏移值0,可以确定要读取的数据在磁盘中的起始位置为位置1,从该位置1开始,读取长度为5的数据。根据该文件路径和偏移值15,可以确定要读取的数据在磁盘中的起始位置为位置2,从该位置2开始,读取长度为10的数据。根据该文件路径和偏移值30,可以确定要读取的数据在磁盘中的起始位置为位置3,从该位置3开始,读取长度为10的数据。
步骤203:将读取的数据确定为该应用的主进程对应的预取数据,并将该预取数据加载到缓存中。
其中,可以将该预取数据加载到该缓存中的空闲位置处。
其中,该预取数据为该应用的主进程启动时所需的数据,因此,在该主进程启动之前,可以将该预取数据加载到缓存中。当该主进程启动时,该主进程可以直接从缓存中读取所需的数据。
步骤204:当监控到该登录进程启动完成或监控到该应用的主进程启动时,停止获取该应用的主进程对应的预取数据。
其中,当登录进程启动完成时,该登录进程会拉起该应用的主进程。所以当监控到该登录进程启动完成或监控到该应用的主进程启动时,停止获取该应用的主进程对应的预取数据。
由于该登录进程是与网络侧进行信息交互,预取数据是与该终端的操作系统进行IO请求交互,而该应用的主进程也是与该终端的操作系统进行IO请求交互,所以,为了避免预取数据的IO请求与该应用的主进程的IO请求之间产生冲突,当启动该应用的主进程时,停止获取该应用的主进程对应的预取数据。
进一步地,停止获取该应用的主进程对应的预取数据的触发条件也可以是检测到窗口显示时触发,即检测到登录进程的启动完成时的窗口时停止获取该应用的主进程对应的预取数据,也可以是检测到主进程启动时的窗口时停止获取该应用的主进程对应的预取数据,本发明实施例对此不做具体限定。
步骤205:根据缓存中加载的预取数据,完成该主进程的启动过程。
由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以该主进程从该缓存中加载的预取数据中读取所需的数据,可以增加该主进程读取数据的速度,进而加速了该应用的启动。
由于预取数据的时间与该登录进程启动过程的时间相等,当预取信息对应的总数据大小大于该终端在该登录进程启动过程对应的时间段预取数据的大小时,该终端在该时间段内没有预取到该预取信息对应的所有数据,所以,在该主进程启动过程中,如果该缓存中没有该主进程启动过程所需的数据时,该主进程还可以从磁盘中读取所需的数据。
步骤206:在该应用的主进程启动过程中,根据预取信息对应的总数据大小和该主进程已加载数据大小,计算该主进程的启动进度。
具体地,在该应用的主进程启动过程中,将该主进程已加载数据大小除以预取信息对应的总数据大小,得到该主进程的启动进度。
其中,该预取信息根据该主进程在整个启动过程中读取的数据得到。
步骤207:根据该主进程的启动已耗时间、该主进程已加载数据大小、预取数据大小和该启动进度,计算该主进程已加速时间。
具体地,根据该主进程的启动已耗时间、该主进程已加载数据大小、预取数据大小和该启动进度,按照如下公式(1)计算该主进程已加速时间。
其中,在上述公式(1)中,T为该主进程已加速时间,t为该主进程的启动已耗时间,z1为该主进程已加载数据大小,z2为该主进程预取数据大小,s为该启动进度。
其中,在本发明是实施例中,预取数据大小小于或等于预取信息对应的总数据大小。
步骤208:将该主进程的启动进度和已加速时间进行显示。
其中,可以将该主进程的启动进度和已加速时间显示在该应用的显示界面中。显示该主进程的启动进度和已加速时间的形式多种多样,本发明实施例对显示该主进行的启动进度和已加速时间的形式不做具体限定。例如,如图4所示的应用显示界面,该应用显示界面中可以显示该应用的图标,以及该主进程的加载提示信息,并在该显示界面的右下角显示该主进程的启动进度和已加速时间。在右下角图标的外圆圈可以指示该主进程的启动进度,通过右下角图标下方的文字指示该主进程的已加速时间,例如,该已加速时间为24秒时,可以在图4所示的应用显示界面中进行显示。
在本发明实施例中,该应用具有固定的模式,即先启动该应用的登录进程,当该登录进程登录完成时,该登录进程拉起该应用的主进程,所以,在该登录进程刚开始启动时,根据该主进程的预取信息,获取该主进程的预取数据,并将该预取数据加载到缓存中。为了避免IO请求之间产生冲突,在该登录进程登录完成时或主进程启动时,停止获取该预取数据。此时,该应用的主进程从该缓存中加载所需的数据,由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以加速了该应用的启动。并且,该主进程的预取数据是根据对该应用的主进程的历史启动过程得到的,所以该预取数据是该主进程的完整启动过程中读取的数据。此外,预取数据的过程是和登录进程同时进行的,当该登录进程登录完成时或启动主进程时,停止该预取数据的过程,并没有耽误主进程的启动过程,进而不会延长该主进程的启动过程。
图5是本发明实施例提供一种加速启动的装置结构示意图,参见图5,该装置包括:
第一获取模块501,用于当监控到应用的登录进程启动时,获取该应用的主进程对应的预取数据,并将该预取数据加载到缓存中,该预取数据根据对该应用的主进程的历史启动过程得到;
停止模块502,用于当监控到该登录进程启动完成或监控到该应用的主进程启动时,停止获取该应用的主进程对应的预取数据;
启动模块503,用于根据该缓存中加载的预取数据,完成该主进程的启动过程。
可选地,第一获取模块501包括:
获取单元,用于根据该登录进程标识,获取该应用的主进程对应的预取信息;
读取单元,用于根据该预取信息,从磁盘文件中读取对应的数据;
加载单元,用于将读取的数据确定为该应用的主进程对应的预取数据,并将该预取数据加载到缓存中。
其中,获取单元包括:
第一获取子单元,用于根据该登录进程标识,获取该应用的主进程标识;
确定子单元,用于根据该主进程标识,确定该主进程对应的预取信息的存储路径;
第二获取子单元,用于根据该主进程对应的预取信息的存储路径,获取该主进程对应的预取信息。
其中,读取单元包括:
解析子单元,用于对该预取信息进行解析,得到解析后的预取信息;
组成子单元,用于将该解析后的预取信息组成特定数据结构的数据信息,该数据信息包括该应用程序的主进程所需数据的文件路径、偏移值和长度值;
读取子单元,用于根据该文件路径、偏移值和长度值,从磁盘文件中读取对应的数据。
进一步地,该装置还包括:
第一计算模块,用于在该应用的主进程启动过程中,根据该预取信息对应的总数据大小和该主进程已加载数据大小,计算该主进程的启动进度;
第二计算模块,用于根据该主进程的启动已耗时间、该主进程已加载数据大小、预取数据大小和该启动进度,计算该主进程已加速时间;
显示模块,用于将该主进程的启动进度和已加速时间进行显示。
可选地,该装置还包括:
监控模块,用于对该应用的主进程的历史启动过程进行监控,得到该应用的启动数据;
第二获取模块,用于根据该启动数据,获取该主进程在启动过程中从磁盘中读取的数据的偏移值和长度值;
第一生成模块,用于根据该启动数据所在文件的文件路径、偏移值和长度值,生成预取信息。
可选地,该装置还包括:
接收模块,用于接收输入输出IO训练数据,该IO训练数据包括文件数据和该主进程对应的文件数据所在文件的相对文件路径;
第一转换模块,用于根据该主进程在终端中的安装路径,将该主进程对应的文件数据所在文件的相对文件路径转换为对应的绝对文件路径;
第二转换模块,用于将该文件数据转换为对应的偏移值和长度值;
第二生成模块,用于根据该绝对文件路径、偏移值和长度值,生成预取信息。
在本发明实施例中,该应用具有固定的模式,即先启动该应用的登录进程,当该登录进程登录完成时,该登录进程拉起该应用的主进程,所以,在该登录进程刚开始启动时,获取该主进程的预取数据,并将该预取数据加载到缓存中。为了避免IO请求之间产生冲突,在该登录进程登录完成时或主进程启动时,停止获取该预取数据。此时,该应用的主进程从该缓存中加载所需的数据,由于进程从缓存中读取数据的速度大于从磁盘中读取数据的速度,所以加速了该应用的启动。并且,该主进程的预取数据是根据对该应用的主进程的历史启动过程得到的,所以该预取数据是该主进程的完整启动过程中读取的数据。此外,预取数据的过程是和登录进程同时进行的,当该登录进程登录完成时或启动主进程时,停止该预取数据的过程,并没有耽误主进程的启动过程,进而不会延长该主进程的启动过程。
需要说明的是:上述实施例提供的加速启动的装置在加速启动时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的加速启动的装置与加速启动的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种加速启动的方法,其特征在于,所述方法包括:
当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中,所述预取数据根据对所述应用的主进程的历史启动过程得到;
当监控到所述登录进程启动完成或监控到所述应用的主进程启动时,停止获取所述应用的主进程对应的预取数据;
根据所述缓存中加载的预取数据,完成所述主进程的启动过程。
2.如权利要求1所述的方法,其特征在于,所述获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中,包括:
根据登录进程标识,获取所述应用的主进程对应的预取信息;
根据所述预取信息,从磁盘文件中读取对应的数据;
将读取的数据确定为所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中。
3.如权利要求2所述的方法,其特征在于,所述根据登录进程标识,获取所述应用的主进程对应的预取信息,包括:
根据所述登录进程标识,获取所述应用的主进程标识;
根据所述主进程标识,确定所述主进程对应的预取信息的存储路径;
根据所述主进程对应的预取信息的存储路径,获取所述主进程对应的预取信息。
4.如权利要求2所述的方法,其特征在于,所述根据所述预取信息,从磁盘文件中读取对应的数据,包括:
对所述预取信息进行解析,得到解析后的预取信息;
将所述解析后的预取信息组成特定数据结构的数据信息,所述数据信息包括所述应用的主进程所需数据的文件路径、偏移值和长度值;
根据所述文件路径、偏移值和长度值,从磁盘文件中读取对应的数据。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述应用的主进程启动过程中,根据所述应用的主进程的预取信息对应的总数据大小和所述主进程已加载数据大小,计算所述主进程的启动进度;
根据所述主进程的启动已耗时间、所述主进程已加载数据大小、预取数据大小和所述启动进度,计算所述主进程已加速时间;
将所述主进程的启动进度和已加速时间进行显示。
6.如权利要求1所述的方法,其特征在于,所述当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中之前,还包括:
对所述应用的主进程的历史启动过程进行监控,得到所述应用的启动数据;
根据所述启动数据,获取所述主进程在启动过程中从磁盘中读取的数据的偏移值和长度值;
根据所述启动数据所在文件的文件路径、所述偏移值和所述长度值,生成预取信息。
7.如权利要求1所述的方法,其特征在于,所述当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中之前,还包括:
接收输入输出IO训练数据,所述IO训练数据包括所述主进程对应的文件数据和所述主进程对应的文件数据所在文件的相对文件路径;
根据所述主进程在终端中的安装路径,将所述主进程对应的文件数据所在文件的相对文件路径转换为对应的绝对文件路径;
将所述文件数据转换为对应的偏移值和长度值;
根据所述绝对文件路径、偏移值和长度值,生成预取信息。
8.一种加速启动的装置,其特征在于,所述装置包括:
第一获取模块,用于当监控到应用的登录进程启动时,获取所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中,所述预取数据根据对所述应用的主进程的历史启动过程得到;
停止模块,用于当监控到所述登录进程启动完成或监控到所述应用的主进程启动时,停止获取所述应用的主进程对应的预取数据;
启动模块,用于根据所述缓存中加载的预取数据,完成所述主进程的启动过程。
9.如权利要求8所述的装置,其特征在于,所述第一获取模块包括:
获取单元,用于根据登录进程标识,获取所述应用的主进程对应的预取信息;
读取单元,用于根据所述预取信息,从磁盘文件中读取对应的数据;
加载单元,用于将读取的数据确定为所述应用的主进程对应的预取数据,并将所述预取数据加载到缓存中。
10.如权利要求9所述的装置,其特征在于,所述获取单元包括:
第一获取子单元,用于根据所述登录进程标识,获取所述应用的主进程标识;
确定子单元,用于根据所述主进程标识,确定所述主进程对应的预取信息的存储路径;
第二获取子单元,用于根据所述主进程对应的预取信息的存储路径,获取所述主进程对应的预取信息。
11.如权利要求9所述的装置,其特征在于,所述读取单元包括:
解析子单元,用于对所述预取信息进行解析,得到解析后的预取信息;
组成子单元,用于将所述解析后的预取信息组成特定数据结构的数据信息,所述数据信息包括所述应用的主进程所需数据的文件路径、偏移值和长度值;
读取子单元,用于根据所述文件路径、偏移值和长度值,从磁盘文件中读取对应的数据。
12.如权利要求8所述的装置,其特征在于,所述装置还包括:
第一计算模块,用于在所述应用的主进程启动过程中,根据所述应用的主进程的预取信息对应的总数据大小和所述主进程已加载数据大小,计算所述主进程的启动进度;
第二计算模块,用于根据所述主进程的启动已耗时间、所述主进程已加载数据大小、预取数据大小和所述启动进度,计算所述主进程已加速时间;
显示模块,用于将所述主进程的启动进度和已加速时间进行显示。
13.如权利要求8所述的装置,其特征在于,所述装置还包括:
监控模块,用于对所述应用的主进程的历史启动过程进行监控,得到所述应用的启动数据;
第二获取模块,用于根据所述启动数据,获取所述主进程在启动过程中从磁盘中读取的数据的偏移值和长度值;
第一生成模块,用于根据所述启动数据所在文件的文件路径、所述偏移值和所述长度值,生成预取信息。
14.如权利要求8所述的装置,其特征在于,所述装置还包括:
接收模块,用于接收输入输出IO训练数据,所述IO训练数据包括所述主进程对应的文件数据和所述主进程对应的文件数据所在文件的相对文件路径;
第一转换模块,用于根据所述主进程在终端中的安装路径,将所述主进程对应的文件数据所在文件的相对文件路径转换为对应的绝对文件路径;
第二转换模块,用于将所述文件数据转换为对应的偏移值和长度值;
第二生成模块,用于根据所述绝对文件路径、偏移值和长度值,生成预取信息。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410187308.1A CN104133691B (zh) | 2014-05-05 | 2014-05-05 | 加速启动的方法及装置 |
EP15789484.1A EP3140732B1 (en) | 2014-05-05 | 2015-05-05 | Startup accelerating method and apparatus |
US15/309,095 US10318310B2 (en) | 2014-05-05 | 2015-05-05 | Startup accelerating method and apparatus |
PCT/CN2015/078290 WO2015169212A1 (en) | 2014-05-05 | 2015-05-05 | Startup accelerating method and apparatus |
US16/402,347 US10970082B2 (en) | 2014-05-05 | 2019-05-03 | Startup accelerating method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410187308.1A CN104133691B (zh) | 2014-05-05 | 2014-05-05 | 加速启动的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104133691A CN104133691A (zh) | 2014-11-05 |
CN104133691B true CN104133691B (zh) | 2016-08-31 |
Family
ID=51806377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410187308.1A Active CN104133691B (zh) | 2014-05-05 | 2014-05-05 | 加速启动的方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10318310B2 (zh) |
EP (1) | EP3140732B1 (zh) |
CN (1) | CN104133691B (zh) |
WO (1) | WO2015169212A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133691B (zh) | 2014-05-05 | 2016-08-31 | 腾讯科技(深圳)有限公司 | 加速启动的方法及装置 |
CN104572205B (zh) * | 2015-01-12 | 2018-02-23 | 安一恒通(北京)科技有限公司 | 一种用于软件加速的方法和装置 |
CN106293792B (zh) * | 2015-06-02 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 软件启动方法和装置 |
CN106095489B (zh) * | 2016-05-31 | 2017-11-07 | 广东欧珀移动通信有限公司 | 一种应用控制方法及移动终端 |
RU2673407C1 (ru) * | 2017-10-18 | 2018-11-26 | Акционерное общество "Лаборатория Касперского" | Система и способ определения вредоносного файла |
US10867039B2 (en) | 2017-10-19 | 2020-12-15 | AO Kaspersky Lab | System and method of detecting a malicious file |
US11366757B2 (en) | 2017-11-22 | 2022-06-21 | Intel Corporation | File pre-fetch scheduling for cache memory to reduce latency |
US10747574B2 (en) * | 2018-03-12 | 2020-08-18 | Lenovo (Singapore) Pte. Ltd. | Executing applications prior to user login |
CN108549556B (zh) * | 2018-04-16 | 2021-06-01 | 腾讯科技(北京)有限公司 | 一种应用程序加速方法、装置、终端及存储介质 |
CN109933253A (zh) * | 2019-01-23 | 2019-06-25 | 努比亚技术有限公司 | 应用启动控制方法、终端及计算机可读存储介质 |
CN111782412A (zh) * | 2019-04-03 | 2020-10-16 | 阿里巴巴集团控股有限公司 | 一种数据的获取方法、服务器及相关系统 |
CN112068887B (zh) * | 2019-06-11 | 2023-05-30 | 腾讯科技(深圳)有限公司 | 对应用进行加速处理的方法和装置 |
US11392418B2 (en) * | 2020-02-21 | 2022-07-19 | International Business Machines Corporation | Adaptive pacing setting for workload execution |
CN114528529A (zh) * | 2022-02-15 | 2022-05-24 | 广州经传多赢投资咨询有限公司 | 一种内存xml文件加密方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1825283A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式操作系统硬件镜像启动优化的实现方法 |
CN102012832A (zh) * | 2010-12-14 | 2011-04-13 | Tcl集团股份有限公司 | 一种加速Android系统启动的方法及装置 |
CN102707966A (zh) * | 2012-04-12 | 2012-10-03 | 腾讯科技(深圳)有限公司 | 加速操作系统启动的方法及装置、预取信息生成方法及装置和终端 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5983324A (en) * | 1996-03-28 | 1999-11-09 | Hitachi, Ltd. | Data prefetch control method for main storage cache for protecting prefetched data from replacement before utilization thereof |
US6260116B1 (en) * | 1998-07-01 | 2001-07-10 | International Business Machines Corporation | System and method for prefetching data |
US6633968B2 (en) * | 1999-03-30 | 2003-10-14 | Microsoft Corporation | Pre-fetching of pages prior to a hard page fault sequence |
US6782454B1 (en) * | 2000-09-29 | 2004-08-24 | Sun Microsystems, Inc. | System and method for pre-fetching for pointer linked data structures |
US20030105837A1 (en) * | 2001-11-30 | 2003-06-05 | Yury Kamen | Interception for optimal caching of distributed applications |
US7953820B2 (en) * | 2002-09-11 | 2011-05-31 | Hughes Network Systems, Llc | Method and system for providing enhanced performance of web browsing |
US7127600B2 (en) * | 2003-09-30 | 2006-10-24 | Intel Corporation | Aggressive content pre-fetching during pre-boot runtime to support speedy OS booting |
TWI258078B (en) * | 2003-10-07 | 2006-07-11 | Via Tech Inc | Pre-fetch controller and method thereof |
JP4151977B2 (ja) * | 2005-03-16 | 2008-09-17 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 先読み装置、先読み方法、および先読みプログラム |
JP2006285809A (ja) * | 2005-04-04 | 2006-10-19 | Hitachi Ltd | ストリーミング向け性能保証を行うストレージ装置 |
US8601475B2 (en) * | 2005-08-02 | 2013-12-03 | Aol Inc. | Download and upload of email messages using control commands in a client/server web application |
US8490065B2 (en) * | 2005-10-13 | 2013-07-16 | International Business Machines Corporation | Method and apparatus for software-assisted data cache and prefetch control |
US20080201332A1 (en) * | 2007-02-20 | 2008-08-21 | Souders Steven K | System and method for preloading content on the basis of user context |
WO2009098737A1 (ja) * | 2008-02-08 | 2009-08-13 | Panasonic Corporation | 外部デバイスアクセス装置、その制御方法及びシステムlsi |
US8966121B2 (en) * | 2008-03-03 | 2015-02-24 | Microsoft Corporation | Client-side management of domain name information |
US8332570B1 (en) * | 2008-09-30 | 2012-12-11 | Symantec Corporation | Methods and systems for defragmenting virtual machine prefetch data on physical storage |
US20110093790A1 (en) * | 2009-10-21 | 2011-04-21 | International Business Machines Corporation | Preemptive caching for web-based systems |
US9619390B2 (en) * | 2009-12-30 | 2017-04-11 | International Business Machines Corporation | Proactive prefetch throttling |
US8954490B2 (en) * | 2010-06-24 | 2015-02-10 | International Business Machines Corporation | Speculative and coordinated data access in a hybrid memory server |
US20120131305A1 (en) * | 2010-11-22 | 2012-05-24 | Swamy Punyamurtula | Page aware prefetch mechanism |
US20140365861A1 (en) * | 2011-04-25 | 2014-12-11 | Google Inc. | Prefetching binary data for use by a browser plugin |
US8856453B2 (en) * | 2012-03-01 | 2014-10-07 | International Business Machines Corporation | Persistent prefetch data stream settings |
CN102662690B (zh) * | 2012-03-14 | 2014-06-11 | 腾讯科技(深圳)有限公司 | 应用程序启动方法和装置 |
US9519586B2 (en) * | 2013-01-21 | 2016-12-13 | Qualcomm Incorporated | Methods and apparatus to reduce cache pollution caused by data prefetching |
KR102047495B1 (ko) * | 2013-02-22 | 2019-11-21 | 삼성전자주식회사 | 클라이언트에서 캐시를 이용하여 서버의 멀티 미디어 컨텐트를 스트리밍 재생하는 방법 및 이를 위한 장치 |
US9251083B2 (en) * | 2013-03-11 | 2016-02-02 | Via Technologies, Inc. | Communicating prefetchers in a microprocessor |
US9461980B1 (en) * | 2014-03-28 | 2016-10-04 | Juniper Networks, Inc. | Predictive prefetching of attribute information |
CN104133691B (zh) | 2014-05-05 | 2016-08-31 | 腾讯科技(深圳)有限公司 | 加速启动的方法及装置 |
-
2014
- 2014-05-05 CN CN201410187308.1A patent/CN104133691B/zh active Active
-
2015
- 2015-05-05 US US15/309,095 patent/US10318310B2/en active Active
- 2015-05-05 WO PCT/CN2015/078290 patent/WO2015169212A1/en active Application Filing
- 2015-05-05 EP EP15789484.1A patent/EP3140732B1/en active Active
-
2019
- 2019-05-03 US US16/402,347 patent/US10970082B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1825283A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式操作系统硬件镜像启动优化的实现方法 |
CN102012832A (zh) * | 2010-12-14 | 2011-04-13 | Tcl集团股份有限公司 | 一种加速Android系统启动的方法及装置 |
CN102707966A (zh) * | 2012-04-12 | 2012-10-03 | 腾讯科技(深圳)有限公司 | 加速操作系统启动的方法及装置、预取信息生成方法及装置和终端 |
Also Published As
Publication number | Publication date |
---|---|
US10970082B2 (en) | 2021-04-06 |
US20170075697A1 (en) | 2017-03-16 |
CN104133691A (zh) | 2014-11-05 |
EP3140732A4 (en) | 2017-04-19 |
US10318310B2 (en) | 2019-06-11 |
EP3140732B1 (en) | 2022-08-03 |
EP3140732A1 (en) | 2017-03-15 |
US20190310861A1 (en) | 2019-10-10 |
WO2015169212A1 (en) | 2015-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104133691B (zh) | 加速启动的方法及装置 | |
CN106294094B (zh) | 游戏服务器的测试方法、客户端、服务器及系统 | |
CN103577658B (zh) | 智能终端硬件的评估方法及评估系统 | |
CN107562610A (zh) | 获取页面加载时间的方法、装置、终端和介质 | |
CN107888554A (zh) | 服务器攻击的检测方法和装置 | |
CN105072095B (zh) | 一种检测sql注入漏洞的方法及装置 | |
CN108009078A (zh) | 一种应用界面遍历方法、系统和测试设备 | |
DE60004640D1 (de) | Verfahren und vorrichtung für sprungvorhersage unter verwendung einer hybriden branch-history mit gemeinsamer zugriffsstruktur | |
CN108810642A (zh) | 一种弹幕显示方法、装置及电子设备 | |
CN103581987B (zh) | 移动终端设备的网页下载速度的测试方法及装置 | |
CN107149476A (zh) | 信息终端装置的控制方法、体动测定装置以及程序 | |
KR101212457B1 (ko) | 웹페이지 접속시간 및 방문도에 기반한 웹검색 방법 및 웹검색 시스템 | |
CN110750447B (zh) | 软件测试方法及相关设备 | |
CN103631706B (zh) | 一种浏览器测试方法和装置 | |
DE60324585D1 (de) | Methode, verfahren und computerprogramm zum auffinden von punktkorrespondenzen in punktemengen | |
CN106485070A (zh) | 一种自适应阈值调整方法 | |
CN109815083B (zh) | 一种应用崩溃的监控方法、装置、电子设备及介质 | |
CN107402872A (zh) | 一种用于确定数据库间数据同步延迟的方法与设备 | |
CN109885492B (zh) | 一种基于图像识别和曲线拟合的响应时间测试方法及终端 | |
CN105607990A (zh) | 一种空指针崩溃的挖掘方法及装置 | |
CN104469495B (zh) | 用于视频播放的点击行为监测方法和装置 | |
CN105786789B (zh) | 一种文本相似度的计算方法和装置 | |
CN104408175B (zh) | 识别网页类型的方法和装置 | |
CN105335628B (zh) | 一种基于可移动存储设备的软件授权方法及装置 | |
CN106059691A (zh) | desense测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |