用于操作系统的内存管理方法、装置及设备
技术领域
本申请涉及物联网技术领域,具体涉及一种用于操作系统的内存管理方法、装置及物联网设备。
背景技术
工业物联网(Industrial Internet of things,简称IIoT)是指物联网在工业领域的应用,是互联网与新一代信息技术与工业系统深度融合所形成的产业和应用生态。
内存管理是存储系统中的一项重要组成部分,在程序运行时提供内存资源的分配和释放服务。内存管理利用一系列的数据结构管理系统的物理内存,通过一系列的算法维护物理内存的分配和释放。
随着技术的进步,工业物联网逐渐成为工业的核心基础,在数据的全方位感知、快速处理和智能控制等方面有着巨大应用前景。同时,工业物联网对内存资源使用的要求也越来越高,所以高效的内存管理方法在其中扮演着越来越重要的角色。
在工业物联网中,当程序运行过程中,如果不能快速响应系统内存请求,那么会影响实时数据的准确性,增加数据流的计算时间,影响最终决策结果,造成企业较大的损失。通常情况下,系统的内存资源是有限的,较多的内存碎片也会造成系统无内存资源可用的情况,使得内存资源的利用率较低。
发明内容
本申请的目的是提供一种用于操作系统的内存管理方法及装置、一种物联网设备。
本申请第一方面提供一种用于操作系统的内存管理方法,包括:
在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;
当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;
当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。
本申请第二方面提供一种用于操作系统的内存管理装置,包括:
初始化模块,用于在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;
分配模块,用于当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;
释放模块,用于当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。
本申请第三方面提供一种物联网设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行以实现本申请第一方面所述的方法。
相较于现有技术,本申请提供的用于操作系统的内存管理方法、装置及物联网设备,在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。本申请具有如下优点:通过静态内存管理和动态内存管理相结合,保证分配和释放内存的实时性,提高内存的使用率,有效地规避了内存碎片问题,同时增加了内存检索的速度。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本申请的一些实施方式所提供的一种用于操作系统的内存管理方法的流程图;
图2示出了本申请的一些实施方式所提供的静态内存区域的示意图;
图3示出了本申请的一些实施方式所提供的已分配动态内存段和空闲动态内存段这两种数据结构;
图4示出了本申请的一些实施方式所提供的动态内存区域初始化之后的状态;
图5示出了本申请的一些实施方式所提供的空闲动态内存段的组织结构示意图;
图6示出了本申请的一些实施方式所提供的一种具体的工业物联网操作系统中内存管理装置的示意图;
图7示出了本申请的一些实施方式所提供的一种分配内存的动作流程图;
图8示出了本申请的一些实施方式所提供的一种释放内存的动作流程图;
图9示出了本申请的一些实施方式所提供的一种动态内存段合并与释放的三种情况的示意图;
图10示出了本申请的一些实施方式所提供的一种用于操作系统的内存管理装置的示意图;
图11示出了本申请的一些实施方式所提供的另一种用于操作系统的内存管理装置的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。
另外,术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供一种用于操作系统的内存管理方法及装置、一种物联网设备,下面结合附图进行说明。
请参考图1,其示出了本申请的一些实施方式所提供的一种用于操作系统的内存管理方法的流程图,如图所示,该方法包括以下步骤:
步骤S101:在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;
其中,所述静态内存区域包括多个内存池,每个所述内存池包括指定数量和指定大小的内存块;所述动态内存区域包括已分配内存段和多个内存空间大小不同的空闲内存段,所述多个空闲内存段组织为多级链表,每一级链表记录了内存空间大小在指定范围内的空闲内存段。
其中,所述操作系统可以为工业物联网操作系统。
步骤S102:当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;
具体的,步骤S102包括:
若用户请求分配的内存空间大小小于等于预设的静态内存阈值,且所述静态内存区域有相应空闲的内存块,则确定从所述静态内存区域为用户分配相应大小的内存空间;
若用户请求分配的内存空间大小大于预设的静态内存阈值,或者所述静态内存区域没有空闲的内存块,则确定从所述动态内存区域为用户分配相应大小的内存空间。
进一步的,确定从所述动态内存区域为用户分配相应大小的内存空间,具体为:
根据用户请求分配的内存空间大小所属的范围,从所述动态内存区域获取对应的链表;
采取最优匹配的方式,从所述链表中找到一块空闲内存段,分割所述空闲内存段为用户所需的内存空间大小和剩余内存段,并将用户所需的内存空间大小分配给用户,释放所述剩余内存段。
步骤S103:当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。
具体的,步骤S103包括:
若用户请求释放的内存地址是不合法的,则拒绝用户请求;所述内存地址不合法是指内存地址不在所述操作系统的物理内存区域或内存地址位于空闲动态内存区域;
若用户请求释放的内存地址是合法的,则解析所述内存地址所在的内存区域;
若所述内存地址在静态内存区域,则根据用户请求释放的内存地址,释放相应内存块到静态内存区域;
若所述内存地址在动态内存区域,则判断与要释放的内存段相邻的内存段是否是空闲的,如果相邻内存段是空闲的,则更新内存段大小为合并之后的内存段,获取所述更新内存段所属的链表,将所述更新内存段添加到该链表中,实现内存段的释放操作。
相较于现有技术,本申请实施例提供的上述用于操作系统的内存管理方法,通过在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。从而本申请具有如下优点:通过静态内存管理和动态内存管理相结合,保证分配和释放内存的实时性,提高内存的使用率,有效地规避了内存碎片问题,同时增加了内存检索的速度。
下面以一个具体实施例对本发明进行详细说明,本实施例将采用RISC-V架构的物联网开发板Kendryte K210为具体示例介绍上述用于操作系统中的内存管理方法。
下面结合具体装置阐述步骤如下。
步骤1:首先在工业物联网操作系统的初始化过程中执行内存存储器的映射操作。下表1提供了在Kendryte K210物联网开发板上的系统启动时设定的内存存储器映射情况。其中,使用start_Address变量记录映射起始地址,值为0x8000000,space_size变量记录映射的空间大小,值为6MB。
映射起始地址 |
映射空间大小 |
0x80000000 |
6MB |
表1:开发板上的SRAM映射情况。
步骤2:然后执行程序计算程序的各个数据区所占用的地址空间,生成一个map映射文件,其中规定了系统的代码存储、数据存储、堆、栈等存储区域。
步骤3:在工业物联网操作系统(简称:系统)为系统的代码存储、数据存储、堆、栈等存储区域分配好地址空间后,结合步骤1的起始地址和映射空间大小,获取内存管理区域的物理内存起始地址和结束地址,分别为0x800a6d49和0x80600000。
步骤4:Kendryte K210物联网开发板不支持非对齐地址访问,因此,系统要对内存管理区域的物理内存起始地址和结束地址进行预处理操作,执行物理内存起始地址和结束地址的8字节对齐操作,更新内存管理区域的物理内存起始地址和结束地址分别为0x800a7000,0x806000000。
步骤5:开始执行内存区域的划分。首先为静态内存分配内存区域。静态内存例如包含两个链表:分别为静态链表头1和静态链表头2。其中,每个链表都具有block_size静态内存块大小、total_count静态内存块的总个数、free_count空闲内存块的总个数和free_list空闲链表这四个属性,其中block_size属性记录了当前链表中每个静态内存块的大小,total_count属性记录了系统初始化之后分配给该链表中静态内存块的总个数,free_count属性记录了该链表中还可以分配给用户静态内存块的个数,free_list属性则真正指向各个空闲静态内存块。
步骤6:本发明的实施例中,如图2所示,静态链表头1指向的内存池中存放的静态内存块的大小都是32字节,静态链表头2所指向的内存池中存放的静态内存块的大小都是64字节。此外,系统分别配置了静态链表头1和静态链表头2中静态内存块的total_count个数为256和128。因此,静态链表头1最多可以响应用户256次的小于32字节的内存请求,静态链表头2最多可以响应用户128次的介于33-64字节之间的内存请求,一旦对应的静态内存块分配完了,系统会向动态内存区域寻求内存空间分配。
步骤7:剩下的内存区域作为动态内存分配给动态内存区域。动态内存区域管理用到了三种重要的数据结构,分别是已分配动态内存段、空闲动态内存段和动态内存管理数据结构。图3显示了已分配动态内存段和空闲动态内存段这两种数据结构。其中,已分配动态内存包括元数据信息和用户的数据段(用户数据),元数据信息中的size属性记录了该动态内存段的内存大小,prev_size属性则记录了该动态内存段前一个相邻动态内存段的内存大小,从而可以获取前一个相邻动态内存段。用户数据则是分配给用户使用的内存空间。空闲动态内存段的元数据信息具有size、prev_size、prev和next这四个属性,其中,size和prev_size属性与已分配动态内存段的对应属性表示的意义相同,prev属性记录了前一个空闲动态内存段,最后一个next属性则记录了下一个空闲动态内存段。
步骤8:图4展示了动态内存区域初始化之后的状态,系统将动态内存区域划分为三个动态内存段,分别是起始地址处已分配动态内存段和结尾已分配动态内存段,中间区域的内存用一个空闲动态内存段记录。
步骤9:动态内存管理数据结构是动态内存区域管理中的核心数据结构,用于组织所有的空闲动态内存段。所述动态内存管理数据结构具有total_size、dynamic_start、dynamic_end和freeLists这四个属性,其中,total_size属性用于记录动态内存区域的大小,dynamic_start属性用于记录起始地址处已分配动态内存段,dynamic_end属性用于记录结尾处已分配动态内存段,freeLists属性是一个多级链表,每一级链表记录了内存大小在指定范围的空闲动态内存段。
具体地,根据空闲内存段的大小,系统判断空闲内存段所属动态链表,然后将空闲内存段插入不同的空闲链表中。如下表2所示,在本发明的一个实施例中,系统配置空闲链表的个数为10。当动态内存段大小在1-31字节之间,则插入到空闲链表freeList1中,当动态内存段大小在32-63字节之间时,则插入到空闲链表freeList2中,需要特别说明的是,当动态内存段大小大于或者等于8192字节时,都插入到空闲链表freeList10中。
申请的内存范围 |
分配动态链表头 |
1 ~ 31字节 |
freeList1 |
32 ~ 63字节 |
freeList2 |
64 ~127字节 |
freeList3 |
…… |
…… |
8192 ~MAX(MAX由系统配置) |
freeList10 |
表2:内存与动态链表头的对应关系。
在系统运行了一段时间之后,动态内存管理结构的空闲链表将会填充各种大小的空闲动态内存段,如图5所示,空闲链表freeList1中记录了三段空闲动态内存段,内存段大小分别为18字节、25字节和32字节;空闲链表freeList2中记录了4段空闲动态内存段,内存段大小分别为40字节、44字节、56字节和63字节;最后一级链表中记录了两段空闲动态内存段,内存段大小分别为9000字节和5555640字节。
步骤10:至此,系统完成了在Kendryte K210物联网开发板上内存管理的初始化操作,即完成静态内存区域和动态内存区域的划分。
下面结合图6对静态内存区域管理和动态内存区域管理进行介绍。
步骤11:在用户发起内存分配请求时,系统根据用户申请的内存大小计算8字节对齐之后需要分配的内存大小,如果所需内存大小在1-64字节的范围,那么内存分配任务由静态内存管理模块所负责;
如果静态内存管理模块无法为用户分配内存或者所需内存大小高于64字节,那么内存分配任务则由动态内存管理模块所负责,最终返回分配结果给用户。
在用户发起内存释放请求时,所述分配释放请求解析根据用户提供的内存地址决定后续的操作:
如果所述内存地址是不合法的,则直接返回结果给用户。
如果所述内存地址是合法地址,分配释放请求解析模块解析所述内存地址所属内存区域,所述内存地址在静态内存区域,则内存分配任务由静态内存管理模块负责;所述内存地址在动态内存区域,则内存分配任务由动态内存管理模块负责。
步骤12,静态内存管理模块的功能包括从静态内存区域分配静态内存块和释放静态内存块到静态内存区域。
步骤13,分析从静态内存区域分配静态内存块的过程,包括三种情况。
第一种情况,在本发明的一个实施例中,当用户请求分配内存大小为30字节,那么分配释放请求解析模块解析该内存大小由静态内存管理模块负责。系统获取图2中的静态链表头1,从静态链表头1中获取一个静态内存块返回给用户;
第二种情况,在本发明的一个实施例中,当用户请求分配内存大小为56字节,那么分配释放请求解析模块解析该内存大小由静态内存管理模块负责。系统获取图2中的静态链表头2,从静态链表头2中获取一个静态内存块返回给用户;
第三种情况,在本发明的一个实施例中,若所获得的静态链表头是一个空的链表,即没有空闲的静态内存块可用,那么通知分配释放请求解析模块在静态内存区域中内存分配失败。
步骤14,分析向静态内存区域释放静态内存块的过程,当用户请求释放内存,所述内存用ptr表示,释放操作包括三种情况。
第一种情况,在本发明的一个实施例中,所述ptr内存地址是不合法的,则直接返回释放操作。
第二种情况,在本发明的一个实施例中,所述ptr指向的静态内存块属于静态链表头1管理,则将所述ptr指向的静态内存块放置到链表头1的头部;
第三种情况,在本发明的一个实施例中,若所述ptr指向的静态内存块属于链表头2管理,则将所述ptr指向的静态内存块放置到链表头2的头部。
步骤15,可见,本发明提出的静态内存管理方法,静态内存块面向小块内存分配,分配固定大小的内存块,在分配和释放内存时,提供热数据的管理,提供O(1)的时间复杂度,保证了分配的实时性。
步骤16,动态内存管理模块可以分为内存计算单元,动态内存分配单元和动态内存释放单元。
步骤17,系统根据要分配或者要释放的内存段大小计算要操作的内存段链表头,当内存段大小为30字节,那么内存计算单元计算之后将获取空闲动态链表头freeList1,当内存段大小为100字节,那么内存计算单元计算之后将获取动态链表头freeList3。
步骤18,在本发明的一个实施例中,当用户请求从动态内存段申请内存时,动态内存管理模块只能有以下几种分配情况:
第一种分配情况:用户请求分配30个字节,并且系统已经知道静态内存区域无法分配。内存计算单元计算30字节对应的空闲动态链表,获取freeList1,则根据图7所示的分配内存的动作流程图以及图5所示的空闲链表结构,freeList1链表中有一个32字节内存大小可以满足用户的需求,之后进行内存块的分割操作,32可以分配为30字节 + 2字节,但是2字节小于系统要求的8字节对齐大小,因此将32字节内存返回给用户;
第二种分配情况:用户请求分配45个字节,并且系统已经知道静态内存区域无法分配。内存计算单元计算45字节对应的空闲动态链表,获取freeList2,则根据图7所示的分配内存的动作流程图以及图5所示的空闲链表结构,freeList2链表中有一个56字节内存大小可以满足用户的需求,之后进行内存块的分割操作,56可以分配为45字节 + 11字节,11字节小于系统要求的8字节对齐大小,因此,除了返回45字节动态内存给用户,还要执行11字节的内存释放操作;
第三种分配情况:用户请求分配8000个字节。内存计算单元计算8000字节对应的空闲动态链表,获取freeList9,则根据图7所示的分配内存的动作流程图以及图5所示的空闲链表结构,freeList9链表中没有空闲动态内存段,根据图7所示,没有找到可分配的动态内存段并且freeList9不是最后一级链表,更新链表头到freeList10,freeList10链表中动态内存段可以满足用户的需求,之后进行内存块的分割操作,9000可以分配为8192字节 + 808字节,808字节大于系统要求的8字节对齐大小,因此,除了返回8192动态内存给用户,还要执行808字节的释放操作;
第四种分配情况:用户请求分配6000000个字节。内存计算单元计算6000000字节对应的空闲动态链表,获取freeList10,则根据图7所示的流程图以及图5所示的空闲链表结构,freeList10链表中没有空闲动态内存段,根据图7所示,没有找到可分配的动态内存段并且freeList10是最后一级链表,内存分配操作失败,结束内存分配操作;
步骤19,在本发明的一个实施例中, 当用户请求释放内存,所述内存用ptr表示。分配释放请求解析模块解析判断ptr所述区域为动态内存区域,则如图8所示的释放内存的动作流程图,系统将释放ptr所指向的内存区域到动态内存段中。
释放一块动态内存段,图9提供了动态内存段释放和合并的三种情况,其中,每一个动态内存段都包含了两个指针,分别指向前一个相邻内存段和后一个相邻内存段,下面介绍图9展示的三种释放并合并的三种情况:
第一种情况,如图9(a)所示,四块动态内存段,其中,A,B,D三段为已分配动态内存段,C为空闲动态内存段。当前,系统要释放内存段B,动态内存管理模块检测到B内存段的后一个相邻C也是空闲内存段,则系统会合并内存段B,C,然后释放BC合并之后的内存段。
第二种情况,如图9(b)所示,A,B,C,D四块已分配内存段。系统要释放内存段B,动态内存管理模块检测到B的相邻内存段都是已分配内存段,那么直接释放内存段B。
第三种情况,如图9(c)所示,四块动态内存段,其中,A,C是空闲内存段,B,D是已分配内存段。系统要释放内存段B,动态内存管理模块检测到B的前一个相邻内存段A和后一个相邻内存段B都是空闲内存段,那么先合并A,B,C三个内存段形成一个大的空闲内存段ABC,然后释放合并形成的ABC空闲内存段。
步骤20,可见,本发明提出的动态内存管理方法,面向大块内存分配,并且以字节为分配粒度。在内存的分配过程中,采用最先匹配算法,快速检索到最合适的内存块,减低内存使用率较低的问题。此外,在动态内存段释放过程中,相邻内存块合并能够显著减少内存碎片,同时增加检索的速度支持不连续内存管理。
在上述的实施例中,提供了一种用于操作系统的内存管理方法,与之相对应的,本申请还提供一种用于操作系统的内存管理装置。请参考图10,其示出了本申请的一些实施方式所提供的一种用于操作系统的内存管理装置的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
如图10所示,用于操作系统的内存管理装置100可以包括:
初始化模块101,用于在操作系统启动阶段,将所述操作系统所需的物理内存划分为静态内存区域和动态内存区域;
分配模块102,用于当接收到用户的内存分配请求时,根据用户请求分配的内存空间大小,确定从所述静态内存区域或所述动态内存区域为用户分配相应大小的内存空间;
释放模块103,用于当接收到用户的内存释放请求时,根据用户请求释放的内存地址,确定从所述静态内存区域或动态内存区域释放相应的内存空间。
根据本申请的一些实施方式中,所述静态内存区域包括多个内存池,每个所述内存池包括指定数量和指定大小的内存块;所述动态内存区域包括已分配内存段和多个内存空间大小不同的空闲内存段,所述多个空闲内存段组织为多级链表,每一级链表记录了内存空间大小在指定范围内的空闲内存段。
请参考图11,其示出了本申请的一些实施方式所提供的另一种用于操作系统的内存管理装置的示意图;
根据本申请的一些实施方式中,如图11所示,所述分配模块102,包括:
静态分配单元201,用于若用户请求分配的内存空间大小小于等于预设的静态内存阈值,且所述静态内存区域有相应空闲的内存块,则确定从所述静态内存区域为用户分配相应大小的内存空间;
动态分配单元202,用于若用户请求分配的内存空间大小大于预设的静态内存阈值,或者所述静态内存区域没有空闲的内存块,则确定从所述动态内存区域为用户分配相应大小的内存空间。
根据本申请的一些实施方式中,所述动态分配单元202,具体用于:
根据用户请求分配的内存空间大小所属的范围,从所述动态内存区域获取对应的链表;
采取最优匹配的方式,从所述链表中找到一块空闲内存段,分割所述空闲内存段为用户所需的内存空间大小和剩余内存段,并将用户所需的内存空间大小分配给用户,释放所述剩余内存段。
根据本申请的一些实施方式中,所述释放模块103,包括:
解析单元301,用于若用户请求释放的内存地址是不合法的,则拒绝用户请求;所述内存地址不合法是指内存地址不在所述操作系统的物理内存区域或内存地址位于空闲动态内存区域;若用户请求释放的内存地址是合法的,则解析所述内存地址所在的内存区域;
静态释放单元302,用于若所述内存地址在静态内存区域,则根据用户请求释放的内存地址,释放相应内存块到静态内存区域;
动态释放单元303,用于若所述内存地址在动态内存区域,则判断与要释放的内存段相邻的内存段是否是空闲的,如果相邻内存段是空闲的,则更新内存段大小为合并之后的内存段,获取所述更新内存段所属的链表,将所述更新内存段添加到该链表中,实现内存段的释放操作。
本申请实施例提供的用于操作系统的内存管理装置10,与本申请前述实施例提供的用于操作系统的内存管理方法出于相同的发明构思,具有相同的有益效果。
本申请实施方式还提供一种与前述实施方式所提供的用于操作系统的内存管理方法对应的物联网设备,例如工业物联网设备,执行上述用于操作系统的内存管理方法。所述物联网设备包括:处理器,存储器;所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行本申请前述任一实施方式所提供的用于操作系统的内存管理方法。
本申请实施例提供的物联网设备与本申请实施例提供的用于操作系统的内存管理方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。