应用程序启动方法和装置的制作方法

文档序号:6366355阅读:172来源:国知局
专利名称:应用程序启动方法和装置的制作方法
技术领域
本发明涉及计算机领域,特别涉及一种应用程序启动方法和装置。
背景技术
随着计算机技术的飞速发展,用户会安装各种各样的应用程序,应用程序启动过程中的磁盘I/o基本上是由页面错误(Page Fault)引入的,当执行到某处而其对应的虚拟地址并不在进程的工作集(Working Set)中时,就会发生Page Fault, Page Fault的顺序一般是这样的从ー个文件的某部分中读入ー些页面,然后可能从同一文件的相距较远的另一部分中读入ー些页面,然后从另ー个不同的文件中读入ー些页面,可能又要从ー个目录中读入页面,然后再从第一个文件中读入ー些页面,读取文件不连续,且读取位置也有可能不连续,这种跳跃的读取大大减慢了每一次启动应用程序的速度,如果对应的内容不在物理内存里,就需要从文件中读取,触发Hard Fault,应用程序冷启动时间较长的ー个主要原因就是Hard Fault过多。而Hard Fault是按需读取的(一次16KB或者32KB),再考虑到系统其他的1/0,就可能造成I/O偏移量在磁盘上的跳跃,从而大大减慢了每一次访问的速度,使得应用程序的启动效率降低,而启动速度是应用程序的最重要性能指标之一,直接影响着用户的对应用程序的体验印象。

发明内容
为了加快应用程序的启动速度,本发明实施例提供了一种应用程序启动方法和装置。所述技术方案如下本发明实施例提供了一种应用程序启动方法,所述方法包括当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,所述预取数据包括所述应用程序的历史启动过程中发生的页面错误对应的文件块;加载所述应用程序的代码,以便启动所述应用程序。当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,之前包括分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据。分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据,具体包括获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址;根据所述映像文件列表和所述虚拟地址计算每个所述虚拟地址对应的文件偏移量;根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并,得到所述应用程序对应的预取数据。
获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址,具体包括获取所述应用程序的日志文件;将所述日志文件中从用户界面进程开始时间到显示前景窗ロ时间之间的时间段确定为预设启动时间段;获取所述预设启动时间段内进程加载的映像文件列表;获取所述预设启动时间段内进程发生的页面错误的虚拟地址。根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并操作,得到所述应用程序对应的预取数据,具体包括 根据所述每个所述虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到所述应用程序对应的预取数据。本发明实施例提供了一种应用程序启动装置,所述装置包括预取数据加载模块,用于当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,所述预取数据包括所述应用程序的历史启动过程中发生的页面错误对应的文件块;代码加载模块,用于加载所述应用程序的代码,以便启动所述应用程序。所述装置还包括预取数据获取模块,用于分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据。所述预取数据获取模块包括获取单元,用于获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址;偏移量计算单元,用于根据所述映像文件列表和所述虚拟地址计算每个所述虚拟地址对应的文件偏移量;预取数据获取単元,用于根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并,得到所述应用程序对应的预取数据。所述获取单元包括日志获取子単元,用于获取所述应用程序的日志文件;时间段确定子単元,用于将所述日志文件中从用户界面进程开始时间到显示前景窗ロ时间之间的时间段确定为预设启动时间段;映像文件列表获取子単元,用于获取所述预设启动时间段内进程加载的映像文件列表;虚拟地址获取子単元,用于获取所述预设启动时间段内进程发生的页面错误的虚拟地址。所述预取数据获取単元具体用于根据所述每个所述虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到所述应用程序对应的预取数据。本发明实施例提供的技术方案带来的有益效果是通过在应用程序启动时,先加载所述应用程序的历史启动过程中发生的页面错误对应的文件块,再加载应用程序代码,大大減少了应用程序启动过程中页面错误发生的次数,减轻了程序载入过程中频繁交換内存页面与交換文件的现象,提高了应用程序的启动速度和启动效率。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I是本发明实施例提供的一种应用程序启动方法的流程图;图2是本发明实施例提供的一种应用程序启动方法的流程图;图3是现有技术应用程序启动时间与采用本发明实施例的应用程序启动方法的启动时间的对比示意图;图4是本发明实施例提供的一种应用程序启动装置的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进ー步地详细描述。在介绍本发明提供的应用程序启动方法和装置之前,对本发明涉及的关键用语进行以下说明页面错误当前进程访问的虚拟页面没有被映射到有效的物理页面时,应用程序要使用ー个保存在硬盘上的虚拟内存页面,则操作系统会在硬盘上找到该页面,并将其调入物理内存中,然后程序才能运行。如果虚拟页面被映射到内存中其他状态的物理页面,发生的是软页面错误(Soft Fault),如果虚拟页面被映射到磁盘上的文件中,发生的是硬页面错误(Hard Fault)。映像文件将磁盘上的文件映射到虚拟地址空间,通过访问内存ー样访问这些文件,这些被映射的文件称为映像文件,进程启动过程中使用映像文件载入EXE和DLL文件。磁盘I/O:磁盘的读写。图I是本发明实施例提供的一种应用程序启动方法的流程图。參见图1,该实施例包括101、当接收到启动应用程序的指令时,加载该应用程序对应的预取数据,该预取数据包括该应用程序的历史启动过程中发生的页面错误对应的文件块;102、加载该应用程序的代码,以便启动该应用程序。可选地,当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,之前包括分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据。可选地,分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序 对应的预取数据,具体包括获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址;根据所述映像文件列表和所述虚拟地址计算每个所述虚拟地址对应的文件偏移量;根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合井,得到所述应用程序对应的预取数据。可选地,获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址,具体包括获取所述应用程序的日志文件;将所述日志文件中从用户界面进程开始时间到显示前景窗ロ时间之间的时间段确定为预设启动时间段;获取所述预设启动时间段内进程加载的映像文件列表;获取所述预设启动时间段内进程发生的页面错误的虚拟地址。可选地,根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并操作,得到所述应用程序对应的预取数据,具体包括根据所述每个所述虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到所述应用程序对应的预取数据。本实施例提供的方法,通过在应用程序启动时,先加载所述应用程序的历史启动过程中发生的页面错误对应的文件块,再加载应用程序代码,大大減少了应用程序启动过程中页面错误发生的次数,减轻了程序载入过程中频繁交換内存页面与交換文件的现象,提高了应用程序的启动速度和启动效率。图2是本发明实施例提供的一种应用程序启动方法的流程图。该实施例的执行主体为终端,该终端可以为PC(Personal Computer,个人电脑)或移动终端,该移动终端可以为智能手机、平板电脑、MP3 (Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、PDA(Personal Digital Assistant,个人数字助理)等。參见图2,该实施例具体包括 201、获取该应用程序的日志文件;其中,日志文件是包含关于系统消息的文件,不同的日志文件记载不同的信息,例如,有的用于加载默认的系统日志文件,有的仅用于记载安全消息,对于该步骤201来说,获取的该应用程序的日志文件用于记载该应用程序的启动和运行相关信息,该日志文件至少包括该应用程序的启动信息,该启动信息包括应用程序的历史启动过程中发生的PageFault信息。该步骤201中获取的日志文件可以基于ETW (Event Tracing for Windows),该ETW是Windows提供的统ー的跟踪和记录事件的机制,用户模式应用程序和内核模式驱动程序都可以使用ETW来记录事件。202、将该日志文件中从用户界面进程开始到显示前景窗ロ的时间段确定为预设启动时间段;其中,用户界面进程的开始时间可以理解为应用程序的启动时间,而显示前景窗ロ的时间可以理解为应用程序完成代码加载的时间。在本实施例中,仅以将从用户界面进程开始到显示前景窗ロ的时间段确定为预设启动时间段为例进行说明,该预设启动时间段还可以缩短到更小的范围内,具体可以由技术人员设置,本发明实施例不做具体限定。203、获取该预设启动时间段内进程加载的映像文件列表;其中,映像文件列表至少包括所加载文件的起始地址和路径,对于该应用程序来说,该映像文件列表即是由于应用程序启动过程中发生的Page Fault而加载的,因此,获取该映像文件列表,可以获知在应用程序启动过程中发生Page Fault时加载了哪些文件以及这些文件的路径。204 、获取该预设启动时间段内进程发生的页面错误的虚拟地址;该虚拟地址即是应用程序启动过程中进程所访问的虚拟页面的地址,对于该步骤204来说,获取预设启动时间段内进程发生的页面错误的虚拟地址可以获知在应用程序启动过程中哪些虚拟地址未被映射到有效的物理地址中。需要说明的是,由于每次应用程序启动过程中发生的页面错误并不是完全相同的,因此,需要对多次应用程序的启动过程进行分析,以获取进程加载的映像文件列表和Page Fault发生时的虚拟地址。本实施例的步骤201-204仅以对单次启动的日志文件进行分析,并获取映像文件列表和Page Fault发生时的虚拟地址的过程为例进行说明,在实际应用中,可以同时对多个日志文件进行分析,并获取映像文件列表和Page Fault发生时的虚拟地址,或,对多个日志文件顺序进行分析,并获取映像文件列表和Page Fault发生时的虚拟地址,对多个日志文件的分析顺序可以有多种,具体可以由技术人员设置,本实施例不做具体限定。205、根据该映像文件列表和该虚拟地址计算每个该虚拟地址对应的文件偏移量;本领域技术人员可以获知,对于映像文件列表中的单个映像文件来说,映像文件的起始地址减去Page Fault发生时的虚拟地址,得到相对虚拟地址,并通过相对虚拟地址获得文件偏移量,其中,该相对虚拟地址与文件偏移量是分段线性关系,该分段线性关系由映像文件(PE文件格式)进行设置,本实施例不做赘述。该实施例与现有技术的区别在于,并不直接加载映像文件列表中的整个映像文件,而是将加载的的粒度更加细化,仅加载映像文件中的在应用程序启动过程中将会发生页面错误的文件块,以极少量的冗余数据换取I/O效率的大幅提升。206、根据该每个该虚拟地址对应的文件偏移量,对文件块进行合并,得到该应用程序对应的预取数据;具体地,根据该每个该虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到该应用程序对应的预取数据。优选地,该预设比特数可以为64KB,如果两个文件块的距离小于64KB,则将该两个文件块进行合并操作,通过对多个文件块的合并操作,得到该应用程序对应的预取数据。该预设比特数还可以有其他的数值,其具体数值可以由技术人员进行设置。本领域技术人员可以获知,一次磁盘I/O的大小在WIN7上可达到2M,在XP上可达到1M,而一次Hard Fault引入的I/O大小只有16KB或者32KB,因此,在本实施例中,通过将相邻的文件块进行合并操作,可以大幅度的提高磁盘I/O的效率。表I是应用程序启动过程中一个模块的文件块合并后的示例。表I
权利要求
1.一种应用程序启动方法,其特征在于,所述方法包括 当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,所述预取数据包括所述应用程序的历史启动过程中发生的页面错误对应的文件块; 加载所述应用程序的代码,以便启动所述应用程序。
2.根据权利要求I所述的方法,其特征在干,当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,之前包括 分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据。
3.根据权利要求2所述的方法,其特征在于,分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据,具体包括 获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误PageFault的虚拟地址; 根据所述映像文件列表和所述虚拟地址计算每个所述虚拟地址对应的文件偏移量; 根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合井,得到所述应用程序对应的预取数据。
4.根据权利要求3所述的方法,其特征在于,获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址,具体包括 获取所述应用程序的日志文件; 将所述日志文件中从用户界面进程开始时间到显示前景窗ロ时间之间的时间段确定为预设启动时间段; 获取所述预设启动时间段内进程加载的映像文件列表; 获取所述预设启动时间段内进程发生的页面错误的虚拟地址。
5.根据权利要求3所述的方法,其特征在干,根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并操作,得到所述应用程序对应的预取数据,具体包括 根据所述每个所述虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到所述应用程序对应的预取数据。
6.一种应用程序启动装置,其特征在于,所述装置包括 预取数据加载模块,用于当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,所述预取数据包括所述应用程序的历史启动过程中发生的页面错误对应的文件块; 代码加载模块,用于加载所述应用程序的代码,以便启动所述应用程序。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括 预取数据获取模块,用于分析所述应用程序的历史启动过程,获取所述历史启动过程中应用程序对应的预取数据。
8.根据权利要求7所述的装置,其特征在于,所述预取数据获取模块包括 获取单元,用于获取所述应用程序的历史启动过程中加载的映像文件列表和发生的页面错误Page Fault的虚拟地址; 偏移量计算单元,用于根据所述映像文件列表和所述虚拟地址计算每个所述虚拟地址对应的文件偏移量;预取数据获取単元,用于根据所述每个所述虚拟地址对应的文件偏移量,对文件块进行合并,得到所述应用程序对应的预取数据。
9.根据权利要求8所述的装置,其特征在于,所述获取単元包括 日志获取子単元,用于获取所述应用程序的日志文件; 时间段确定子単元,用于将所述日志文件中从用户界面进程开始时间到显示前景窗ロ时间之间的时间段确定为预设启动时间段; 映像文件列表获取子単元,用于获取所述预设启动时间段内进程加载的映像文件列表; 虚拟地址获取子単元,用于获取所述预设启动时间段内进程发生的页面错误的虚拟地址。
10.根据权利要求8所述的装置,其特征在于,所述预取数据获取単元具体用于根据所述每个所述虚拟地址对应的文件偏移量,将距离小于预设比特数的文件块进行合并操作,得到所述应用程序对应的预取数据。
全文摘要
本发明公开了一种应用程序启动方法和装置,属于计算机领域。所述方法包括当接收到启动应用程序的指令时,加载所述应用程序对应的预取数据,所述预取数据包括所述应用程序的历史启动过程中发生的页面错误对应的文件块;加载所述应用程序的代码,以便启动所述应用程序。该装置包括预取数据加载模块和代码加载模块。本发明通过在应用程序启动时,先加载所述应用程序的历史启动过程中发生的页面错误对应的文件块,再加载应用程序代码,大大减少了应用程序启动过程中页面错误发生的次数,减轻了程序载入过程中频繁交换内存页面与交换文件的现象,提高了应用程序的启动速度和启动效率。
文档编号G06F9/445GK102662690SQ20121006712
公开日2012年9月12日 申请日期2012年3月14日 优先权日2012年3月14日
发明者朱文焕, 边超 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1