首页> 中国专利> 固态硬盘缓存管理方法、固态硬盘缓存控制器及固态硬盘

固态硬盘缓存管理方法、固态硬盘缓存控制器及固态硬盘

摘要

本发明涉及固态硬盘控制技术,特别涉及一种固态硬盘缓存管理方法、固态硬盘缓存控制器及固态硬盘。该方法包括:建立包含多个单元的资源池,所述资源池中的每一单元的单元颗粒度相同,每一单元都包括其对应且唯一的资源编号;设置包含多个索引项的索引模块,每个所述索引项包括其对应且唯一的索引编号;在所述索引模块接收到软件请求时,根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求。本发明通过索引模块负责与软件交互,进行软件和硬件的相互隔离,降低了软硬件的交互次数,另外,软件请求是基于索引模块,索引模块执行的动作是基于资源池,可以直接响应软件请求的数据,降低了资源的浪费。

著录项

  • 公开/公告号CN112650450A

    专利类型发明专利

  • 公开/公告日2021-04-13

    原文格式PDF

  • 申请/专利权人 深圳大普微电子科技有限公司;

    申请/专利号CN202011568130.7

  • 发明设计人 杨州;方浩俊;

    申请日2020-12-25

  • 分类号G06F3/06(20060101);G06F9/50(20060101);

  • 代理机构44372 深圳市六加知识产权代理有限公司;

  • 代理人江晓苏

  • 地址 518000 广东省深圳市龙岗区龙城街道黄阁北路天安数码新城2栋B座503

  • 入库时间 2023-06-19 10:35:20

说明书

技术领域

本发明涉及固态硬盘控制技术,特别涉及一种固态硬盘缓存管理方法、固态硬盘缓存控制器及固态硬盘。

背景技术

目前,基于固态硬盘的缓存方案中,在读写操作时,均采用固定大小的区块进行管理和释放。而在读写方向上,数据块大小通常是不对称的,如:16K写,96K写,16K读,4K读等。假设固定的区块大小为16K,如果当前需要传输4K的数据,此时也仍需要申请16K的数据量;如果当前需要传输96K的数据,此时则需要软件与硬件之间交互6次,最后传输96K。

发明人在实现本发明实施例的过程中,发现相关技术至少存在以下问题:在需要传输的数据量小于预设区块大小时,会造成资源的浪费;在需要传输的数据量大于预设区块大小时,会增加软硬件的交互次数,从而造成软件延迟。

发明内容

本发明实施方式主要解决的技术问题是如何减少资源浪费,并降低软硬件的交互次数。

为解决上述技术问题,本发明实施方式采用的一个技术方案是:提供一种固态硬盘缓存管理方法,所述方法包括:

建立包含多个单元的资源池,所述资源池中的每一单元的单元颗粒度相同,每一单元都包括其对应且唯一的资源编号;

设置包含多个索引项的索引模块,每个所述索引项包括其对应且唯一的索引编号;

在所述索引模块接收到软件请求时,根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求。

可选地,在根据所述请求获得所述索引编号关联的资源编号时,所述方法还包括:

以链表形式将所述资源编号存储至所述索引编号对应的索引项;

当所述链表中的所述资源编号对应的单元使用完毕时,将所述资源编号从所述链表中删除,并回收所述资源编号对应的单元至所述资源池。

可选地,所述建立包含多个单元的资源池包括:

根据存储资源的总量和单元颗粒度确定单元的数量M,并建立包含所述M个单元的资源池,所述M为正整数,M大于等于1。

可选地,所述请求为资源申请请求,所述根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求,包括:

获取所述资源申请请求的数据量大小;

根据所述数据量大小和所述单元颗粒度确定所述资源申请请求的单元的数量N,以及所述N个单元对应的资源编号,所述N为正整数,N大于等于1;

确定索引项;

将所述N个单元对应的资源编号与确定的所述索引项的索引编号关联,以实现在所述索引项中挂起所述资源编号对应的N个单元;

控制所述索引项中挂起的所述N个单元为运行状态,并返回所述索引项给所述软件。

可选地,所述请求为资源释放请求,所述根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求,包括:

获取所述资源释放请求的数据量大小;

根据所述数据量大小查找为运行状态的索引项;

获取所述索引项中已申请但尚未使用的单元;

控制所述尚未使用的单元释放,并将释放的单元以及所述单元的资源编号存储至所述资源池。

可选地,所述方法还包括:

控制所述索引项中已使用完的单元释放,并将所述单元的资源编号和所述单元回收至所述资源池。

可选地,所述方法还包括:

当所述索引项中全部的单元都被回收至所述资源池时,回收所述索引项至所述索引模块。

可选地,所述索引项的存储容量大于或等于所述资源池中单元的总存储量。

为解决上述技术问题,本发明实施方式采用的另一个技术方案是:提供一种固态硬盘缓存控制器,包括:至少一个处理器;以及存储器,所述存储器中加载有索引模块和资源池,并存储有程序;当所述程序被所述至少一个或多个处理器执行时,所述程序使所述固态硬盘缓存控制器基于所述索引模块和所述资源池执行如上所述的固态硬盘缓存管理方法。

为解决上述技术问题,本发明实施方式采用的又一个技术方案是:提供一种固态硬盘,包括:如上所述的固态硬盘缓存控制器,以及与所述固态硬盘缓存控制器通信连接的至少一个闪存介质。

区别于相关技术的情况,本发明实施例提供了一种固态硬盘缓存管理方法、固态硬盘缓存控制器和固态硬盘,通过设置资源池和索引模块,资源池包括多个单元,每一单元的单元颗粒度相同,并且每一单元有其对应且唯一的资源编号;索引模块包括多个索引项,每个索引项包括其对应且唯一的索引编号;在索引模块接收到软件的请求时,根据该请求获得索引编号关联的资源编号,并操作所述资源编号对应的单元,从而响应所述请求。本发明提供的实施方式,通过索引模块负责与软件交互,进行软件和硬件的相互隔离,降低了软硬件的交互次数,从而提升了硬件资源的利用率。另外,软件请求是基于索引模块,索引模块执行的动作是基于资源池,由此可以直接响应软件请求的数据,降低了资源的浪费。

附图说明

一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1是本发明实施例提供的一种固态硬盘缓存管理方法的流程图;

图2是当所述请求为资源申请请求时,根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求的方法的流程图;

图3是当所述请求为资源释放请求时,根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求的方法的流程图;

图4是本发明实施例提供的一种在固态硬盘中建立所述索引模块和所述资源池的示意图;

图5是本发明实施例提供的一种固态硬盘缓存控制器的硬件结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明实施例提供的固态硬盘缓存管理方法、固态硬盘缓存控制器以及固态硬盘,针对相关技术中采用固定大小的物理块进行管理和释放缺乏灵活性的弊端,提供了一种缓冲区管理方案,通过索引模块和资源池,完成了资源的链表式管理、申请、释放;通过新建立的索引模块负责与软件交互,进行了软件与硬件的相互隔离,降低了软硬件的交互次数,无论数据大小,可以通过控制使其仅需交互一次,总体上提升了硬件资源的利用率。

具体地,请参阅图1,图1是本发明实施例提供的一种固态硬盘缓存管理方法的流程图。该方法包括:

S11、建立包含多个单元的资源池,所述资源池中的每一单元的单元颗粒度相同,每一单元都包括其对应且唯一的资源编号。

在本实施例中,基于硬件的缓存空间建立一个资源池,所述资源池中包括多个单元(cell),所述单元用于提供数据的读空间或写空间,每一所述单元分别对应硬件缓存的一片物理存储区,如SRAM空间,DRAM空间等。

其中,所述建立包含多个单元的资源池包括:根据存储资源的总量和单元颗粒度确定单元的数量M,并建立包含所述M个单元的资源池,所述M为正整数,并且M大于等于1。

所述单元颗粒度是指一个单元的的大小,比如4K、8K等。资源池中的每一单元的单元颗粒度相同,由此可以提升使用效率。所述单元颗粒度大小具体可以取数据块的最大公约值。

所述存储资源的总量是指所述资源池能够提供的总的数据存储空间大小,比如可以是一个数据块或多个数据块的总存储容量。

比如,所述存储资源的总量为32K,单元颗粒度为4K,则根据存储资源的总量和单元颗粒度确定单元的数量M为8,即所述资源池中总共包括8个单元。

可以将资源池中的每一单元分别进行资源编号,根据所述资源编号管理所述单元。比如,8个单元可以分别命名的资源编号包括0、1、2、3、4、5、6、7,等。这里对资源编号的命名不做特别设置,可以是数字、字母等其中的至少一个组成。

S12、设置包含多个索引项的索引模块,每一所述索引项包括其对应且唯一的索引编号。

所述索引项可以理解为标签模块,一个标签模块对应一个关联的链表,链表中的每一元素可以由所述资源池中的单元的资源编号构成。所述索引项也包括其对应且唯一的索引编号,所述索引编号用于标识所述索引项。比如,索引编号可以命名为0、1、2、3、4、5……N,这里对索引编号的命名不做特别设置,可以是数字、字母等其中的至少一个组成。

在软件与硬件交互时,即是基于所述索引项进行的,软件仅关心所述索引项的总的数据量,而对于所述索引项中的单元的展开方式以及链表的具体组织细节不关心。由此,可降低软件与硬件之间的交互次数。

其中,所述索引项中关联的单元的数量N可根据资源请求的大小决定,比如,一个单元是4K,请求的资源是8k,则可以在一个空闲的索引项中关联两个所述单元。被所述索引项关联的单元可以处于挂起状态,待将请求的资源返回给发起请求的用户时,可以使挂起状态的单元为运行状态。

为了保证索引模块中的索引项可以容纳所有的单元,可设置所述索引项的存储容量大于或等于所述资源池中单元的总存储量。

另外,为了保证资源的复用率,在一个索引项的链表上的单元,在其使用完毕后应当即可被释放,而无需等到整个索引项的单元都使用完毕才释放。被释放的单元对应的资源编号从所述链表中删除,所述单元回收至所述资源池。

S13、在所述索引模块接收到软件请求时,根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求。

所述索引模块可用于接收软件的请求,该请求包括资源申请请求和资源释放请求。所述索引模块根据所述请求获取请求的总数据量,根据该总数据量确定待操作的单元的数量N,最后是以索引项的身份来响应软件的请求,至于索引项中单元的具体配置由硬件部分完成。其中,在索引项配置单元时,可以通过关联索引编号和单元对应的资源编号,从而确定每一索引项的单元,包括单元的数量N,以及所述N个单元对应的资源编号,所述N为正整数,N大于等于1。其中,上述M是所述资源池中全部的单元的数量,所述N是一个索引项关联的单元的数量,N小于或等于M。

其中,当所述请求为资源申请请求时,请参阅图2,所述根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求,包括:

S131、获取所述资源申请请求的数据量大小;

S133、根据所述数据量大小和所述单元颗粒度确定所述资源申请请求的单元的数量N,以及所述N个单元数目对应的资源编号,所述N为正整数,N大于等于1;

S135、确定索引项;

S137、将所述N个单元对应的资源编号与确定的所述索引项的索引编号关联,以实现在所述索引项中挂起所述资源编号对应的N个单元;

S139、控制所述索引项中挂起的所述N个单元为运行状态,并返回所述索引项给所述软件。

其中,一个资源申请请求对应一个索引项,确定的索引项可以是索引模块中当前为空闲状态的索引项中的一个索引项,该索引项中对应的单元数量N根据资源申请请求的数据量大小和单元颗粒度决定,比如,资源申请请求的数据量大小为16K,单元颗粒度为4K,则确定的单元数量N为4个,可以在所述索引项中,将所述索引项的索引编号与确定的4个单元的资源编号进行关联。

其中,如果资源申请请求的数据量大于当前可使用的单元的总数据量,则可以先申请已有的单元至对应的索引项,待资源量充足时,可补充剩下未提供的数据量;当然,也可以直接执行退出机制,待资源池中有满足所述资源申请请求的数据量时在重复上述动作。

其中,如果软件连续发送多个资源申请请求时,索引模块可按照接收请求的顺序处理每一请求,索引项的创建可在接收到请求时触发,一个请求对应一个索引项,这样不会造成索引项数量不能与请求数量匹配的情况,但是可能配置的索引项中的单元的资源不能满足所述请求的数据量,此时可以执行上述等待机制或退出机制。另外,所述索引项也可是预先都设置好的,设置的索引项的数量大于或等于单元的总量,如果当前没有可响应请求的索引项时,表示索引项资源不足,也即是单元资源不足,此时结束处理。

需要说明的是,针对软件发起的请求以及响应所述请求,都是由所述索引模块来与软件交互。在数据资源充足的情况下,索引模块可以动态地配置满足所述请求的数据量,比如16K写,96K写,16K读,4K读等,由此,不会造成资源的浪费,可操作性强,具有较高的灵活性。

在一些实施例中,所述方法还包括:当所述资源申请请求的数据量大小大于所述资源池中能够使用的单元的存储容量时,则执行退出机制或等待机制,在所述单元的存储容量满足所述资源申请请求的数据量大小时,重新处理所述资源申请请求。

其中,当所述请求为源释放请求时,可以由软件发起该资源释放请求,也可以由硬件主动释放资源,所述硬件能够实时的监测资源是使用情况,并管理资源。

如果是软件发起的资源释放请求,请参阅图3,所述根据所述请求获取所述索引编号关联的资源编号,并操作所述资源编号对应的单元,以响应所述请求,包括:

S132、获取所述资源释放请求的数据量大小;

S134、根据所述数据量大小查找为运行状态的索引项;

S136、获取所述索引项中已申请但尚未使用的单元;

S138、控制所述尚未使用的单元释放,并将释放的单元以及所述单元的资源编号存储至所述资源池。

其中,根据所述数据量大小查找为运行状态的索引项,即是在运行状态的索引项中查找与所述数据量大小匹配的索引项,然后针对该索引项执行释放动作,释放针对的是索引项中具体的单元,由于硬件可以监测每一单元的运行状态,便也可以获知哪些单元不是当前正在使用的单元,这些单元可以被释放掉,以提高资源的复用率。

其中,如果与所述数据量大小匹配的索引项包含多个时,具体释放哪个索引项可以由硬件控制器决定,比如,释放包含最多空闲状态的单元的索引项,或者释放最先使用的索引项,或者释放最近使用的索引项,等。

其中,被释放的单元可以回收至所述资源池,以及所述单元的资源编号也在所述资源池中被管理。

上述是由软件发起资源释放请求,值得说明的是,还可以由硬件本身主动释放资源。如果是硬件发起资源释放请求,可以在硬件传输完成后,控制所述索引项中已使用完的单元释放,并将所述单元的资源编号和所述单元回收至所述资源池。

上述无论是软件发起的资源释放请求,还是硬件发起的资源释放请求,都可以在索引项中运行或挂起的单元都被使用后,回收该索引项。因此,所述方法还包括:当所述索引项中全部的单元都被回收至所述资源池时,回收所述索引项至所述索引模块。回收的索引项作为空闲的索引项,可以在下一次请求来到时,针对所述索引项执行相应的读数据或写数据操作。

本发明实施例提供的固态硬盘缓存管理方法,通过设置资源池和索引模块,完成了资源的链式管理、申请、释放。进行了软、硬件的相互隔离,减少了软硬件的交互次数,提升了硬件资源的利用率。如前文所描述,假设单元颗粒度是4K,则无论是传输4K,16K还是96K,软硬件交互只需要一次,降低了延迟,有利于固态硬盘读写带宽和IOPS(Input/OutputOperations Per Second,每秒进行读写操作的次数)的提升,同时也带来了更好的灵活性。

下面基于具体的实例来说明上述固态硬盘缓存管理方法。

例如,请参阅图4,图4是一种在固态硬盘中建立所述索引模块和所述资源池的示意图。其中,Tag Pool对应索引模块,索引模块中的Tag对应索引项,索引编号为0、1、2、3……M-1,每一索引项关联一链表,链表中存储单元的资源编号。Resource Pool对应资源池,资源池包括多个单元,每一单元有其对应的资源编号,比如图4中资源编号为0、1、2、3……N-1。其中,M和N都是大于或等于1的整数。每一单元都对应硬件Memory的一片位置。

其中,所述索引模块用于从资源池中申请资源,并组织链表,若链表中的资源单元使用完毕,则删除该单元,并将该单元回收至资源池。同时,该索引模块负责与软件的交互。

比如,软件申请索引项Tag,申请的数据量为a;硬件检测索引模块中是否存在空闲的索引项;若不存在空闲的索引项,则提示Tag资源不足,可以结束处理;若存在空闲的索引项,获取该索引项Tag,根据数据量a从资源池中申请空闲单元,并将申请的空闲单元基于该索引项Tag进行链式管理,其包括在链表中存放所述空闲单元的资源编号,管理空闲单元的排列顺序等。如果当前该索引项Tag中实际分配的单元的总数据量满足所述申请的数据量a,则可以向软件返回所述索引项Tag,并将该索引项Tag中的单元的由挂起状态变为运行状态。其中,如果当前该索引项Tag中实际分配的单元的总数据量不满足所述申请的数据量a,则可以继续向所述资源池申请空闲的单元,直到当前该索引项Tag中实际分配的单元的总数据量满足所述申请的数据量a。

又比如,软件释放索引项Tag,软件发起释放Tag请求,该请求具体是释放Tag i;硬件接收到该请求后,在运行状态的数据表中查找索引项Tag i,并进一步查找Tag i中已申请但还未使用的单元j;硬件将所述单元j进行释放,并将单元j回收至所述资源池;检测所述Tag i中的单元是否都已全部回收,若否,则重复上述过程,直到所述Tag i中的单元都全部被回收,此时,可以将所述Tag i回收到所述索引模块中。

具体地,假设资源池中的单元的颗粒度为4K,并且可用总量为32K,即资源编号为0至7。按照时间顺序,该系统的状态迁移过程具体可参考下述表1:

表1

其中,在时间点0,软件动作和硬件动作都是初始化状态,空闲的索引项包括0、1、2、3、4、5、6、7,空闲的单元包括0、1、2、3、4、5、6、7。在时间点1时,软件申请16K,索引模块接收到该请求后,向资源池申请16K数据存储空间,并申请索引项0,索引项0关联的单元包括0-1-2-3;在时间点2时,软件申请4K,索引模块接收到该请求后,向资源池申请4K数据存储空间,并申请索引项1,索引项1关联的单元包括4;在时间点3时,软件申请8K,索引模块接收到该请求后,向资源池申请8K数据存储空间,并申请索引项2,索引项2关联的单元包括5-6;在时间点4时,硬件主动释放8K,索引模块控制索引项0关联的单元1-3释放,当然也可以是释放单元2-4,具体选择释放哪个单元是根据单元当前是使用状态决定的;在时间点5时,软件申请4K,索引模块接收到该请求后,向资源池申请4K数据存储空间,并申请索引项3,索引项3关联的单元包括7;在时间点6时,硬件主动释放8K,索引模块控制索引项2关联的单元5、6释放;在时间点7时,软件申请16K,索引模块接收到该请求后,向资源池申请16K数据存储空间,并申请索引项4,索引项4关联的单元包括1-3-5-6;在时间点8时,软件请求释放16K,而由于当前空闲的单元仅包括0和2,因此硬件只能释放8K,即释放单元0和2。

上述被释放的单元都可以回收至资源池。所述索引项中的单元都被回收至资源池时,同样回收所述索引项至索引模块的资源池中。

请参阅图5,图5是本发明实施例提供的一种固态硬盘缓存控制器20的硬件结构示意图,该固态硬盘缓存控制器20可用于执行如上所述的固态硬盘缓存管理方法,该固态硬盘缓存控制器20包括:一个或多个处理器21以及存储器22,图5中以一个处理器21为例。

处理器21和存储器22可以通过总线或其他方式连接,图5中以通过总线连接为例。

存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的固态硬盘缓存管理方法对应的程序指令/模块,包括所述索引模块和所述资源池。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行固态硬盘缓存控制器的各种功能应用以及数据处理,即实现上述方法实施例固态硬盘缓存管理方法。

存储器22可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器。

所述一个或者多个模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述任意方法实施例中的固态硬盘缓存管理方法,例如,执行以上描述的图1、图2、图3中的方法步骤。

上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。

本发明实施例还提供一种固态硬盘,所述固态硬盘包括上述实施例所述的固态硬盘缓存控制器20,以及至少一个闪存介质。所述固态硬盘缓存控制器20与所述至少一个闪存介质通信连接。

本实施例提供的固态硬盘,通过索引模块负责与软件交互,进行软件和硬件的相互隔离,降低了软硬件的交互次数,从而提升了所述固态硬盘的硬件资源的利用率。另外,软件请求是基于索引模块,索引模块执行的动作是基于资源池,由此可以直接响应软件请求的数据,降低了资源的浪费。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号