分配存储空间的方法及装置制造方法

文档序号:6539834阅读:183来源:国知局
分配存储空间的方法及装置制造方法
【专利摘要】本发明涉及一种分配存储空间的方法及装置,包括:接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息;查找所述文件信息所对应的文件,并查找所述文件对应的标识号;解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息;向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。由此实现了让应用程序了解存储空间的连续性,可有效提高应用程序对磁盘数据的读写速度。
【专利说明】分配存储空间的方法及装置
【技术领域】
[0001]本发明涉及移动通信领域,尤其涉及一种分配存储空间的方法及装置。
【背景技术】
[0002]磁盘数据库运行的主要瓶颈是数据库数据的读写速度,难以提高数据库数据读写速度的原因是数据库不知道文件的连续性,预读、写缓存、连续写等功能受影响。
[0003]现有技术中,在数据库需要进行读写处理时,首先向内核发送读写请求消息,内核接收到读写请求消息之后,启动磁盘进行读写处理,当数据库读取数据时,从磁盘向应用缓存返回待读取的数据;当数据库写入数据时,将待写入的数据直接写入到磁盘中,而不去了解存储空间的连续性,这样容易导致相关数据在磁盘上存放位置的不连续,从而严重影响磁盘数据库的读写速度。

【发明内容】

[0004]本发明实施例提供了一种分配存储空间的方法及装置,解决了应用程序读写磁盘数据效率低的问题。
[0005]第一方面,提供了一种分配存储空间的方法,该方法包括:
[0006]接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息;
[0007]查找所述文件信息所对应的文件,并查找所述文件对应的标识号;
[0008]解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息;
[0009]向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0010]根据第一方面,在第一方面的第一种可能的实现方式中,所述文件信息具体为文件名称,所述查找所述文件信息所对应的文件,并查找所述文件对应的标识号包括:
[0011]检查所述文件名称是否合法,若所述文件名称合法,则查找所述文件名称所对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
[0012]根据第一方面,在第一方面的第二种可能的实现方式中,所述文件信息具体为文件句柄,所述查找所述文件信息所对应的文件,并查找所述文件对应的标识号包括:
[0013]根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
[0014]根据第一方面或第一方面的上述两种实现方式中任一种实现方式,在第一方面的第三种实现方式中,所述文件系统解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息包括:
[0015]解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
[0016]根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求包括:
[0017]向所述应用程序发送所述存储信息,以使所述应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0018]第二方面,提供了一种分配存储空间的装置,该装置包括:接收单元、查找单元、处理单元和发送单元;
[0019]所述接收单元,用于接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息;
[0020]所述查找单元,用于查找所述接收单元接收的所述文件信息所对应的文件,并查找所述文件对应的标识号;
[0021]所述处理单元,用于解析所述查找单元查找的所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息;
[0022]所述发送单元,用于向所述应用程序发送所述处理单元获取的所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0023]根据第二方面,在第二方面的第一种可能的实现方式中,所述查找单元具体用于:
[0024]检查所述文件名称是否合法,若所述文件名称合法,则查找所述文件名称所对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
[0025]根据第二方面,在第二方面的第二种可能的实现方式中,所述查找单元具体用于:
[0026]根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
[0027]根据第二方面或第二方面的上述两种实现方式中任一种实现方式,在第二方面的第三种实现方式中,所述处理单元具体用于:
[0028]解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
[0029]根据第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述发送单元具体用于:
[0030]向所述应用程序发送所述存储信息,以使所述应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0031]本发明实施例提供的分配存储空间的方法及装置,接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息;查找所述文件信息所对应的文件,并查找所述文件对应的标识号;解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息;向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。由此实现了让应用程序了解存储空间的连续性,并且根据读写请求的特点,分类使用存储空间,从而有效提高了应用程序对磁盘数据的读写速度。
【专利附图】

【附图说明】
[0032]图1为本发明提供的Posix文件系统不意图;
[0033]图2为本发明实施例一提供的分配存储空间的方法流程图;
[0034]图3为本发明实施例一提供的应用程序获取存储空间信息的示意图;
[0035]图4为本发明实施例二提供的分配存储空间的方法流程图;
[0036]图5为本发明实施例三提供的分配存储空间的装置示意图。
【具体实施方式】
[0037]下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
[0038]在本发明提供的实施例中,以Posix文件系统为例进行说明,参见图1所示的本发明提供的PosiX文件系统示意图,图1中,文件系统层新增文件块模块(FileBlock),该模块是文件系统内置的功能的一部分,文件文件系统接口的一部分,可以直接获取文件物理位置;在操作系统层增加文件物理位置系统调用接口,举例来说,可以定义两种系统调用接 P:1)int GetFileBlock_name (const char氺pathname, char氺buf, int size) ; 2) intGetFileBlock_fd (const int fd, char*buf, int size);其中,第一种接口形式中的参数pathname表示操作系统向文件系统发送的文件的路径,该路径中包括文件的文件名称,参数buf指向文件系统向应用程序返回的各存储块组的首地址,参数size则表示返回的各组存储块中存储块的个数,上述存储块可以为磁盘块;数据块遍历模块,根据文件在存储块上对应的物理标识号,利用文件系统的磁盘管理规则对上述物理标识号进行解析,返回上述文件在存储器上占用的全部存储块;文件句柄管理模块,根据文件句柄fd在进程管理模块中是否包含该文件句柄,最终找到fd在存储块上对应的物理标识号。
[0039]图2为本发明实施例一提供的分配存储空间的方法流程图。所述方法的执行主体可以为文件系统。如图2所示,所述方法具体包括:
[0040]S210,接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件名称。
[0041]参见图3所示的本发明实施例一提供的应用程序获取存储空间信息的示意图,图3中,首先在系统调用层新增系统调用接口:int GetFileBlock_name (constchar*pathname, char*buf, int size) 或 者 int GetFileBlock_fd (const intfd, char*buf, int size),应用程序或者具体为数据库通过调用上述操作系统的接口函数(通过参数pathname)向文件系统发送查询文件存储信息的请求消息,该查询文件存储信息请求消息中包括文件的路径信息,该文件的路径信息中包括文件名称,其中,上述文件名称对应的文件可以为数据文件,也可以为日志文件。
[0042]S220,检查所述文件名称合法,若所述文件名称合法,则查找所述文件名称对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
[0043]参见图3中,文件系统的命名空间模块接收到上述应用程序或者数据库发送的文件的路径信息之后,获取该路径信息中的文件名称,举例为,该文件名称为字符串;然后命名空间模块检查该文件名称是否合法;当上述文件名称合法时,命名空间模块根据上述文件名称在本地查找是否包括该文件名称对应的文件,当查找到该文件名称所对应的文件时,命名空间模块将上述文件名称发送给文件系统的元数据索引模块,元数据索引模块根据该文件名称,查找该文件名称对应的文件对应的标识号。
[0044]S230,解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息。
[0045]具体地,所述文件系统的元数据索引模块解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
[0046]举例来说,上述存储器为磁盘,而存储块则为磁盘划分的磁盘块,则上述获取到的标识号即为文件在磁盘上的inode号;上述文件系统为ext3文件系统,根据ext3文件系统的管理规则,可以将inode号对应到数组i_block[EXT3_N_BL0CKS],该数组包括上述inode号、第一索引值和第二索引值,其中,该inode号为一个整形数,唯一地标识了存储上述文件中部分数据的磁盘块地址;第一索引值为一个一级指针,该指针指向磁盘上存放上述文件中部分数据的一组连续的磁盘块的起始地址;第二索引值为一个二级指针,该指针又可以指向多个不同的一级指针,每个一级指针又指向磁盘上存放上述文件中部分数据的一组连续的磁盘块的起始地址;具体地,根据上述第一索引值和第二索引值,就可以获取到多组磁盘块的信息,其中,每组磁盘块的信息包括:该组磁盘块的起始地址信息和该组磁盘块包含的磁盘块个数,由上述多组磁盘块的信息组成所有磁盘块的信息。
[0047]S240,向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0048]具体地,应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0049]参见图3中,文件系统获取到各组磁盘块的信息之后,将上述各组磁盘块的信息返回给应用程序或者数据库,由应用程序或者数据库中的存储引擎对返回的各组磁盘块进行分类,具体为,磁盘划分的磁盘块在逻辑上都是有固定大小的,举例为,可以为4KB,根据每组磁盘块的信息中该组磁盘块包含的磁盘块个数及上述磁盘块预设的大小,就可以得到每组磁盘块的总大小;上述存储引擎根据每组磁盘块的总大小,对各组磁盘块进行分类,举例为,总共包括三组磁盘块:第一组磁盘块的信息包括:首地址为200KB,总共包括2个磁盘块,则第一组磁盘块的总大小为8KB;第二组磁盘块的信息包括:首地址为512KB,总共包括16个磁盘块,则第二组磁盘块的总大小为64KB;第三组磁盘块的信息包括:首地址为768KB,总共包括128个磁盘块,则第三组磁盘块的总大小为512KB ;则上述磁盘块可以被划为三类:第一类的大小为8KB,第二类的大小为64KB,第三类的大小为512KB。应用程序或数据库根据读写请求的连续性将分类后的存储块分配给所述读写请求,具体地,由于数据库中的数据文件随机读写较多,且数据文件的数据页比较小时,优先从小磁盘块分组中分配磁盘块,举例为:从第一类磁盘分组中分配磁盘块,由此,对于数据文件中数据页面可能大于文件系统最小分配单元时,本文件系统可以预先对齐,避免跨块;当数据库中的日志文件都是连续读写,数据块比较大时,优先从大磁盘块分组中分配磁盘块,举例为,从第三类磁盘块分组中分配磁盘块;当磁盘块不足时,允许大的磁盘块拆分为小的磁盘块,或将小的磁盘块合并为逻辑上连续的大的磁盘块使用,但是,此时需要提示用户数据文件或者日志文件的连续性不足。
[0050]图4为本发明实施例二提供的分配存储空间的方法流程图。所述方法的执行主体可以为文件系统。如图4所示,所述方法具体包括:
[0051]S410,接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件句柄。
[0052]参见图3,首先在系统调用层新增系统调用接口:int GetFileBlock_name(const char氺pathname, char氺buf, int size)或者 int GetFileBlock_fd (const intfd, char*buf, int size),应用程序或者具体为数据库通过调用上述操作系统的接口函数(通过参数pathname)向文件系统发送文件句柄,其中,该文件句柄对应的文件可以为数据文件,也可以为日志文件。
[0053]S420,根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
[0054]举例来说,参见图3中,文件系统接收到上述应用程序或者数据库发送的文件句柄fd之后,根据该文件句柄从操作系统的进程管理模块管理的当前任务的task结构体中查找是否含有此文件句柄fd,此处,应用程序中所有打开的文件的文件句柄均记载在task结构体中,其中,文件与文件句柄是一对多的关系,即一个文件对应多个文件句柄,根据其中一个文件句柄可以唯一的找出一个文件;具体地,当文件系统从task结构体中查找到文件句柄fd时,就可以根据该fd从进程管理模块中查找到与fd对应的文件的相关信息,举例为,该文件的相关信息可以记载在进程管理模块的file结构体中,而file结构体中包括参数address_space,其中,参数address_space的inode字段中记载了与上述文件在存储器上对应的标识号,因此,根据上述文件句柄就可以查找到该文件对应的标识号。
[0055]S430-S440 同步骤 S230-S240 相同。
[0056]图5为本发明实施例三提供的分配存储空间的装置示意图,所述装置用于执行图2或图4所示的方法。如图5所示,该装置包括:接收单元501、查找单元502、处理单元503和发送单元504。
[0057]所述接收单元501,用于接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息。[0058]所述查找单元502,用于查找所述接收单元501接收的所述文件信息所对应的文件,并查找所述文件对应的标识号。
[0059]可选地,所述查找单元502具体用于:检查所述文件名称是否合法,若所述文件名称合法,则查找所述文件名称所对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
[0060]可选地,所述查找单元502具体用于:根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
[0061]所述处理单元503,用于解析所述查找单元502查找的所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息。
[0062]可选地,所述处理单元503具体用于:解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
[0063]所述发送单元504,用于向所述应用程序发送所述处理单元503获取的所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0064]可选地,所述发送单元504具体用于:向所述应用程序发送所述存储信息,以使所述应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
[0065]本发明实施例提供的装置植入了本发明实施例一提供的方法,因此,本发明提供的装置的具体工作过程,在此不复赘述。
[0066]综上,上述文件系统可以导出文件使用的磁盘分组信息,即可以导出逻辑存储空间,使应用程序或者数据库可以知道文件对应的存储空间的连续性,根据存储空间的连续性,支持应用程序或者数据库使用伙伴算法管理存储空间,保证文件的物理连续性,实现优化数据库日志文件连续读写、数据文件小块随机读写目的。
[0067]需要说明的是,本发明实施例中以磁盘文件系统为例进行说明,但不限于磁盘文件系统,对于SSD、内存文件系统或者在连续性要求苛刻的场景中,同样可以采用本方案。
[0068]专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0069]结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或【技术领域】内所公知的任意其它形式的存储介质中。
[0070]以上所述的【具体实施方式】,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的【具体实施方式】而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种分配存储空间的方法,其特征在于,所述方法包括: 接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息; 查找所述文件信息所对应的文件,并查找所述文件对应的标识号; 解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息; 向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
2.根据权利要求1所述的方法,其特征在于,所述文件信息具体为文件名称,所述查找所述文件信息所对应的文件,并查找所述文件对应的标识号包括: 检查所述文件名称是否合法,若所述文件名称合法,则查找所述文件名称所对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
3.根据权利要求1所述的方法,其特征在于,所述文件信息具体为文件句柄,所述查找所述文件信息所对应的文件,并查找所述文件对应的标识号包括: 根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
4.根据权利要求1-3任一所述的方法,其特征在于,所述解析所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息包括: 解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
5.根据权利要求4所述的方法,其特征在于,向所述应用程序发送所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求包括: 向所述应用程序发送所述存储信息,用以所述应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
6.一种分配存储空间的装置,其特征在于,所述装置包括:接收单元、查找单元、处理单元和发送单元; 所述接收单元,用于接收应用程序发送的查询文件存储信息请求消息,所述查询文件存储信息请求消息中包括文件信息; 所述查找单元,用于查找所述接收单元接收的所述文件信息所对应的文件,并查找所述文件对应的标识号; 所述处理单元,用于解析所述查找单元查找的所述标识号,根据解析所述标识号的结果,获取所述文件在存储器上所占用的存储块的存储信息; 所述发送单元,用于向所述应用程序发送所述处理单元获取的所述存储信息,以使所述应用程序根据所述存储信息对存储块进行分类,并使所述应用程序根据所述应用程序的读写请求的连续性将分类后的存储块分配给所述读写请求。
7.根据权利要求6所述的装置,其特征在于,所述查找单元具体用于: 检查所述文件名称是否合法,若所述文件名称合法,则查找所述文件名称所对应的文件是否存在,若所述文件存在,则根据所述文件名称查找所述文件对应的标识号。
8.根据权利要求6所述的装置,其特征在于,所述查找单元具体用于: 根据所述文件句柄从所述操作系统的进程管理模块中查找所述文件句柄所对应的文件,并查找所述文件对应的标识号。
9.根据权利要求6-8任一所述的装置,其特征在于,所述处理单元具体用于: 解析所述标识号,根据解析所述标识号的结果,获取所述文件在所述存储器上占用的所有存储块的信息,所述所有存储块的信息包括多组存储块的信息,其中,每组存储块的信息包括:该组存储块的起始地址信息和该组存储块包含的存储块个数。
10.根据权利要求9所述的装置,其特征在于,所述发送单元具体用于: 向所述应用程序发送所述存储信息,以使所述应用程序根据所述每组存储块包含的存储块个数和预设的存储块的大小,确定所述每组存储块的总大小,并根据所述每组存储块的总大小,对所述各组存储块进行分类,并根据所述应用程序的读写请求的连续性将分类后的存储块分配给所 述读写请求。
【文档编号】G06F12/02GK103810114SQ201410083434
【公开日】2014年5月21日 申请日期:2014年3月7日 优先权日:2014年3月7日
【发明者】高文强 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1