《一种存储系统的块设备数据缓存管理方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种存储系统的块设备数据缓存管理方法及系统.pdf(16页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102915282 A (43)申请公布日 2013.02.06 C N 1 0 2 9 1 5 2 8 2 A *CN102915282A* (21)申请号 201210369535.7 (22)申请日 2012.09.28 G06F 12/16(2006.01) (71)申请人浪潮(北京)电子信息产业有限公司 地址 100085 北京市海淀区上地信息路2号 2-1号C栋1层 (72)发明人施培任 王少锋 (74)专利代理机构北京安信方达知识产权代理 有限公司 11262 代理人栗若木 曲鹏 (54) 发明名称 一种存储系统的块设备数据缓存管理方法及 系统 (57)。
2、 摘要 本发明公开了一种存储系统的块设备数据缓 存管理方法及系统,克服目前采用BBU对内存的 保护以及BBU在块设备缓存中的应用还没有较为 成熟的技术的不足,该方法包括:存储系统的所 有内存条都被后备电池模组(BBU)保护时,分配 部分内存条用于块设备数据的掉电保护;存储系 统的部分内存条被BBU保护时,将被BBU保护的内 存条用于块设备数据的掉电保护。本申请的实施 例提供了一种具有BBU保护内存的计算机系统尤 其是存储系统上恢复供电时如何重新识别数据的 技术方案。 (51)Int.Cl. 权利要求书1页 说明书8页 附图6页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要。
3、求书 1 页 说明书 8 页 附图 6 页 1/1页 2 1.一种存储系统的块设备数据缓存管理方法,包括如下步骤: 存储系统的所有内存条都被后备电池模组(BBU)保护时,分配部分内存条用于块设备 数据的掉电保护; 存储系统的部分内存条被BBU保护时,将被BBU保护的内存条用于块设备数据的掉电 保护。 2.根据权利要求1所述的方法,其中: 用于块设备数据的掉电保护的内存条包括多段物理地址连续的内存。 3.根据权利要求2所述的方法,其中: 多段物理地址连续的内存中,第一段物理地址连续的内存设置有块设备信息区、数据 单元信息区以及数据单元区,存储的块设备信息和数据包括超级块信息、块设备信息位图 以及。
4、数据单元信息位图;其余段物理地址连续的内存设置有数据单元区,存储超级块信息。 4.根据权利要求3所述的方法,其中: 每段物理地址连续的内存的超级块信息占据第一个物理页大小的存储空间,块设备信 息位图起始位置紧邻存储超级块信息的位置之后,块设备信息位图大小大于支持的最大块 设备数量/8个字节且和超级块信息的位置对齐。 5.根据权利要求3所述的方法,其中: 块设备信息位图每一字位表示一个块设备信息结构是否有效。 6.根据权利要求3所述的方法,其中: 块设备信息区紧邻块设备信息位图之后,块设备信息区的大小等于支持的最大的块设 备数量与块设备信息大小的乘积且与超级块信息对齐。 7.根据权利要求3所述的。
5、方法,其中: 数据单元信息位图每一个字位表示一个数据单元信息结构是否有效。 8.根据权利要求3所述的方法,其中: 数据单元包含连续的整数的物理内存页。 9.一种存储系统的块设备数据缓存管理系统,包括: 判断模块,配置为判断存储系统的所有内存条是否都被后备电池模组(BBU)保护; 设置模块,配置为存储系统的所有内存条都被后备电池模组(BBU)保护时,分配部分 内存条用于块设备数据的掉电保护;否则,将被BBU保护的内存条用于块设备数据的掉电 保护。 10.根据权利要求9所述的系统,其中: 所述设置模块配置为用于块设备数据的掉电保护的内存条包括多段物理地址连续的 内存。 权 利 要 求 书CN 10。
6、2915282 A 1/8页 3 一种存储系统的块设备数据缓存管理方法及系统 技术领域 0001 本发明涉及数据存储和保护领域,尤其涉及一种存储系统的块设备数据缓存管理 方法及系统。 背景技术 0002 磁盘是现在计算机系统的非掉电易失的主要存储设备。虽然磁盘内部存储速度和 外部接口速度不断提高,但是其存取速度仍然无法和内存相比,尤其是与随机存取速度相 比。 0003 为了提高存储容量和性能,通过独立磁盘冗余阵列(Redundant Array of Independent Disks,简记为RAID)技术可以将多个物理磁盘逻辑组合起来形成一个逻辑磁 盘,但是其性能也远低于随机存取内存(RAM。
7、)。 0004 这些物理磁盘、RAID逻辑磁盘都称为块设备,其特点是读写数据时必须以一个块 大小为基本单元来进行,一般块大小为512个字节。 0005 为了提高存储效率和数据访问速度,计算机系统采用数据缓存机制,把要写入的 数据先写到内存中,后续再异步写回到块设备上;读取数据时先查看内存中是否已有有效 数据,有则从内存上读取,否则从块设备读取并将数据存放到内存中。 0006 这种数据缓存机制利用内存较高的随机存取性能提高了块设备的数据访问效率, 不过也因此存在着如果系统突然断电则很可能丢失数据的缺陷和风险,因为内存中可能存 在还未写回到块设备的“脏数据”。 0007 为了克服这种缺陷,一些计算。
8、机系统包括计算机存储系统增加了后备电池模组 (Battery Backup Unit,简记为BBU)。当系统突然断电时BBU持续给部分或者全部内存供 电,保持这部分内存的数据。在BBU供电的这段时间内如果系统恢复供电,则可以识别BBU 保护的内存中的块设备缓存数据,避免数据丢失。但如何管理BBU保护的内存,以及块设备 如何进行缓存的技术,目前还没有得到较多的研究和较好的发展。 发明内容 0008 本发明所要解决的技术问题是克服目前采用BBU对内存的保护以及BBU在块设备 缓存中的应用还没有较为成熟的技术的不足。 0009 为了解决上述技术问题,本发明提供了一种存储系统的块设备数据缓存管理方 法。
9、,包括如下步骤: 0010 存储系统的所有内存条都被后备电池模组(BBU)保护时,分配部分内存条用于块 设备数据的掉电保护; 0011 存储系统的部分内存条被BBU保护时,将被BBU保护的内存条用于块设备数据的 掉电保护。 0012 优选地,用于块设备数据的掉电保护的内存条包括多段物理地址连续的内存。 0013 优选地,多段物理地址连续的内存中,第一段物理地址连续的内存设置有块设备 说 明 书CN 102915282 A 2/8页 4 信息区、数据单元信息区以及数据单元区,存储的块设备信息和数据包括超级块信息、块设 备信息位图以及数据单元信息位图;其余段物理地址连续的内存设置有数据单元区,存储。
10、 超级块信息。 0014 优选地,每段物理地址连续的内存的超级块信息占据第一个物理页大小的存储空 间,块设备信息位图起始位置紧邻存储超级块信息的位置之后,块设备信息位图大小大于 支持的最大块设备数量/8个字节且和超级块信息的位置对齐。 0015 优选地,块设备信息位图每一字位表示一个块设备信息结构是否有效。 0016 优选地,块设备信息区紧邻块设备信息位图之后,块设备信息区的大小等于支持 的最大的块设备数量与块设备信息大小的乘积且与超级块信息对齐。 0017 优选地,数据单元信息位图每一个字位表示一个数据单元信息结构是否有效。 0018 优选地,数据单元包含连续的整数的物理内存页。 0019 。
11、本发明还提供了一种存储系统的块设备数据缓存管理系统,包括: 0020 判断模块,配置为判断存储系统的所有内存条是否都被后备电池模组(BBU)保 护; 0021 设置模块,配置为存储系统的所有内存条都被后备电池模组(BBU)保护时,分配 部分内存条用于块设备数据的掉电保护;否则,将被BBU保护的内存条用于块设备数据的 掉电保护。 0022 优选地,所述设置模块配置为用于块设备数据的掉电保护的内存条包括多段物理 地址连续的内存。 0023 与现有技术相比,本申请的实施例提供了一种在具有BBU保护内存的计算机系统 尤其是存储系统上如何分配内存记录块设备信息、缓存数据信息的技术方案。本申请的实 施例提。
12、供了一种具有BBU保护内存的计算机系统尤其是存储系统上恢复供电时如何重新 识别数据的技术方案。 0024 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利 要求书以及附图中所特别指出的结构来实现和获得。 附图说明 0025 附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本 申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。 0026 图1为本申请实施例中受BBU保护的第一段物理地址连续内存的数据布局示意 图。 0027 图2为本申请实施例中受BB。
13、U保护的非第一段物理地址连续内存的数据布局示意 图。 0028 图3为本申请实施例系统启动时对BBU保护的内存的处理流程示意图。 0029 图4为本申请实施例系统添加支持掉电保护的块设备的流程示意图。 0030 图5为本申请实施例向块设备中写入数据的流程示意图。 0031 图6为本申请实施例回收数据单元的流程示意图。 0032 图7为本申请实施例系统重新启动对BBU保护内存的数据恢复流程示意图。 说 明 书CN 102915282 A 3/8页 5 0033 图8为本申请实施例的存储系统的块设备数据缓存管理系统的构造示意图。 具体实施方式 0034 以下将结合附图及实施例来详细说明本发明的实施。
14、方式,借此对本发明如何应用 技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。本申请实 施例以及实施例中的各个特征在不相冲突前提下的相互结合,均在本发明的保护范围之 内。 0035 本申请实施例的块设备数据缓存管理方法主要用于具有后备电池模组(Battery Backup Unit,简记BBU)的存储系统(比如计算机系统),其BBU在系统外部电源中断后持 续给系统的部分内存或者全部内存供电,避免所供电内存上的数据丢失。 0036 现代计算机系统对内存采用分页(Page)访问机制,在CPU保护模式下,系统进程 使用逻辑地址访问内存,CPU自动将逻辑地址转化为虚拟地址、物理地址。
15、,再对物理地址对 应的内存进行读写。 0037 存储空间较大的计算机系统或者其他的存储系统,一般具有多根内存条,每根内 存条的内存物理地址是连续的,记为一段内存。不同内存条之间的物理地址可能不连续,因 此系统可能具有多段内存。 0038 对于所有内存条都被BBU保护的情况,将部分内存条的内存作为系统通用内存, 用于系统内核、进程、页表、通用内存管理,剩余的内存条的内存用于块设备信息和数据的 保存;对于部分内存条而非全部内存条被BBU保护的情况,将不被BBU保护的内存条作为系 统通用内存,而将BBU保护的内存条用于块设备信息和数据的保存。 0039 BBU保护的用于保存块设备信息和数据的内存,包。
16、括多段物理地址连续的内存,其 中第一段物理地址连续的内存(可称之为第一内存段)如图1所示,设置有块设备信息区、 数据单元信息区以及数据单元区,存储的块设备信息和数据包括:超级块信息、块设备信息 位图以及数据单元信息位图;其余段的内存(可称之为非第一内存段)如图2所示,设置有 数据单元区,存储超级块信息。 0040 其中第一内存段的超级块信息结构如下: 0041 struct bbu_cache_superblock 0042 char magicN;/魔幻数,用于表明该段内存是有效的BBU保护内存 0043 int version;/本超级块结构的版本号 0044 int total_segs。
17、;/内存段总数 0045 int seg_id;/本内存段编号 0046 unsigned long seg_size;/本内存段大小 0047 int max_bdev_num;/支持的最大块设备数量 0048 unsigned long bdev_info_bmp_start;/块设备信息位图起始位置 0049 unsigned long bdev_info_bmp_size;/块设备信息位图大小 0050 unsigned long bdev_info_zone_start;/块设备信息区起始位置 0051 unsigned long bdev_info_zone_size;/块设备信息。
18、区大小 0052 unsigned long io_cache_bmp_start;/ 0053 unsigned long io_cache_bmp_size;/ 说 明 书CN 102915282 A 4/8页 6 0054 unsigned long io_cache_info_zone_start;/数据单元信息区起始位置 0055 unsigned long io_cache_info_zone_size;/数据单元信息区大小 0056 unsigned long io_cache_zone_start;/数据单元区起始位置 0057 unsigned long io_cache_z。
19、one_size;/数据单元区大小 0058 /本数据单元区第一个数据单元在全局数据单元中的编号 0059 unsigned long io_cache_first_unit; 0060 ; 0061 非第一内存段的超级块信息结构为: 0062 struct bbu_cache_seg_superblock 0063 char magicN;/魔幻数,用于表明该段内存是有效的BBU保护内存 0064 int version;/本超级块结构的版本号 0065 int total_segs;/内存段总数 0066 int seg_id;/本内存段编号 0067 unsigned long seg_。
20、size;/本内存段大小 0068 unsigned long io_cache_zone_start;/数据单元区起始位置 0069 unsigned long io_cache_zone_size;/数据单元区大小 0070 /本数据单元区第一个数据单元在全局数据单元中的编号 0071 unsigned long io_cache_first_unit; 0072 ; 0073 每段物理地址连续的内存的超级块信息占据内存段的第一个物理页大小PAGE_ SIZE的存储空间,而块设备信息、数据单元信息只保存在第一个内存段中。 0074 块设备信息位图起始位置bdev_info_bmp_star。
21、t紧邻存储超级块信息的位置(即 PAGE_SIZE)之后,块设备信息位图大小bdev_info_bmp_size大于支持的最大块设备数量 (max_bdev_num)/8个字节且和PAGE_SIZE对齐。 0075 块设备信息位图bdev_info_bmp的结构为简单的连续内存,每一字位表示一个 块设备信息结构是否有效,即块设备信息区bdev_info_zone就是块设备信息结构数组, bdev_info_bmp的第i位表示bdev_info_zone中第i个块设备信息结构是否有效。 0076 块设备信息结构定义为: 0077 struct bdev_info_s 0078 unsigned 。
22、long bdev_id;/块设备唯一标识号 0079 char bdev_name256;/块设备名称 0080 unsigned long bdev_size;/块设备大小 0081 ; 0082 块设备信息区紧邻块设备信息位图之后,其大小bdev_info_zone_size等于max_ bdev_num与块设备信息(struct bdev_info_s)大小的乘积且和PAGE_SIZE对齐。 0083 数据单元信息位图io_cache_bmp的结构也为连续内存,每一个字位表示一个数 据单元信息结构是否有效,即数据单元信息区io_cache_info_zone就是数据单元信息结 构数组,。
23、io_cache_bmp的第i位表示io_cache_info_zone中第i个数据单元信息结构是 否有效。 说 明 书CN 102915282 A 5/8页 7 0084 数据单元是指保存块设备读写数据的基本内存单元,包含连续的整数个的物理内 存页,一个数据单元包含多个连续的块设备的数据块。数据单元信息是表示一个数据单元 的相关信息,结构如下: 0085 structio_cache_unit_info_s 0086 unsigned long bdev_id; 0087 /该数据单元保存的数据位于块设备中的偏移量,单位为数据单元大小。 0088 unsigned long index; 0。
24、089 /该数据单元状态,使用其中一个位Cache_Unit_Dirty表示该数据单元数据是 否为“脏” 0090 unsigned long flags; 0091 /该数据单元中各数据块是否有“脏”数据,第i位表示第i块数据状态 0092 unsigned long buf_block_stat; 0093 ; 0094 数据单元信息位图紧邻块设备信息区之后,其大小计算方法为: 0095 (1)io_cache_bmp_size(所有保护内存段大小之和数据单元大小)/8; 0096 (2)将io_cache_bmp_size向上对齐物理页大小PAGE_SIZE。 0097 数据单元信息区紧。
25、邻数据单元信息位图之后,其大小计算方法为: 0098 (1)io_cache_info_size(所有保护内存段大小之和数据单元大 小)sizeof(struct io_cache_unit_info_s); 0099 (2)将io_cache_info_size向上对齐物理页大小PAGE_SIZE。 0100 所有内存段的数据单元的编号在逻辑上是连续的,即假设第一个内存段具有M个 数据单元,则第二个内存段的第一个数据单元的全局编号为第M+1个。 0101 如果计算机系统的内存都被BBU保护,则分配部分内存条作为系统通用内存,剩 余的内存条用于块设备数据掉电保护。用于块设备数据掉电保护的内存由。
26、多个内存段组 成,每段内存结构如前所述。本申请的实施例在系统启动时,对BBU保护的内存的处理过 程,如图3所示,主要包括如下的步骤。 0102 步骤S31,系统启动时,将BBU保护的内存映射到页表中,从而可以使系统进程可 通过逻辑地址访问BBU保护的内存。除了BBU保护的内存以外,系统的其他内存也会被映 射到页表中作为操作系统的常规内存使用。 0103 步骤S32,查看每段内存的超级块的magic字段,如果和预设的值相等,则认为系 统经历了突然断电和启动且BBU持续供电保护了内存数据,然后转至后文中的块设备数据 恢复处理流程;否则认为内存段中数据无效,可执行步骤S33进行初始化。 0104 步。
27、骤S33,将所有内存段内存的所有字节写0。 0105 步骤S34,对第一内存段的超级块结构进行设置,具体包括设置以下字段:魔幻数 magic、版本号version、内存段数total_segs、本内存段编号seg_id(等于1)、本内存段 大小seg_size、支持的最大的块设备数量max_bdev_num、块设备信息位图起始位置bdev_ info_bmp_start和块设备信息位图大小bdev_info_bmp_size。 0106 步骤S35,计算和设置第一内存段超级块结构的以下字段:数据单元区起始位置 io_cache_zone_start和数据单元区大小io_cache_zone_s。
28、ize,其中数据单元区起始位置 说 明 书CN 102915282 A 6/8页 8 紧邻数据单元信息区之后,其大小为该段内存剩余大小且和数据单元大小对齐。 0107 步骤S36,对非第一内存段设置超级块信息struct bbu_cache_seg_superblock, 其中该段的数据单元区位于超级块区之后,数据单元区大小为该段内存剩余大小且和数据 单元大小对齐。 0108 步骤S37,使用系统通用内存,建立空闲数据单元链表(free_cache_list)和已使 用数据单元链表(busy_cache_list),链表节点采用编号和逻辑地址来记录数据单元,将所 有数据单元都作为空闲未使用状态。
29、加入到free_cache_list中,busy_cache_list链表为 空。 0109 本申请的实施例中,对已经创建的块设备分配有唯一标识号,系统添加一个支持 掉电保护的块设备流程如图4所示,主要包括如下步骤。 0110 步骤S41,从块设备信息位图第一位开始查找非0的位,根据该位的序号得到对应 的块设备信息结构。 0111 步骤S42,设置块设备信息结构,包括设置块设备的唯一标识号、设备路径以及大 小等等。 0112 步骤S43,将该设备信息结构对应在块设备信息位图中的位设置为1。 0113 本申请的实施例可以向块设备中写入数据。本申请的实施例中,系统使用适当的 缓存结构如基树、哈希链。
30、表来组织块设备的数据单元,该结构的节点单元如基树节点、链表 节点从系统通用内存中分配即可,而数据单元实体位于BBU保护内存段中。向块设备中写 入数据,如图5所示,主要包括如下步骤。 0114 步骤S51,从空闲数据单元链表free_cache_list中获取一个空闲数据单元,将该 数据单元加入到该块设备的缓存结构(基树/哈希链表等)中,并将该数据单元加入到已 使用数据单元链表busy_cache_list中。 0115 步骤S52,根据该数据单元的编号查找和设置位于第一内存段中的数据单元信息 区io_cache_info_zone中的数据单元信息结构struct io_cache_unit_i。
31、nfo_s,其中索引 (index)字段为该数据单元的数据位于该块设备数据的偏移量(以数据单元大小为单位), bdev_id设置为该块设备的唯一标号,flags字段和buf_block_stat字段(一个数据结构 字段,表示该数据单元中各数据块是否有“脏”数据,第i位表示第i块数据状态)都设置 为0。 0116 步骤S53,根据该数据单元的编号查找和设置位于第一内存段中数据单元信息位 图中对应的位为1。 0117 步骤S54,将应用层数据复制到数据单元中对应的块上,并设置数据单元信息结构 中的buf_block_stat的对应的位为1,表示该块有“脏”数据。 0118 步骤S55,设置数据单元。
32、信息结构中的flags字段的位Cache_Unit_Dirty为1,表 示该数据单元有“脏”数据。 0119 本申请的实施例可以释放回收数据单元。本申请的实施例中,系统根据块设备缓 存结构(基树/哈希链表等)查找数据单元,并将数据写回到块设备存储介质(磁盘)上 后,清除数据单元信息结构中的buf_block_stat字段所有位以及将flags字段的位Cache_ Unit_Dirty置为0,此后可以将数据单元回收。本申请的实施例中,回收数据单元的流程如 图6所示,主要包括如下步骤。 说 明 书CN 102915282 A 7/8页 9 0120 步骤S61,从已使用数据单元链表busy_cac。
33、he_list中查找一个数据不为“脏”的 数据单元。 0121 步骤S62,将该数据单元对应的数据单元信息位图中的位设置为0。 0122 步骤S63,将该数据单元加入到空闲数据单元链表free_cache_list中。 0123 本申请的实施例可以删除一个块设备。本申请的实施例中,删除一个块设备前应 将所有“脏”数据都写回到块设备存储介质(磁盘)上,然后将该设备对应BBU保护内存段 中的块设备信息位图中的位设置为0。 0124 本申请的实施例在执行块设备数据恢复处理流程时,如前文系统启动时对BBU保 护的内存的处理流程所述,当系统在使用中出现意外掉电时,BBU将持续给所保护的内存供 电。来电后。
34、系统重新启动,对BBU保护内存的数据恢复流程,如图7所示,主要包括如下步 骤。 0125 步骤S71,查看第一内存段的超级块的magic字段,如果和预定的值相等,则认为 系统经历了突然断电和启动且BBU持续供电保护了内存数据,转步骤S72执行;否则结束本 流程,执行前文所述系统启动时对BBU保护的内存的处理流程中所述的内存初始化操作。 0126 步骤S72,根据块设备信息位图和块设备信息区查找获取块设备信息,具体的查找 方法为:查询块设备信息位图中每一位,若第i位值为1,则认为块设备信息区中第i个块 设备信息结构有效,该第i个块设备信息结构中相关字段如bdev_id可用于判断和启动对 应的块设。
35、备。 0127 步骤S73,根据数据单元信息位图查找有效的数据单元,具体的查找方法为:查询 数据单元信息位图io_cache_bmp中每一位,若第i位值为1,则认为数据单元信息区中第i 个数据单元信息结构有效,根据该第i个数据单元信息结构得知其对应的块设备(bdev_id 字段)、该数据单元的数据(第i个数据单元)在该块设备数据中的位置(index字段)以 及该数据单元有哪些数据块为“脏”数据(flags字段和buf_block_stat字段)。 0128 步骤S74,根据查找到的块设备信息和数据单元信息,将“脏”数据写回到块设备存 储介质(磁盘)上。 0129 如图8所示,本申请实施例的存储。
36、系统的块设备数据缓存管理系统,主要包括判 断模块810以及设置模块820。 0130 判断模块810,配置为判断存储系统的所有内存条是否都被后备电池模组(BBU) 保护; 0131 设置模块820,与判断模块810相连,配置为存储系统的所有内存条都被后备电池 模组(BBU)保护时,分配部分内存条用于块设备数据的掉电保护;否则,将被BBU保护的内 存条用于块设备数据的掉电保护。 0132 上述设置模块820配置为用于块设备数据的掉电保护的内存条包括多段物理地 址连续的内存。 0133 本申请的实施例可以应用在具有内存后备电池的存储系统(比如计算机系统) 上,将后备电池保护的内存划分为超级块信息区。
37、、块设备信息位图、块设备信息区、数据单 元位图、数据单元信息区以及数据单元区等等,用以记录块设备信息和块设备缓存数据信 息和数据。在系统经历突然断电和恢复供电后可完整恢复断电前来自块设备上层应用层请 求保存且已应答保存完成但是实际还未写入到块设备存储介质上的数据。 说 明 书CN 102915282 A 8/8页 10 0134 本申请的实施例在系统未被后备电池保护的内存都作为操作系统通用内存使用, 如果系统所有内存都被后备电池保护则一部分内存作为系统通用内存,以满足操作系统保 存操作系统内核、页表、通用内存管理以及进程管理等必须的内存需求。 0135 虽然本发明所揭露的实施方式如上,但所述的。
38、内容仅为便于理解本发明而采用的 实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭 露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明 的专利保护范围,仍须以所附的权利要求书所界定的范围为准。 说 明 书CN 102915282 A 10 1/6页 11 图1图2 说 明 书 附 图CN 102915282 A 11 2/6页 12 图3 说 明 书 附 图CN 102915282 A 12 3/6页 13 图4 说 明 书 附 图CN 102915282 A 13 4/6页 14 图5 说 明 书 附 图CN 102915282 A 14 5/6页 15 图6 说 明 书 附 图CN 102915282 A 15 6/6页 16 图7 图8 说 明 书 附 图CN 102915282 A 16 。