发明内容
本发明实施方式提出一种计算机程序加速方法,以提高程序速度。
本发明实施方式还提出了一种计算机程序加速系统,以提高程序速度。
本发明实施方式的具体方案如下:
一种计算机程序加速方法,该方法包括:
基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件;
在第一存储设备中存储普通数据文件,在第二存储设备中存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备;
接收关键数据文件访问请求,将所述访问请求重定向到所述第二存储设备,在所述第二存储设备上访问所述关键数据文件。
一种计算机程序加速系统,该系统包括数据文件区分单元、第一存储设备、第二存储设备和重定向单元,其中:
数据文件区分单元,用于基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件;
第一存储设备,用于存储普通数据文件;
第二存储设备,用于存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备;
重定向单元,用于接收关键数据文件访问请求,将所述访问请求重定向到所述第二存储设备,在所述第二存储设备上访问所述关键数据文件。
从上述技术方案可以看出,在本发明实施方式中,基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件;在第一存储设备中存储普通数据文件,在第二存储设备中存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备;接收关键数据文件访问请求,将访问请求重定向到第二存储设备,在第二存储设备上访问所述关键数据文件。基于上述分析,在本发明实施方式中,针对文件读写速度受到存储设备本身速度限制的特点,通过重定向技术将重要的文件访问操作重定向到存储在速度更快的设备上的文件,从而实现加速程序启动和运行速度。
而且,本发明实施方式通过关键数据文件和普通数据文件的划分,还实现了在程序加速效率和成本因素上的综合性折衷考虑。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
基于上述分析,在计算机中,程序代码和资源都是以文件的形式予以保存的。如果无法脱离或降低对低速存储设备的依赖,就很难进一步提升程序软件的速度(包括启动速度和软件运行速度)。在一般情况下,如果程序需要访问文件,那么它将直接访问磁盘上的文件,而文件读写速度则会受到磁盘本身速度限制。
在本发明实施方式中,为了加速这个过程,通过采用重定向技术将这些文件读写操作重定向到存储于速度更快(尤其是随机读写速度更快)的存储设备上的相同文件上,从而加速这个过程。
图1为根据本发明实施方式的计算机程序加速方法流程图。
如图1所示,该方法包括:
步骤101:基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件。
一般来说,越快的设备肯定就越贵。因此优选其的使用做出一定的限制,而不是无限的使用。因此,基于对计算机程序加速的影响程度,确定出关键数据文件和普通数据文件,如果发现当前访问的文件是需要被加速访问的文件(即关键数据文件),后续才进行重定向,否则就不进行重定向。
在这里,无论是关键数据文件还是普通数据文件,都可能涉及到程序启动、运行和访问所需资源。而且,基于应用场景和具体加速功能的不同,关键数据文件和普通数据文件的区分并不是一成不变的,而应该是可以变动的。
比如,在软件启动过程中,启动界面和用户配置文件对于软件启动速度具有重大影响,因此可以将启动界面和用户配置文件确定为关键数据文件。而在软件已经启动后的具体运行过程中,启动界面则对于软件运行没有重大影响,则此时可以将启动界面确定为普通数据文件。
步骤102:在第一存储设备中存储普通数据文件,在第二存储设备中存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备。
在这里,第一存储设备具体包括下列中的至少一个:硬盘、磁带或软盘。第二存储设备具体可以包括下列中的至少一个:内存盘或固态硬盘(SolidState Drive、IDE FLASH DISK)。其中:
内存盘是将计算机内存中的部分区域划分出来而虚拟成的本地磁盘;固态硬盘是由控制单元和存储单元(FLASH芯片)组成,简单的说就是用固态电子存储芯片阵列而制成的硬盘。其访问速度要比普通硬盘要快很多。优选地,还可以在第一存储设备中进一步保存关键数据文件。
步骤103:接收关键数据文件访问请求,将所述访问请求重定向到所述第二存储设备,在所述第二存储设备上访问所述关键数据文件。
关键数据文件访问请求通常分为读操作请求和写操作请求。
下面以读操作请求为实例进行说明:
在一个实施方式中,首先接收针对关键数据文件的读操作请求,然后将针对关键数据文件的读操作请求重定向到第二存储设备,并在第二存储设备上读取关键数据文件。
对于读操作而言,通常只需要执行简单的重定向请求即可,但是对于写操作,则需要更加复杂的机制保证以后读取的正确。这是因为:如果用于加速的高速设备无法永久存储这些写操作(比如,重启计算机后保存在内存盘内部的数据则会丢失),那么就需要执行数据回写的操作。因此,在实现重定向的时候还需要再实现一个回写模块,在写操作完毕的时候,通知回写模块有修改需要回写到原文件中。
具体地,对于写操作而言:将针对关键数据文件的写操作请求重定向到第二存储设备,在第二存储设备上针对关键数据文件写入数据,并且将所写入的数据回写到第一存储设备。
对于具体执行回写操作的时机,本发明实施方式提出一些较为可能的实例,包括:
(1)、发生了对被写的文件的读操作;
(2)、重定向功能被卸载;
(3)、计算机关机;
(4)、写操作完成后立即进行异步的回写。
以上虽然详细罗列了执行回写操作的具体时机,本领域人员可以意识到,这种罗列仅是示范性的,并不用于限定本发明实施方式的保护范围。
下面更加详细的描述如何实现重定向功能。
在一个实施方式中,接收关键数据文件访问请求,将关键数据文件访问请求中的文件请求路径修改为第二存储设备中的文件路径;并运行该修改后的关键数据文件访问请求以实现将访问请求重定向到所述第二存储设备。
具体地,首先可以使用文件系统过滤驱动,在内核中对文件系统的访问进行重定向。通过接管IRP_MJ_CREATE的回调,在其中修改IRP中请求的文件路径为重定向的文件路径,再调用IOCompleteRequest接口,处理此IRP即可完成对文件的重定向。
对于回写操作,则可以接管IRP_MJ_WRITE回调或者FastIO的Write接口,如果发现有写操作,则可以在合适的时机调用ZwWriteFile来回写数据。
使用这种方法的好处是可以实现完整的重定向。由于是在内核中提供服务,所以不依赖于需要加速的代码,不会存在需要使用待加速代码加速其本身的问题。
在另一个实施方式中,可以通过设置钩子函数替换文件访问函数,从而实现将访问请求重定向到所述第二存储设备。可选地,程序还可以主动检查在第二存储设备上是不是存在可以被加速的文件,如果存在,则直接使用在第二存储设备上的文件。
具体地,可以使用ApiHook函数来修改如下一些用于访问文件函数,如:NtCreateFile,LoadLibraryEx等等。当调用这些函数访问文件时,如果发现是需要重定向的文件,则打开重定向后的文件交给ApiHook来进行访问。
不过,使用ApiHook方法来实现重定向具有局限性:在Hook函数被初始化之前,无法重定向文件操作;无法重定向他所在的程序代码本身,所以无法完全实现加速代码加载的行为。
基于上述详细分析,图2为根据本发明实施方式的计算机程序加速方法第一示范性流程图。在图2所示流程中,在低速设备中保存有普通数据文件,在高速设备中存储关键数据文件,其中高速设备的数据访问速度大于低速设备。
如图2所示,该方法包括:
步骤201:程序访问文件。
步骤202:判断是否需要重定向,如果是则执行步骤204及其后续步骤;如果不是则执行步骤203并退出本流程。在这里,基于对计算机程序加速的影响因子,判断期望访问的文件是关键数据文件还是普通数据文件。如果是普通数据文件,则认为不需要执行重定向;如果是高速数据文件,则认为需要执行重定向。
步骤203:直接从低速设备中访问文件,并结束本流程。
步骤204:重定向访问到高速设备中。
步骤205:在高速设备上访问文件。
下面针对具体的写操作来描述本发明实施方式。图3为根据本发明实施方式的计算机程序加速方法第二示范性流程图。在图3所示流程中,在低速设备中保存有普通数据文件,在高速设备中存储关键数据文件,其中高速设备的数据访问速度大于低速设备。
如图3所示,该方法包括:
步骤301:程序访问文件。
步骤302:判断是否需要重定向,如果是则执行步骤304及其后续步骤;如果不是则执行步骤303并退出本流程。在这里,基于对计算机程序加速的影响因子,判断期望访问的文件是关键数据文件还是普通数据文件。如果是普通数据文件,则认为不需要执行重定向;如果是高速数据文件,则认为需要执行重定向。
步骤303:直接从低速设备中访问文件,并结束本流程。
步骤304:重定向访问到高速设备中。
步骤305:在高速设备上访问文件。
步骤306:判断是否需要执行回写操作,如果是则执行步骤307及其后续步骤;如果不需要则退出本流程。在这里,如果访问文件的请求涉及写操作,则需要执行数据回写的操作。
步骤307:执行回写操作。在这里,在高速设备上针对关键数据文件写入数据,并且将所写入的数据回写到低速设备。
基于上述详细分析,本发明实施方式还提出了一种计算机程序加速系统。
图4为根据本发明实施方式的计算机程序加速系统结构示意图。
如图4所示,该系统包括数据文件区分单元401、第一存储设备402、第二存储设备403和重定向单元404,其中:
数据文件区分单元401,用于基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件;
第一存储设备402,用于存储普通数据文件;
第二存储设备403,用于存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备;
重定向单元404,用于接收关键数据文件访问请求,将所述访问请求重定向到所述第二存储设备,在所述第二存储设备上访问所述关键数据文件。
在一个实施方式中,数据文件区分单元401,可以用于基于对计算机程序启动时加速的影响因子,将启动界面和用户配置文件确定为关键数据文件。
在一个实施方式中,第一存储设备402包括下列中的至少一个:硬盘、磁带或软盘;第二存储设备403包括下列中的至少一个:内存盘、固态硬盘或闪存盘。
其中:重定向单元404,具体用于接收针对关键数据文件的读操作请求,并将所述针对关键数据文件的读操作请求重定向到所述第二存储设备403,在所述第二存储设备403上读取所述关键数据文件。
而且,重定向单元404,还可以用于接收针对关键数据文件的写操作请求,将所述针对关键数据文件的写操作请求重定向到所述第二存储设备403,在所述第二存储设备上针对关键数据文件写入数据,并且将所写入的数据回写到第一存储设备402。
重定向单元404,用于接收关键数据文件访问请求,将关键数据文件访问请求中的文件请求路径修改为第二存储设备403中的文件路径;并运行该修改后的关键数据文件访问请求以实现将访问请求重定向到所述第二存储设备403。
重定向单元404,用于通过设置钩子函数替换文件访问函数,从而实现将访问请求重定向到第二存储设备403。
优选地,重定向单元404,用于在发生了对被写文件的读操作、重定向功能被卸载、计算机关机或者写操作完成后,将所写入的数据回写到第一存储设备402。
综上所述,在本发明实施方式中,基于对计算机程序加速的影响因子,确定出关键数据文件和普通数据文件;在第一存储设备中存储普通数据文件,在第二存储设备中存储关键数据文件,其中第二存储设备的数据访问速度大于第一存储设备;接收关键数据文件访问请求,将访问请求重定向到第二存储设备,在第二存储设备上访问所述关键数据文件。基于上述分析,在本发明实施方式中,针对文件读写速度受到存储设备本身速度限制的特点,通过重定向技术将重要的文件访问操作重定向到存储在速度更快的设备上的文件,从而实现加速程序启动和运行速度。
而且,本发明实施方式通过关键数据文件和普通数据文件的划分,还实现了在程序加速效率和成本因素上的综合性折衷考虑。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。