基于应用程序的文件缓存方法和装置的制作方法

文档序号:6578518阅读:206来源:国知局

专利名称::基于应用程序的文件缓存方法和装置的制作方法
技术领域
:本申请涉及计算机系统中基于应用程序的存储管理方法和装置。
背景技术
:计算机系统的存储系统通常由高速缓存、主存储器、外存设备和存储设备访问接口组成。主存储器主要为SDRAM或DDRSDRAM,外存设备有磁盘,光盘,闪存盘等。这些存储设备的存储速度由快到慢依次为高速缓存、主存储器、外存设备,而在存储容量方面,由低到高依次为高速缓存、主存储器、外存设备。在这些存储系统进行文件存储管理时,通常利用RAMDISK技术或在WIND0WSAPI中以内存映射文件操作来代替磁盘文件操作的技术。在RAMDISK技术中,通过以主存储器来模拟磁盘设备,在主存储器中划分一个空间作为系统磁盘分区,用于安装并配置用户的RAMDISK管理软件,通过修改操作系统或应用程序的存储路径为RAMDISK,以及将产生的文件保存到非易失性外存储设备,从而减少了对外部存储设备访问的次数。然而,在应用程序执行完毕后,产生的文件需要手动复制到非易失性外存储设备中保存以避免丢失,给用户使用带来不便。在WINDOWSAPI中,对已经发布并采用内存映射文件方式的应用程序来说,可以将磁盘文件映射为内存文件,通过对内存文件的访问,提高应用程序的运行速度,减少磁盘的数据访问次数;同时,还可通过内存文件的写回动作保证磁盘文件的数据同步。然而,对于已经发布但没有采用内存映射文件方式的应用程序来说,无法获得因内存映射文件的使用而带来的系统性能提升。因此,需要一种对任何文件都可以采用缓冲内存操作代替磁盘文件操作,,以达到减少磁盘文件访问次数,提高应用程序运行速度,从而延长外存储设备的使用寿命的方法。
发明内容一方面,公开了一种基于应用程序的存储管理方法,该方法可包括为所述应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备;根据所述应用程序派发的命令分配IRP,其中所获取的IRP指向位于所述目标设备中的要操作的目标对象;响应于所获取的IRP,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。另一方面,本申请还公开了一种基于应用程序的存储管理装置,包括为应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序的装置;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备的装置;根据所述应用程序派发的命令分配IRP的装置,其中,所获取的IRP指向位于所述目标设备中的要操作的目标对象;响应于所获取的IRP,通过所述过滤设备对象将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理的装置。根据上述的方法和装置,在缓冲空间中将目标对象进行处理后写入上位机的文件系统,之后,文件系统将写入的目标对象一次性写入到物理存储设备;这样,可至少以下至少一种有益效果1.减少了对物理存储设备的访问次数,延长了物理存储设备的使用寿命;2.通过减少了对物理存储设备的访问次数,提高了操作速度;3.对现有的采用或未采用内存映射文件方式的所有应用程序都可以适用;以及4.可以适用一个应用程序具有多个文件的情况。如果一个应用程序有多个文档,都要加载到内存中。可以提高读写速度,从而提高应用程序的加速存储速度。图1为根据本申请公开的驱动程序框架示意图;图2为利用图1中的驱动程序架构执行基于应用程序的存储管理方法的流程图;图3为图2中的步骤S50的具体操作的流程图;以及图4为图3中的步骤S509的具体操作的流程图。具体实施例方式下面将参照相应的附图对本申请公开的基于应用程序的存储管理方法进行详细说明。参照图1,其中示出了根据本申请公开的文件过滤驱动架构100。文件过滤驱动架构100包括用户态(用户状态)(UserMode)和核心态(内核状态)(KernelMode)。其中在用户态运行的主要为上位机的系统应用程序10,例如word程序等。系统应用程序10通过应用程序编程接口(API)同核心态的I/O系统服务模块(I/OSystemServices)20进行交互。I/O系统服务模块20通过I/O管理器(I/OManager)30访问底层的驱动程序,例如文件过滤驱动40、文件系统驱动50和用于访问存储设备80的磁盘驱动70。文件过滤驱动架构100还包括卷管理器60,其中,卷管理器60、文件系统驱动50和磁盘驱动70构成了现有常规的文件系统驱动程序。由于文件系统驱动50、卷管理器60和磁盘驱动70为现有公知的技术,因此不再赘述。公知地,文件驱动和设备驱动中的设备对象可以是一个拥有不同属性和行为模式的数据结构,在该数据结构中拥有一组称为分发例程(DispatchFimction)的函数指针。此夕卜,在文件系统驱动中,I/O管理器30可以为所有驱动程序提供了统一的IRP(通信接口I/0请求包),可。在现有的驱动架构下,在内核状态中经常使用的IRP例如包括IRP_MJ_READ和IRP_MJ_WRITE等。文件过滤驱动40的设备对象与目标设备(例如存储设备80)绑定。I/O管理器30分配的IRP被文件过滤驱动40的设备对象截获,文件过滤驱动40的设备对象通过自身的分发例程处理该IRP。这将在下面参照具体的流程图详细描述。参照图2,其中示出了通过上述架构100执行基于应用程序的存储管理方法200。在步骤S10中,基于文件系统驱动50,为文件系统驱动创建CDO(控制设备对象;下文中称为“ObjectA”),其中,ObjectA设置有多个公知的派发例程。在步骤S20,将ObjectA绑定到上述应用程序。具体地,可以通过为ObjectA构造公知的“FileSystemNotify”回调函数,并在其中绑定文件系统驱动(在这里,应用程序即为“⑶0设备”)。这样,在注册该回调函数后,当该CDO设备接入文件系统并激活时可与ObjectA自动绑定。在步骤S30中,为ObjectA创建过滤设备对象(下文中称为“0bjectB”),并通过其符号连接名绑定到目标设备,例如在图1中示出的存储设备80。在步骤S40中,ObjectB截获应用程序派发的命令以从中获取IRP,其中,该IRP是上述应用程序执行相应的操作后利用其应用程序接口(API)并通过1/0管理器30发送的请求包;此外,在该IRP中还具有指向位于目标设备中的要操作的目标对象(例如word程序要打开的一个文件)的指针,以便于绑定到目标设备中可以寻找到要操作的目标对象接着,在步骤S50中,上层操作系统在内存中为目标对象分配缓冲空间,利用ObjectB的配发例程将目标对象调入所分配的缓冲空间,从而使得上述应用程序可以在该缓冲空间中对所调入的目标对象执行处理,例如修改、写入等。作为一种选择,在步骤S50中,还可以通过ObjectA对ObjectB的执行操作状态进行配置,从而确定是否要启动ObjectB进行处理。具体地,利用ObjectA具有的配发例程从获取的IRP中获取设备1/0的控制码,根据所接收的控制码,设定ObjectB的操作状态。所述的操作状态例如是“启动过滤服务”、“停止过滤服务”或“修改过滤服务”。可以预先设定一个ObjectA和ObjectB都可以访问的变量(在下文中称为“过滤启动标记”),根据获取的控制码对“过滤启动标记”进行相应的设置而完成对ObjectB的操作状态的设定。当“过滤启动标记”的状态不为“停止过滤服务”状态时,才通过ObjectB将目标设备对象中的目标对象调入缓冲空间,这将在下文进行要进一步描述。此外,还应该理解,当“过滤启动标记”的状态为“停止过滤服务”时,还可以通过ObjectB的配发例程将缓冲过滤列表内的所有对象对应的数据通过1/0管理器30写回到上位机的文件系统。缓冲过滤列表可为预定的数据列表,其数据结构可例如下表1所示。<table>tableseeoriginaldocumentpage5</column></row><table>表1此外,可通过0bjectA的派发例程对上述缓冲列表进行修改。例如,当通过ObjectA在过滤设备列表中增加或删除过滤对象记录后,可以通过ObjectB的配发例程将被增加或删除对象对应的缓存数据经由1/0管理器30写回到上位机的文件系统,并通知1/0管理器30IRP请求处理已执行结束。下面将参照图3描述在步骤S50中根据ObjectB的操作状态对目标对象的具体处理。如图3所示,在步骤S501中,ObjectB被配置为通过“过滤启动标记”判断相应的过滤操作是否已启动,如果已经启动,则在步骤S502中,ObjectB通过其派发例程从截获的IRP中确定要对目标对象进行操作的进程、目标对象的全路径、以及IRP主功能号。接下来在步骤S503中判断IRP主功能号是否为IRP_MJ_CREATE?如果是,则在步骤S504中为目标对象创建处理例程,即将目标对象设备参数添加到过滤缓冲列表中,并在步骤S505中调用上层操作系统提供的文件系统驱动调用函数返回调用结果。在步骤S506中,通过ObjectB判断IRP主功能号是否为IRP_MJ_READ。如果是,则在步骤S507中执行“读”操作。具体地,可例如首先通过ObjectB判断目标对象是否位于过滤缓冲列表内,如果不位于,则表示读取操作失败,直接向IO管理器30返回调用失败的结果;否则,进一步为目标对象分配缓冲空间;接着,在上述步骤S502中确定的进程根据确定的目标对象的全路径将目标对象的内容读取到分配的缓存中,并通知I/O管理器30已经完成IRP_MJ_READ请求包的内容。如果在步骤S506中判断的结果是“否”时,则进一步在步骤S508中判断IRP主功能号是否为IRP_MJ_WRITE,如果是,则在步骤S509中进行“写”操作,这将在下面参照图4进行详细描述;否则在步骤S510中判断IRP主功能号是否为IRP_MJ_CLOSE/IRP_MJ_CLEANUP;如果是,则在步骤S511中利用文件系统调用关闭文件所需要的函数,将已经缓冲存储在外存储设备的数据或在缓冲中经过修改的数据通过IO管理器30写入上位机的文件系统中,并释放缓冲空间和通知IO管理器30完成处理。如果在步骤S510中判断的结果是IRP主功能号不为IRP_MJ_CLOSE/IRP_MJ_CLEANUP,则在步骤S512中通过文件系统的调用函数返回结果。下面参照图4进一步描述上述步骤S509的具体操作。在步骤S5091,通过ObjectB的配发例程判断IRP是否为IRP_MJ_WRITE?如果是,则表示为执行“写”操作,在步骤S5092中判断上述目标对象是否位于所述过滤缓冲列表内?如果是,则在步骤S5093中判断缓冲空间是否足够本次写入使用,如果够,则在步骤S5096中根据IRP中的参数(即,写操作偏移量和长度),利用应用程序的进程将数据写入到缓冲区,并在步骤S5097,通知I/O管理器已经完成写入IRP_MJ_WRITE请求包内容。如果在步骤S5091中判断的结果是IRP不为IRP_MJ_WRITE,则在步骤S5098中进一步判断IRP是否为IRP_MJ_FLUSH_BUFFER,如果是,则在步骤S5099中将已缓存数据和本次写入数据根据实际修改内容通过上述文件系统的调用函数写入文件系统,并在步骤S5100通知I/O管理器已经完成IRP_MJ_FLUSH_BUFFERS请求包内容。如果在步骤S5098中判断的结果是“否”,则在步骤S5103中通过文件系统的调用函数返回操作结果。此外,当在步骤S5093中判断的结果为“否”时,则在步骤S5094中为目标对象分配足够的缓冲空间,并在步骤S5095中进一步判断内存是否成功分配,如果没有,则在步骤S5101中将已缓存数据和本次要写入的数据,或实际修改的内容通过文件系统的调用函数写入文件系统,并在步骤S5102中释放目标对象的缓冲空间、并将目标对象设备参数从过滤缓冲列表中删除。此外,应该理解,通过文件系统的调用函数将写入数据或修改内容写入文件系统后,所述写入数据或修改内容皆已写入到物理存储设备。虽然以上参照具体流程图对本申请公开的存储管理方法进行了详细的描述,但是本领域技术人员应该理解,在上述流程图中示出的各个步骤仅仅是为了说明目的而给出的一种具体示例,而不应该理解为图中示出的每个步骤都是必要的。本领域技术人员完全可以根据需要,适当增加、删除或替换其中的一些步骤.权利要求一种基于应用程序的存储管理方法,包括为文件系统驱动创建控制设备对象并将所创建的控制设备对象绑定到所述文件系统驱动;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定加载到目标设备;根据所述应用程序派发的命令分配IRP,其中所分配的IRP指向位于所述目标设备中的要操作的目标对象;以及响应于所获取的IRP,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。2.如权利要求1所述的方法,其中,在所述控制设备对象的控制下,所述过滤设备对象响应于所获取的IRP将所述目标对象调入所述缓冲空间。3.如权利要求2所述的方法,其中,响应于所获取的IRP,所述过滤设备对象将所述目标对象调入缓冲空间的步骤进一步包括所述控制设备对象从所述IRP中接收控制码;根据所接收的控制码,所述控制设备对象设定所述过滤设备对象的操作状态;以及根据所述操作状态,所述过滤设备对象将所述目标对象调入所述缓冲空间。4.如权利要求3所述的方法,其中,所述控制设备对象通过对预定标记进行设置从而设定所述过滤设备对象的操作状态。5.如权利要求3所述的方法,其中,所述过滤设备对象将所述目标对象调入所述缓冲空间的步骤还包括所述过滤设备对象通过上位机的文件系统的调用函数将所述目标对象调入所述缓冲空间。6.如权利要求1所述的方法,其中,所述过滤设备对象将所述目标对象调入所述缓冲空间的步骤还包括从所获取的IRP获取主功能号;以及根据所述主功能号,为整个所述目标对象分配缓冲空间。7.一种基于应用程序的存储管理装置,包括为文件系统驱动创建控制设备对象并将创建的控制设备对象绑定到所述文件系统驱动的装置;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备的装置;根据所述应用程序派发的命令分配IRP的装置,其中,所获取的IRP指向位于所述目标设备中的要操作的目标对象;响应于所获取的IRP,通过所述过滤设备对象将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理的装置。全文摘要公开了一种基于应用程序的存储管理方法和装置。其中,所述方法可包括为所述应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备;从所述应用程序派发的命令中获取IRP,其中所获取的IRP指向位于所述目标设备中的要操作的目标对象;响应于所获取的IRP,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。文档编号G06F17/30GK101833557SQ200910143398公开日2010年9月15日申请日期2009年5月25日优先权日2009年5月25日发明者刘一宁申请人:深圳市朗科科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1