CN101833557B - 基于应用程序的文件缓存方法和装置 - Google Patents
基于应用程序的文件缓存方法和装置 Download PDFInfo
- Publication number
- CN101833557B CN101833557B CN2009101433983A CN200910143398A CN101833557B CN 101833557 B CN101833557 B CN 101833557B CN 2009101433983 A CN2009101433983 A CN 2009101433983A CN 200910143398 A CN200910143398 A CN 200910143398A CN 101833557 B CN101833557 B CN 101833557B
- Authority
- CN
- China
- Prior art keywords
- application program
- filter plant
- called
- cushion space
- destination
- 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
Images
Abstract
公开了一种基于应用程序的存储管理方法和装置。其中,所述方法可包括:为所述应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序;为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备;从所述应用程序派发的命令中获取IRP,其中所获取的IRP指向位于所述目标设备中的要操作的目标对象;响应于所获取的IRP,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。
Description
技术领域
本申请涉及计算机系统中基于应用程序的存储管理方法和装置。
背景技术
计算机系统的存储系统通常由高速缓存、主存储器、外存设备和存储设备访问接口组成。主存储器主要为SDRAM或DDR SDRAM,外存设备有磁盘,光盘,闪存盘等。
这些存储设备的存储速度由快到慢依次为高速缓存、主存储器、外存设备,而在存储容量方面,由低到高依次为高速缓存、主存储器、外存设备。在这些存储系统进行文件存储管理时,通常利用RAMDISK技术或在WINDOWSAPI中以内存映射文件操作来代替磁盘文件操作的技术。
在RAMDISK技术中,通过以主存储器来模拟磁盘设备,在主存储器中划分一个空间作为系统磁盘分区,用于安装并配置用户的RAMDISK管理软件,通过修改操作系统或应用程序的存储路径为RAMDISK,以及将产生的文件保存到非易失性外存储设备,从而减少了对外部存储设备访问的次数。然而,在应用程序执行完毕后,产生的文件需要手动复制到非易失性外存储设备中保存以避免丢失,给用户使用带来不便。
在WINDOWS API中,对已经发布并采用内存映射文件方式的应用程序来说,可以将磁盘文件映射为内存文件,通过对内存文件的访问,提高应用程序的运行速度,减少磁盘的数据访问次数;同时,还可通过内存文件的写回动作保证磁盘文件的数据同步。然而,对于已经发布但没有采用内存映射文件方式的应用程序来说,无法获得因内存映射文件的使用而带来的系统性能提升。
因此,需要一种对任何文件都可以采用缓冲内存操作代替磁盘文件操作,,以达到减少磁盘文件访问次数,提高应用程序运行速度,从而延长外存储设备的使用寿命的方法。
发明内容
一方面,公开了一种基于应用程序的存储管理方法,该方法可包括:
为所述应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序;
为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备;
根据所述应用程序派发的命令分配IRP,其中所获取的IRP指向位于所述目标设备中的要操作的目标对象;
响应于所获取的IRP,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。
另一方面,本申请还公开了一种基于应用程序的存储管理装置,包括:
为应用程序创建控制设备对象并将创建的控制设备对象绑定到所述应用程序的装置;
为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备的装置;
根据所述应用程序派发的命令分配IRP的装置,其中,所获取的IRP指向位于所述目标设备中的要操作的目标对象;
响应于所获取的IRP,通过所述过滤设备对象将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理的装置。
根据上述的方法和装置,在缓冲空间中将目标对象进行处理后写入上位机的文件系统,之后,文件系统将写入的目标对象一次性写入到物理存储设备;这样,可至少以下至少一种有益效果:
1.减少了对物理存储设备的访问次数,延长了物理存储设备的使用寿命;
2.通过减少了对物理存储设备的访问次数,提高了操作速度;
3.对现有的采用或未采用内存映射文件方式的所有应用程序都可以适用;以及
4.可以适用一个应用程序具有多个文件的情况。如果一个应用程序有多个文档,都要加载到内存中。可以提高读写速度,从而提高应用程序的加速存储速度。
附图说明
图1为根据本申请公开的驱动程序框架示意图;
图2为利用图1中的驱动程序架构执行基于应用程序的存储管理方法的流程图;
图3为图2中的步骤S50的具体操作的流程图;以及
图4为图3中的步骤S509的具体操作的流程图。
具体实施方式
下面将参照相应的附图对本申请公开的基于应用程序的存储管理方法进行详细说明。
参照图1,其中示出了根据本申请公开的文件过滤驱动架构100。文件过滤驱动架构100包括用户态(用户状态)(User Mode)和核心态(内核状态)(Kernel Mode)。其中在用户态运行的主要为上位机的系统应用程序10,例如word程序等。系统应用程序10通过应用程序编程接口(API)同核心态的I/O系统服务模块(I/O System Services)20进行交互。I/O系统服务模块20通过I/O管理器(I/O Manager)30访问底层的驱动程序,例如文件过滤驱动40、文件系统驱动50和用于访问存储设备80的磁盘驱动70。文件过滤驱动架构100还包括卷管理器60,其中,卷管理器60、文件系统驱动50和磁盘驱动70构成了现有常规的文件系统驱动程序。由于文件系统驱动50、卷管理器60和磁盘驱动70为现有公知的技术,因此不再赘述。
公知地,文件驱动和设备驱动中的设备对象可以是一个拥有不同属性和行为模式的数据结构,在该数据结构中拥有一组称为分发例程(DispatchFunction)的函数指针。此外,在文件系统驱动中,I/O管理器30可以为所有驱动程序提供了统一的IRP(通信接口I/O请求包),可。在现有的驱动架构下,在内核状态中经常使用的IRP例如包括IRP_MJ_READ和IRP_MJ_WRITE等。
文件过滤驱动40的设备对象与目标设备(例如存储设备80)绑定。I/O管理器30分配的IRP被文件过滤驱动40的设备对象截获,文件过滤驱动40的设备对象通过自身的分发例程处理该IRP。这将在下面参照具体的流程图详细描述。
参照图2,其中示出了通过上述架构100执行基于应用程序的存储管理方法200。在步骤S10中,基于文件系统驱动50,为文件系统驱动创建CDO(控制设备对象;下文中称为“Object A”),其中,Object A设置有多个公知的派发例程。在步骤S20,将Object A绑定到上述应用程序。具体地,可以通过为Object A构造公知的“File System Notify”回调函数,并在其中绑定文件系统驱动(在这里,应用程序即为“CDO设备”)。这样,在注册该回调函数后,当该CDO设备接入文件系统并激活时可与Object A自动绑定。
在步骤S30中,为Object A创建过滤设备对象(下文中称为“ObjectB”),并通过其符号连接名绑定到目标设备,例如在图1中示出的存储设备80。在步骤S40中,Object B截获应用程序派发的命令以从中获取IRP,其中,该IRP是上述应用程序执行相应的操作后利用其应用程序接口(API)并通过I/O管理器30发送的请求包;此外,在该IRP中还具有指向位于目标设备中的要操作的目标对象(例如word程序要打开的一个文件)的指针,以便于绑定到目标设备中可以寻找到要操作的目标对象
接着,在步骤S50中,上层操作系统在内存中为目标对象分配缓冲空间,利用Object B的配发例程将目标对象调入所分配的缓冲空间,从而使得上述应用程序可以在该缓冲空间中对所调入的目标对象执行处理,例如修改、写入等。
作为一种选择,在步骤S50中,还可以通过Object A对Object B的执行操作状态进行配置,从而确定是否要启动Object B进行处理。具体地,利用Object A具有的配发例程从获取的IRP中获取设备I/O的控制码,根据所接收的控制码,设定Object B的操作状态。所述的操作状态例如是“启动过滤服务”、“停止过滤服务”或“修改过滤服务”。可以预先设定一个Object A和Object B都可以访问的变量(在下文中称为“过滤启动标记”),根据获取的控制码对“过滤启动标记”进行相应的设置而完成对Object B的操作状态的设定。当“过滤启动标记”的状态不为“停止过滤服务”状态时,才通过Object B将目标设备对象中的目标对象调入缓冲空间,这将在下文进行要进一步描述。此外,还应该理解,当“过滤启动标记”的状态为“停止过滤服务”时,还可以通过Object B的配发例程将缓冲过滤列表内的所有对象对应的数据通过I/O管理器30写回到上位机的文件系统。缓冲过滤列表可为预定的数据列表,其数据结构可例如下表1所示。
进程名称 | 进程名HASH值 | 目标文件名 | 目标文件名HASH值 | 目标文件缓存地址 | 目标文件长度 |
表1
此外,可通过Object A的派发例程对上述缓冲列表进行修改。例如,当通过Object A在过滤设备列表中增加或删除过滤对象记录后,可以通过Object B的配发例程将被增加或删除对象对应的缓存数据经由I/O管理器30写回到上位机的文件系统,并通知I/O管理器30IRP请求处理已执行结束。
下面将参照图3描述在步骤S50中根据Object B的操作状态对目标对象的具体处理。如图3所示,在步骤S501中,Object B被配置为通过“过滤启动标记”判断相应的过滤操作是否已启动,如果已经启动,则在步骤S502中,Object B通过其派发例程从截获的IRP中确定要对目标对象进行操作的进程、目标对象的全路径、以及IRP主功能号。接下来在步骤S503中判断IRP主功能号是否为IRP_MJ_CREATE?如果是,则在步骤S504中为目标对象创建处理例程,即将目标对象设备参数添加到过滤缓冲列表中,并在步骤S505中调用上层操作系统提供的文件系统驱动调用函数返回调用结果。
在步骤S506中,通过Object B判断IRP主功能号是否为IRP_MJ_READ。如果是,则在步骤S507中执行“读”操作。具体地,可例如首先通过Object B判断目标对象是否位于过滤缓冲列表内,如果不位于,则表示读取操作失败,直接向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,通过Object B的配发例程判断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中释放目标对象的缓冲空间、并将目标对象设备参数从过滤缓冲列表中删除。
此外,应该理解,通过文件系统的调用函数将写入数据或修改内容写入文件系统后,所述写入数据或修改内容皆已写入到物理存储设备。
虽然以上参照具体流程图对本申请公开的存储管理方法进行了详细的描述,但是本领域技术人员应该理解,在上述流程图中示出的各个步骤仅仅是为了说明目的而给出的一种具体示例,而不应该理解为图中示出的每个步骤都是必要的。本领域技术人员完全可以根据需要,适当增加、删除或替换其中的一些步骤。
Claims (7)
1.一种基于应用程序的存储管理方法,包括:
为文件系统驱动创建控制设备对象并将所创建的控制设备对象绑定到所述文件系统驱动;
为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定加载到目标设备;
根据所述应用程序派发的命令分配I/O请求包,其中所分配的I/O请求包指向位于所述目标设备中的要操作的目标对象;以及
响应于所获取的I/O请求包,所述过滤设备对象被配置为将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理。
2.如权利要求1所述的方法,其中,在所述控制设备对象的控制下,所述过滤设备对象响应于所获取的I/O请求包将所述目标对象调入所述缓冲空间。
3.如权利要求2所述的方法,其中,响应于所获取的I/O请求包,所述过滤设备对象将所述目标对象调入缓冲空间的步骤进一步包括:
所述控制设备对象从所述I/O请求包中接收控制码;
根据所接收的控制码,所述控制设备对象设定所述过滤设备对象的操作状态;以及
根据所述操作状态,所述过滤设备对象将所述目标对象调入所述缓冲空间。
4.如权利要求3所述的方法,其中,所述控制设备对象通过对预定标记进行设置从而设定所述过滤设备对象的操作状态。
5.如权利要求3所述的方法,其中,所述过滤设备对象将所述目标对象调入所述缓冲空间的步骤包括:
所述过滤设备对象通过上位机的文件系统的调用函数将所述目标对象调入所述缓冲空间。
6.如权利要求1所述的方法,其中,所述过滤设备对象将所述目标对象调入所述缓冲空间的步骤还包括:
从所获取的I/O请求包中获取主功能号;以及
根据所述主功能号,为整个所述目标对象分配缓冲空间。
7.一种基于应用程序的存储管理装置,包括:
为文件系统驱动创建控制设备对象并将创建的控制设备对象绑定到所述文件系统驱动的装置;
为所述控制设备对象创建过滤设备对象,并将创建的过滤设备对象绑定到目标设备的装置;
根据所述应用程序派发的命令分配I/O请求包的装置,其中,所获取的I/O请求包指向位于所述目标设备中的要操作的目标对象;
响应于所获取的I/O请求包,通过所述过滤设备对象将所述目标对象调入缓冲空间,以使所述应用程序在所述缓冲空间中对所调入的目标对象执行处理的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101433983A CN101833557B (zh) | 2009-05-25 | 2009-05-25 | 基于应用程序的文件缓存方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101433983A CN101833557B (zh) | 2009-05-25 | 2009-05-25 | 基于应用程序的文件缓存方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101833557A CN101833557A (zh) | 2010-09-15 |
CN101833557B true CN101833557B (zh) | 2012-05-23 |
Family
ID=42717628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101433983A Active CN101833557B (zh) | 2009-05-25 | 2009-05-25 | 基于应用程序的文件缓存方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101833557B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544287B (zh) * | 2013-10-28 | 2017-04-19 | 中国软件与技术服务股份有限公司 | 一种文件私有缓存建立方法和装置 |
CN104462031A (zh) * | 2014-11-06 | 2015-03-25 | 国云科技股份有限公司 | 一种快速批量处理乱码文档的方法 |
CN109710185B (zh) * | 2018-12-19 | 2021-12-21 | 麒麟合盛网络技术股份有限公司 | 数据处理方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430929A (zh) * | 2007-10-03 | 2009-05-13 | 意法半导体公司 | 用于对非易失性存储单元进行不可逆编程和读取的方法和设备 |
-
2009
- 2009-05-25 CN CN2009101433983A patent/CN101833557B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430929A (zh) * | 2007-10-03 | 2009-05-13 | 意法半导体公司 | 用于对非易失性存储单元进行不可逆编程和读取的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN101833557A (zh) | 2010-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8862855B2 (en) | Reading/writing control method and system for nonvolatile memory storage device | |
US7487303B2 (en) | Flash memory device and associated data merge method | |
JP4738038B2 (ja) | メモリカード | |
JP5002201B2 (ja) | メモリシステム | |
CN101147133B (zh) | 可再编程非易失性存储器系统的方法及存储器系统 | |
WO2018194772A1 (en) | Persistent memory for key-value storage | |
JP4464378B2 (ja) | 同一データを纏める事で格納領域を節約する計算機システム、ストレージシステム及びそれらの制御方法 | |
US8868622B2 (en) | Method and apparatus for allocating resources in a computer system | |
CN103677884B (zh) | flash分区表文件生成及其数据升级方法、装置 | |
TW201527971A (zh) | 資料儲存裝置以及快閃記憶體控制方法 | |
US7971022B2 (en) | Apparatus and method of processing data of non-volatile memory using transaction block | |
US20120151125A1 (en) | Data processing method for nonvolatile memory system | |
CN102710814A (zh) | 虚拟机ip地址的控制方法及装置 | |
CN101164037A (zh) | 闪速存储器中的直接数据文件存储 | |
CN103294604A (zh) | 闪存器件和使用闪存器件的电子设备 | |
CN103744614A (zh) | 固态硬盘访问的方法及其固态硬盘 | |
US20080320062A1 (en) | Method of transferring file system, file system transference program, and file system transference device | |
CN101833557B (zh) | 基于应用程序的文件缓存方法和装置 | |
US10095413B2 (en) | Memory system with address translation between a logical address and a physical address | |
JP6311365B2 (ja) | 記憶領域管理装置、記憶領域管理方法及び記憶領域管理プログラム | |
JP2009116465A (ja) | 記憶装置及びメモリ制御方法 | |
JP6100927B2 (ja) | 情報処理装置 | |
JP2007233838A (ja) | メモリシステムの制御方法 | |
CN111949212A (zh) | 基于自定义开放通道ssd的文件系统及文件管理方法 | |
JP5180726B2 (ja) | 記憶装置およびデータ書き込み制御方法 |
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 |