改变储存参数的制作方法

文档序号:16206717发布日期:2018-12-08 07:12阅读:143来源:国知局
改变储存参数的制作方法

本公开在各种实施例中涉及一种储存装置,并且更特别地涉及改变储存装置的储存参数。

背景技术

集成电路(ic)存储器元件可以储存与ic存储器元件上进行的操作相关联的各种参数的值。然而,改变、修改或调整参数的值,可能是耗时的,并且因此可能减慢ic存储器元件的执行。



技术实现要素:

呈现了设备以改变储存参数。在一个实施例中,设备包含集成电路(“ic”)存储器元件。ic存储器元件,在某些实施例中,接收改变与ic存储器元件相关联的参数的值的命令。参数可以包含用于ic存储器元件的一个或多个储存操作的设定。在其它实施例中,ic存储器元件接收具有命令的一个或多个数据集。数据集可以包含与要改变的参数相关联的标识和参数的新值。可以以与命令相同的数据速率来接收一个或多个数据集中的每一个。在一些实施例中,对于一个或多个数据集中的每一个,ic存储器元件将参数的新值写入到与参数相关联的储存位置。

在另一实施例中,一种设备包含用于在单个时钟循环内从非易失性储存装置的一个或多个数据锁存器读取数据组以修改非易失性储存装置的一个或多个执行变量的构件。执行变量可以与非易失性储存装置的一个或多个功能相关联。在其它实施例中,设备其它包含用于根据数据组内的标识来识别非易失性储存装置的要被修改的执行变量的构件。在一些实施例中,设备包含用于将所识别的执行变量修改到数据组内提供的不同值的构件。

系统被呈现为改变储存参数。在一个实施例中,系统包含非易失性存储器介质和控制器。在某些实施例中,控制器配置为接收多个数据元组,以改变非易失性存储器介质的储存操作设定的值。每个数据元组可以包含设定组的地址、用于识别组中的哪个设定要被改变的掩码以及所识别的设定的值。可以在接收每个数据元组之间没有延迟的情况下接收多个数据元组。在另一实施例中,控制器配置为将数据元组的值编程到由数据元组的掩码所识别的非易失性存储器介质的设定。

附图说明

下面参考附图中所图示的具体实施例包含了更特定的描述。应理解这些附图仅绘示本公开的某些实施例,并且因此不应理解为其范围的限制,通过使用附图,以附加的特异性和细节描述和解释了本公开,附图中:

图1是图示包括参数管理模块的系统的一个示例的示意性框图;

图2是图示存储器元件的一个示例的示意性框图;

图3是图示参数管理模块的一个示例的示意性框图;

图4是图示参数管理模块的另一实施例的意性框图;

图5是图示改变储存参数的方法的一个示例的示意性流程图;

图6是图示改变储存参数的方法的其它实施例的示意性流程图;并且

图7是图示改变储存参数的方法的另一实施例的示意性流程图。

具体实施方式

本公开的方面可以实现为设备、系统、方法,或计算机程序产品。相应地,本公开的方面可以采取完全硬件实施例、完全软件实施例(包含固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,其可以全部在本文中总体上称为“电路”、“模块”、“设备”或“系统”。此外,本公开的方面可应采取实现为储存计算机可读和/或可执行程序代码的一个或多个非暂时性计算机可读储存介质的计算机程序产品的形式。

本说明书中所描述的许多功能性单元已经标记为模块,以便更特定地强调它们的实现方式独立性。例如,模块可以实现为包括定制vlsi电路或门阵列的硬件电路、诸如逻辑芯片、晶体管或其它分立式组件的现成半导体。模块还可以实现为诸如现场可编程门阵列、可编程阵列逻辑,可编程逻辑装置等的可编程硬件装置。

模块还可以至少部分地实现为由各种类型的处理器执行的软件。作为示例,可执行代码的识别的模块可以包括计算机指令的一个或多个物理或逻辑块,其可以例如组织为对象、过程或功能。然而,识别的模块的可执行体不需物理地位于一起,而可以包括不同位置中储存的不同的指令,当其逻辑上被连结在一起时,包括模块并实现模块的所述目的。

实际上,可执行代码的模块可以包含单个指令或许多指令,并且甚至可以分散在若干不同的代码段上、在不同的程序之间、跨过若干存储器装置等。在模块或模块的部分实现为软件的情况下,软件部分可以储存在一个或多个计算机可读和/或可执行储存介质上。可以采用一个或多个计算机可读储存介质的任意组合。计算机可读储存介质例如可以包含但不限于,电子的、磁性的、光学的、电磁的、红外的或半导体的系统、设备或装置,或前述的任意适当组合,但不包含传播的信号。在此文档的语境下,计算机可读和/或可执行储存介质可以为任意有形的和/或非暂时性介质,其可以含有或储存由指令执行系统、设备、处理器或装置使用或与之相关的程序。

由于进行本公开的方面的操作的计算机程序代码可以用一种或多种编程语言的任意组合来编写,包含诸如python、java、smalltalk、c++、c#、objectivec等面向对象的编程语言,诸如“c”编程语言、脚本编程语言的常规程序的编程语言,和/或其它相似编程语言。程序代码可以部分地或完全地在用户的计算机中的一个或多个上和/或在远程计算机或数据网络之上的服务器上等执行。

如本文中所使用的,组件包括有形的、物理的、非暂时性装置。例如,组件可以实现为硬件逻辑电路,包括定制vlsi电路、门阵列,或其它集成电路;现成半导体,诸如逻辑芯片、晶体管,或其它分立式装置;和/或其它机械或电力装置。组件还可以实现为可编程硬件装置,诸如场可编程门阵列、可编程阵列逻辑、可编程逻辑装置等。组件可以包括一个或多个硅集成电路装置(例如,芯片、裸芯、裸芯平面、封装体)或其它分立式电力装置,通过印刷电路板(pcb)等的电线与一个或多个其它组件电通信。在某些实施例中,本文所描述的模块中的每一个可以替代地由组件实施或实现为组件。

本说明书通篇对“一个示例”“实施例”或相似语言的参考是指关于该实施例描述的特定特征、结构或特性包含在本公开的至少一个实施例中。因此,短语“在一个示例中”、“在实施例中”以及相似语言在本说明书通篇可以但不一定全部指代相同的实施例,而是指“一个或多个但不是全部的实施例”,除非明确地另有指明。术语“包含”、“包括”、“具有”及其变体是指“包含但不限于”,除非明确地另有指明。项目的枚举列表不意味着任意或全部的项目相互地排斥和/或相互地包含,除非明确地另有指明。术语“一”、“一个”和“所述”也指代“一个或多个”,除非明确地另有指明。

以下根据本公开的实施例参考方法、设备、系统,以及计算机程序产品的示意性流程图和/或示意性框图描述了本公开的方面。应当理解,示意性流程图和/或示意性框图的每个框,以及示意性流程图和/或示意性框图中的框的组合,可以通过计算机程序指令实现。可以向计算机的处理器或其它可编程数据处理设备等提供这些计算机程序指令以产生机器,使得经由处理器或其它可编程数据处理设备执行的指令创建用于实现示意性流程图和/或示意性框图框或多个框中所指定的功能和/或行为的构件。

还应该注意的是,在一些替代实现方式中,框中提到的功能可以不按照附图中指出的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以实质上同时地执行,或者框有时可以以相反的顺序执行。可以设想其它步骤和方法,其在功能、逻辑或效果上等同于所示附图的一个或多个框或其部分。尽管在流程图和/或框图中可能采用了各种箭头类型和线型,但是它们被理解为不限制对应的实施例的范围。例如,箭头可以指示所示实施例的枚举步骤之间的未指定持久时间的等待或监控时段。

在以下详细描述中,进行了对附图的参考,附图构成其一部分。前述发明内容仅为说明性的而不意图以任何方式限制。除上面所描述的说明性方面、实施例以及特征之外,通过参考附图和以下详细描述,其它方面、实施例以及特征将变得显而易见。每个附图中元件的描述可以指代前面的图中的元件。相同附图标记在附图中可以指代相同元件,包含相同元件的替代实施例。

图1是系统100的一个示例的框图,其包括参数管理模块150。参数管理模块150可以是非易失性存储器控制器124、非易失性存储器介质控制器126、装置驱动器或储存器管理层(sml)130等中的一个或多个的一部分和/或与非易失性存储器控制器124、非易失性存储器介质控制器126、装置驱动器或储存器管理层(sml)130等中的一个或多个通信。参数管理模块150可以在计算装置110的非易失性存储器系统102上运行,其可以包括处理器111、易失性存储器112,以及通信接口113。处理器111可以包括一个或多个中央处理单元、一个或多个通用处理器、一个或多个专用处理器、一个或多个虚拟处理器(例如,计算装置110可以为主机内运行的虚拟机)、一个或多个处理器核心等。通信接口113可以包括一个或多个网络接口,网络接口配置为将计算装置110和/或非易失性存储器控制器124通信地耦接到网络115,诸如互联网协议网络、储存局域网络等。

计算装置110还可以包括非暂时性、计算机可读储存介质114。计算机可读储存介质114可以包括可执行指令,其配置为使计算装置110(例如,处理器111)进行本文所公开的方法中的一个或多个的步骤。替代地或附加地,参数管理模块150可以实现为非暂时性储存介质114上储存的一个或多个计算机可读指令。

在所绘示的实施例中,非易失性存储器系统102包含参数管理模块150。在一个实施例中,参数管理模块150配置为在非易失性存储器装置120在切换模式中执行时改变非易失性存储器装置120的一个或多个储存参数。如本文中所使用的,切换模式是非易失性存储器装置120的高性能、高速执行模式,类似于双倍数据速率(ddr),其可以提高非易失性存储器装置120的速度和/或带宽而不提高功率消耗。在一些实施例中,在切换模式中执行的非易失性存储器装置120可以实施为异步(asynchronous)ddrnand,其当读取或写入数据时不使用分开的时钟信号。在一个实施例中,参数管理模块150通过在切换模式中时接收或读取与新的参数值相关联的数据而改善改变非易失性存储器装置120的储存参数的性能,并且因此非易失性存储器装置120不切换到较低性能或较慢的模式—例如,单倍数据速率(sdr)模式—来接收和/或改变参数值。

在一个实施例中,参数管理模块150可以包括诸如装置驱动器、sml130等的可执行软件代码,其储存在计算机可读储存介质114上以在处理器111上执行。在另一实施例中,参数管理模块150可以包括一个或多个非易失性存储器装置120的逻辑硬件,诸如非易失性存储器介质控制器126、非易失性存储器控制器124、装置控制器、场可编程门阵列(fpga)或其它可编程逻辑、fpga或其它可编程逻辑的固件、微控制器上执行的微代码、专用集成电路(asic)等。在其它实施例中,参数管理模块150可以包含可执行软件代码和逻辑硬件两者的组合。

在一个实施例中,参数管理模块150配置为经由总线125等从sml130接收储存请求。参数管理模块150还可以配置为经由总线125将数据传输到sml130和/或储存器客户端116/从sml130和/或储存器客户端116传输数据。相应地,参数管理模块150,在一些实施例中,可以包括一个或多个直接存储器存取(dma)模块、远程dma模块、总线控制器、桥接器、缓冲等等和/或与之通信,以促进储存请求和相关联的数据的传输。在另一实施例中,参数管理模块150可以将储存请求接收作为来自储存器客户端116的api调用、作为io-ctl命令等。下面关于图3和图4更详细地描述了参数管理模块150。

根据各种实施例,包括参数管理模块150的非易失性存储器控制器124可以管理一个或多个非易失性存储器装置120。(多个)非易失性存储器装置120可以包括诸如(多个)固态储存器装置的记录、存储器和/或储存器装置,其布置和/或划分为多个可寻址介质储存位置。如本文中所使用的,介质储存位置是指存储器的任意物理单元(例如,非易失性存储器装置120上的任意数目的物理储存介质)。存储器单元可以包含但不限于:页、存储器分区、擦除块、区段、块、物理储存位置的集合或集(例如,以下描述的逻辑页、逻辑擦除块)等。

非易失性存储器控制器124可以包括sml130,其可以将逻辑地址空间134呈现到一个或多个储存器客户端116。sml的一个示例是加利福尼亚州苗必达市的sandisk公司的virtualstorage替代地,每个非易失性存储器装置120可以包括非易失性存储器介质控制器126,其可以将逻辑地址空间134呈现到储存器客户端116。如本文中所使用的,逻辑地址空间134是指存储器资源的逻辑表示。逻辑地址空间134可以包括多个逻辑地址(例如,逻辑地址的范围)。如本文中所使用的,逻辑地址是指涉及存储器资源的任意标识(例如,数据),包含但不限于:逻辑块地址(lba)、柱面/头部/区段(chs)地址、文件名、对象标识、索引节点(inode)、通用唯一标识(uuid)、全局唯一标识(guid)、散列码、签名、索引条目、范围、区间等。

sml130可以保持诸如正向索引的元数据135,以将逻辑地址空间134的逻辑地址映射到(多个)非易失性存储器装置120上的介质储存位置。sml130可以提供仲裁(arbitrary)、从逻辑地址到物理储存资源的任意到任意的映射。如本文中所使用的,“任意到任意”的映射可以将任意逻辑地址映射到任意物理储存资源。相应地,逻辑地址与特定的介质储存位置和/或介质地址之间可能不存在预限定的和/或预设的映射。如本文中所使用的,介质地址是指存储器资源的地址,其对管理多个存储器资源的控制器将存储器资源相互唯一地识别。作为示例,介质地址包含但不限于:介质储存位置、物理存储器单元、物理存储器单元的集合(例如,逻辑存储器单元)、存储器单元的一部分(例如,逻辑存储器单元地址和偏移、范围,和/或区间)等的地址。相应地,sml130可以将逻辑地址映射到任意尺寸和/或粒度的物理数据资源,其可以或可不对应于(多个)非易失性存储器装置120的底层数据划分方案。例如,在一些实施例中,非易失性存储器控制器124配置为在逻辑存储器单元内储存数据,逻辑存储器单元通过逻辑上组合多个物理存储器单元形成,其可以允许非易失性存储器控制器124支持许多不同虚拟存储器单元尺寸和/或粒度。

如本文中所使用的,逻辑存储器元件是指两个或多个非易失性存储器元件的集,其被或能够被并行地管理(例如,经由i/o和/或控制总线)。逻辑存储器元件可以包括多个逻辑存储器单元,诸如逻辑页、逻辑存储器分区(例如,逻辑擦除块)等等。如本文中所使用的,逻辑存储器单元是指组合两个或多个物理存储器单元的逻辑构造,相应的非易失性存储器元件上的每个物理存储器单元在相应的逻辑存储器元件中(例如,每个非易失性存储器元件并行地可存取)。如本文中所使用的,逻辑存储器分区是指两个或多个物理存储器分区的集,相应的非易失性存储器元件上的每个物理存储器分区在相应的逻辑存储器元件中。

由sml130呈现的逻辑地址空间134可以具有逻辑容量,其可以对应于逻辑地址空间134中可用逻辑地址的数目和由逻辑地址引用的数据的尺寸和/或粒度。例如,包括2^32个唯一逻辑地址的逻辑地址空间134、每个引用2048字节(2kib)的数据的逻辑容量可以为2^43字节。如本文中所使用的,千位字节(kibibyte,kib)是指1024字节。在一些实施例中,逻辑地址空间134可以是精简配置(thinlyprovisioned)。如本文中所使用的,“精简配置”逻辑地址空间134是指具有超过底层(多个)非易失性存储器装置120的物理容量的逻辑容量的逻辑地址空间134。例如,sml130可以将64-位逻辑地址空间134(例如,由64-位逻辑地址引用的逻辑地址空间134)呈现到储存器客户端116,其可以超过底层非易失性存储器装置120的物理容量。大的逻辑地址空间134可以允许储存器客户端116指派和/或引用逻辑地址的连续范围,而降低命名冲突的机会。sml130可以利用逻辑地址与物理储存资源之间的任意到任意映射,以独立于底层物理储存器装置120而管理逻辑地址空间134。例如,sml130可以根据需要无缝地添加和/或移除物理储存资源,并且不改变由储存器客户端116使用的逻辑地址。

非易失性存储器控制器124可以配置为将数据储存为上下文格式(contextformat)。如本文中所使用的,上下文格式是指自描述数据格式,其中以物理储存介质122上的数据来储存持久上下文元数据。持久上下文元数据提供与之储存的数据的上下文。在某些实施例中,持久上下文元数据唯一地识别持久上下文元数据与之储存的数据。例如,持久上下文元数据可以将由储存器客户端116所拥有的区段或块的数据从由储存器客户端116所拥有的其它区段或块的数据中唯一地识别。在其它实施例中,持久上下文元数据识别在数据上进行的操作。在其它实施例中,持久上下文元数据识别在数据上进行的操作的次序。在其它实施例中,持久上下文元数据识别数据的安全控制、数据类型或其它属性。在某实施例中,持久上下文元数据识别多个方面中的至少一个,包含数据类型、唯一数据标识、数据上进行的操作以及操作的次序。

持久上下文元数据可以包含但不限于:数据的逻辑地址、数据的标识(例如,文件名、对象id、标记、唯一标识等)、对其它数据的(多个)引用(例如,数据与其它数据相关联的指示符)、数据关于其它数据的相对位置或偏移(例如,文件偏移,等),数据尺寸和/或范围等。上下文数据格式可以包括包(packet)格式,其包括数据段和一个或多个标头(header)。替代地,上下文数据格式可以以其它方式(例如,在非易失性存储器介质122上的专用索引、存储器分区索引等中)将数据与上下文信息相关联。

在一些实施例中,上下文数据格式可以允许基于非易失性存储器介质122的内容来确定和/或重建数据上下文,而独立于其它元数据,诸如仲裁、上面讨论的任意到任意映射。因为数据的介质位置独立于数据的逻辑地址,仅基于数据的介质位置或介质地址可能不足以或无法确定数据的上下文。在非易失性存储器介质122上将数据储存为上下文格式可以允许在不引用其它元数据的情况下确定数据上下文。例如,上下文数据格式可以允许仅基于非易失性存储器介质122的内容而重建元数据(例如,重建逻辑地址与介质位置之间的任意到任意映射)。

在一些实施例中,非易失性存储器控制器124可以配置为将数据储存在一个或多个非对称、一次写入介质122上,诸如固态储存介质。如本文中所使用的,“一次写入”储存介质是指每次新的数据被写入或编程在之上时被重新初始化(例如,擦除)的储存介质。如本文中所使用的,“非对称”储存介质是指对于不同储存操作具有不同时延的储存介质122。许多类型的固态储存介质是非对称的;例如,读取操作可以比写入/编程操作快得多,并且写入/编程操作可以比擦除操作快得多(例如,读取介质可以比擦除块数百倍,并且比编程介质快数十倍)。

存储器介质122可以划分为存储器分区,其可以作为组(例如,擦除块)擦除以便于,尤其是考虑到介质122的非对称性质等。就此而言,原地(in-place)修改单个数据段可能要求擦除包括数据的整个擦除块,并且将修改的数据连同原始的、未改变的数据重新写入到擦除块。这可能导致低效的“写入放大”,其可能过度地损耗介质122。因此,在一些实施例中,非易失性存储器控制器124可以配置为换位(out-of-place)写入数据。如本文中所使用的,“换位”写入数据是指将数据写入到(多个)不同介质储存位置中而非“原地”盖写(overwrite)数据(例如,盖写数据的原始物理位置)。换位修改数据可以避免写入放大,因为擦除块上的现有的、有效数据与要修改的数据不必被擦除和重新复制。此外,换位写入数据可以移除来自许多储存操作的时延路径的擦除(erasure)(例如,擦除时延不再是写入操作的关键路径的一部分)。

非易失性存储器控制器124可以包括一个或多个进程,其在储存操作的服务的常规路径(例如,进行储存操作和/或服务储存请求的“路径”)之外运行。如本文中所使用的,“服务储存请求的路径”或“服务储存操作的路径”(也称为“关键路径”)是指为了服务诸如读取、写入、修改等的储存操作或请求所需的一系列处理操作。服务储存请求的路径可以包括从储存器客户端116接收请求、识别请求的逻辑地址、在非易失性存储器介质122上进行一个或多个储存操作,以及返回结果,诸如通知或数据。在服务储存请求的路径之外发生的进程可以包含但不限于:清扫器(groomer)、去重复等等。这些进程可以自治地且在背景中实施,使得它们不与其它储存操作和/或请求相干扰或影响其它储存操作和/或请求的性能。相应地,这些进程可以独立于服务储存请求而运行。

在一些实施例中,非易失性存储器控制器124包括清扫器,其配置为回收存储器分区(例如,逻辑或物理擦除块)以重新使用,使用垃圾收集或其它储存容量恢复过程。由非易失性存储器控制器124实施的换位写入范例可能导致非易失性存储器介质122上剩余的过时或无效数据。例如,用数据y盖写数据x可能导致将y储存在新的存储器分区上(例如,而非原地盖写x),并且更新元数据的任意到任意的映射以将y识别为有效的、最新的(up-to-date)版本的数据。过时版本的数据x可以被标记为无效,但可能不被立即移除(例如,擦除),因为,如上面所讨论,擦除x可能涉及擦除整个存储器分区,其是耗时的操作且可能导致写入放大。相似地,不再使用的数据(例如,删除的或修整的数据)可能不被立即移除。非易失性存储器介质122可能积累大量的无效数据。

清扫器进程可以在服务储存操作的关键路径之外运行。清扫器进程可以回收存储器分区,使得它们可以重新使用于其它储存操作。如本文中所使用的,回收存储器分区是指擦除存储器分区,使得新的数据可以储存/编程在之上。回收存储器分区可以包括将存储器分区上的有效数据重新定位到新的位置。清扫器可以基于一个或多个因素识别用于回收的存储器分区,因素可以包含但不限于:存储器分区中的无效数据的量、存储器分区中的有效数据的量、存储器分区上的损耗(例如,擦除循环的数目)、自从存储器分区被编程或刷新的时间等等。

非易失性存储器控制器124还可以配置为将数据储存为日志格式。如上所述,日志格式是指限定非易失性存储器介质122上进行的储存操作的顺序的次序的数据格式。在一些实施例中,日志格式包括以非易失性存储器介质122的介质地址的预定的次序来储存数据(例如,在介质122的依序的页和/或擦除块内)。日志格式还可以包括将数据(例如,每个包或数据段)与相应的次序指示符相关联。次序指示符可以单独地应用到数据(例如,应用到每个数据包)和/或应用到数据分组(例如,依序地储存在诸如擦除块的存储器分区上的包)。在一些实施例中,当存储器分区如上所述被回收(例如,擦除)时和/或当存储器分区首次用于储存数据时,次序指示符可以应用于存储器分区。

在一些实施例中,日志格式可以包括将数据储存在“只附加(appendonly)”范例中。使用下面描述的日志储存模块137等,非易失性存储器控制器124可以保持非易失性存储器装置120的介质地址处的当前附加点。附加点可以是当前存储器分区和/或存储器分区内的偏移。然后数据可以从附加点依序地附加。因此,可以基于数据的存储器分区的次序指示符与存储器分区内的数据的次序的组合而确定数据的顺序次序。一经达到存储器分区的端部,非易失性存储器控制器124可以识别“下一”可用存储器分区(例如,初始化且准备好储存数据的下一存储器分区)。清扫器可以回收包括无效的、陈旧的和/或删除的数据的存储器分区,以确保数据可以继续附加到介质日志。

本文所描述的日志格式可以允许基于非易失性存储器介质122的内容将有效数据与无效数据区分,并且独立于其它元数据。如上面所讨论,无效数据可能不从非易失性存储器介质122移除,直到包括数据的存储器分区被回收。因此,具有相同上下文的多个“版本”的数据可能存在于非易失性存储器介质122上(例如,具有相同逻辑地址的多个版本的数据)。与数据相关联的次序指示符可以用来将无效版本的数据与当前的、最近的版本的数据区分;日志中最当前的数据是当前版本,且之前的版本可以被识别为无效。

储存器管理层130可以配置为将储存服务提供到一个或多个储存器客户端116。储存器客户端116可以包含计算装置110上运行的本地储存器客户端116和/或经由网络115和/或网络接口113可存取的远程储存器客户端116。储存器客户端116可以包含但不限于:操作系统、文件系统、数据库应用、服务器应用、内核级进程、用户级进程、应用等。

储存器管理层130包括一个或多个非易失性存储器装置120和/或与之通信地耦接。一个或多个非易失性存储器装置120可以包含不同类型的非易失性存储器装置,包含但不限于:固态储存器装置、硬盘驱动器、san储存资源等。一个或多个非易失性存储器装置120可以包括一个或多个相应的非易失性存储器介质控制器126和非易失性存储器介质122。如图1中所示,sml130可以经由传统块i/o接口131提供对一个或多个非易失性存储器装置120的存取。附加地,sml130可以通过sml接口132提供存取以增强功能(例如,大的、虚拟地址空间134)。元数据135可以用来管理和/或跟踪通过块i/o接口131、sml接口132、缓存接口133,或其它的相关的接口中任意的接口进行的储存操作。

缓存接口133可以暴露经由储存器管理层130可存取的缓存专用特征。此外,在一些实施例中,呈现到储存器客户端116的sml接口132提供对由一个或多个非易失性存储器装置120和/或一个或多个非易失性存储器介质控制器126实现的数据转换的存取。

sml130可以通过一个或多个接口提供储存服务,接口可以包含但不限于:块i/o接口、扩展储存器管理层接口、缓存接口等。sml130可以通过一个或多个接口将逻辑地址空间134呈现到储存器客户端116。如上面所讨论,逻辑地址空间134可以包括多个逻辑地址,各自对应于一个或多个非易失性存储器装置120上的相应的介质位置。sml130可以保持元数据135,其包括如上所述的逻辑地址与介质位置之间的任意到任意映射。

sml130还可以包括日志储存模块137,其配置为以上下文、日志格式储存数据。上下文、日志数据格式可以包括将数据与诸如数据的逻辑地址等的持久上下文元数据相关联。上下文、日志格式还可以包括将数据与非易失性存储器介质122上的相应的次序标识相关联,其限定如上所述的一个或多个非易失性存储器装置120上进行的储存操作的顺序的次序。

sml130还可以包括配置为在总线125之上将数据、命令和/或查询传输到一个或多个非易失性存储器装置120的非易失性存储器装置接口139,其可以包含但不限于:外围组件互连高速(pciexpress或pcie)总线、串行高级技术附件(ata)总线、并行ata总线、小型计算机系统接口(scsi)、火线(firewire)、光纤通道、通用串行总线(usb)、pcie先进切换(pcie-as)总线、网络115、无限带宽(infiniband)、scsirdma等。非易失性存储器装置接口139可以使用(多个)输入-输出控制(io-ctl)命令、(多个)io-ctl命令扩展、远程直接存储器存取等与一个或多个非易失性存储器装置120通信。

通信接口113可以包括配置为将计算装置110和/或非易失性存储器控制器124通信地耦接到网络115和/或耦接到一个或多个远程、网络-可存取储存器客户端116的一个或多个网络接口。储存器客户端116可以包含计算装置110上运行的本地储存器客户端116和/或经由网络115和/或网络接口113可存取的远程的储存器客户端116。非易失性存储器控制器124包括一个或多个非易失性存储器装置120。尽管图1绘示了单个非易失性存储器装置120,本公开在此方面不受限制并且可以适配为结合任意数目的非易失性存储器装置120。

非易失性存储器装置120可以包括非易失性存储器介质122,其可以包含但不限于:nand闪速存储器、nor闪速存储器、纳米随机存取存储器(纳米ram或nram)、基于纳米晶体线的存储器、基于硅氧化物的10纳米以下工艺存储器、石墨烯存储器、硅-氧化物-氮化物-氧化物-硅(sonos)、电阻式ram(rram)、可编程金属化单元(pmc)、导电桥接ram(cbram)、磁阻式ram(mram)、动态ram(dram)、相变ram(pram或pcm)、磁储存介质(例如,硬盘、磁带)、光学储存介质等。尽管非易失性存储器介质122在本文中称为“存储器介质”,但是在各种实施例中,非易失性存储器介质122可以更普遍地包括能够记录数据的非易失性记录介质,其可以称为非易失性存储器介质、非易失性储存介质等。此外,在各种实施例中,非易失性存储器装置120可以包括非易失性记录装置、非易失性存储器装置、非易失性储存器装置等。

非易失性存储器介质122可以包括一个或多个非易失性存储器元件123,其可以包含但不限于:芯片、封装体、平面、裸芯等。非易失性存储器介质控制器126可以配置为管理非易失性存储器介质122上的储存操作,并且可以包括一个或多个处理器、可编程处理器(例如,现场可编程门阵列)等。在一些实施例中,非易失性存储器介质控制器126配置为将数据在非易失性存储器介质122上储存为上述上下文、日志格式或从之读取数据,并且配置为将数据传输到非易失性存储器装置120/从非易失性存储器装置120传输数据等等。

非易失性存储器介质控制器126可以通过总线127通信地耦接到非易失性存储器介质122。总线127可以包括i/o总线,以用于将数据通信到非易失性存储器元件123/从非易失性存储器元件123通信数据。总线127还可以包括控制总线,以将地址和其它命令和控制信息通信到非易失性存储器元件123。在一些实施例中,总线127可以将非易失性存储器元件123通信地并行耦接到非易失性存储器介质控制器126。此并行存取可以允许非易失性存储器元件123作为组来管理,形成逻辑存储器元件129。如上面所讨论,逻辑存储器元件可以划分为相应的逻辑存储器单元(例如,逻辑页)和/或逻辑存储器分区(例如,逻辑擦除块)。可以通过将非易失性存储器元件中的每一个的物理存储器单元逻辑上组合来形成逻辑存储器单元。例如,如果非易失性存储器介质122包括二十五(25)个非易失性存储器元件,则每个逻辑存储器单元可以包括二十五(25)个页(例如,非易失性存储器介质122的每个元件的页)。

非易失性存储器控制器124可以包括sml130和非易失性存储器介质控制器126。sml130可以经由一个或多个接口131、132和/或133对储存器客户端116提供储存服务。在一些实施例中,sml130提供块-装置i/o接口131,储存器客户端116通过块-装置i/o接口131进行块级i/o操作。替代地或附加地,sml130可以提供储存器管理层(sml)接口132,其可以对储存器客户端116提供其它储存服务。在一些实施例中,sml接口132可以包括对块装置接口131的扩展(例如,储存器客户端116可以通过对块装置接口131的扩展而存取sml接口132)。替代地或附加地,sml接口132可以提供为分开的api、服务、和/或文库(library)。sml130还可以配置为提供缓存接口133,以使用非易失性存储器系统102缓存数据。

如上所述,sml130可以将逻辑地址空间134呈现到储存器客户端116(例如,通过接口131、132和/或133)。sml130可以保持元数据135,其包括逻辑地址空间134中的逻辑地址与非易失性存储器装置120上的介质位置之间的任意到任意的映射。元数据135可以包括具有条目的逻辑-到-物理映射结构,其中条目将逻辑地址空间134中的逻辑地址与非易失性存储器装置120上的介质位置映射。在一个实施例中,用非易失性存储器装置120储存数据的逻辑地址的条目而不用非易失性存储器装置120当前不储存数据的逻辑地址的条目来稀疏地填入元数据135的逻辑-到-物理映射结构。在某些实施例中,元数据135在块级跟踪数据,且sml130将数据作为块管理。

非易失性存储器系统102还可以包括日志储存模块137,其如上所述可以配置为在非易失性存储器装置120上将数据储存为上下文、日志格式。上下文、日志数据格式可以包括将数据与非易失性存储器介质122上的逻辑地址相关联。上下文、日志格式还可以包括将数据与非易失性存储器介质122上的相应的次序标识相关联,其限定非易失性存储器介质122上进行的储存操作的顺序的次序,如上所述。非易失性存储器控制器124还可以包括非易失性存储器装置接口139,其配置为在总线125之上将数据、命令和/或查询传输到非易失性存储器介质控制器126,如上所述。

图2绘示了非易失性储存器装置210的实施例,其可以包含一个或多个存储器裸芯或芯片212。非易失性储存器装置210可以实质上类似于参考图1所描述的非易失性存储器装置120。在一些实施例中,存储器裸芯212包含存储器单元的阵列200(二维或三维)、裸芯控制器220,以及读取/写入电路230a/230b。在一个实施例中,由各种外围电路对存储器阵列200的存取以对称方式在阵列的相反侧上实现,使得每侧上的存取线和电路的密度减半。在其它实施例中,读取/写入电路230a/230b包含多个感测块250,其允许并行读取或编程存储器单元的页。

在各种实施例中,存储器阵列200是经由行解码器240a/240b通过字线且经由列解码器242a/242b通过位线可寻址的。在一些实施例中,控制器244被包含在与一个或多个存储器裸芯212相同的存储器装置210(例如,可移除储存卡或封装体)中。命令和数据在主机与控制器244之间经由线232,且在控制器与一个或多个存储器裸芯212之间经由线234传输。一种实现方式可以包含多个芯片212。

在一个实施例中,裸芯控制器220与读取/写入电路230a/230b协作以在存储器阵列200上进行存储器/储存操作。在某些实施例中,裸芯控制器220包含参数管理模块150、状态机222、芯片上地址解码器224以及功率控制电路226。在一个实施例中,参数管理模块150配置为接收改变与非易失性储存装置120相关联的参数的值的命令。在某些实施例中,参数包含非易失性储存装置120的一个或多个储存操作的设定。在一些实施例中,参数管理模块150配置为接收具有命令的一个或多个数据集。数据集可以包含与要改变的参数相关联的标识和参数的新值。在一个实施例中,以与命令相同的数据速率接收数据集中的每一个。在其它实施例中,对于一个或多个数据集中的每一个,将参数的新值写入到与参数相关联的储存位置。在某些实施例中,参数管理模块150可以包含装置驱动器的软件,和/或装置控制器244、裸芯控制器220和/或状态机222中的硬件。

在一个实施例中,状态机222提供存储器或储存操作的芯片级控制。芯片上地址解码器224提供地址接口以在由主机或存储器控制器使用的地址到由解码器240a、240b、242a、242b使用的硬件地址之间转换。功率控制电路226控制在存储器操作期间供给到字线和位线的功率和电压。在一个实施例中,功率控制电路226包含一个或多个电荷泵,其可以产生大于供给电压的电压。

图3绘示了参数管理模块150的一个实施例。参数管理模块150可以实质上类似于上面相对于图1所描述的参数管理模块150。在所绘示的实施例中,参数管理模块150包含命令模块302、数据模块304以及写入模块306,在下面对其更详细描述。

在一个实施例中,命令模块302配置为接收命令、指令、信号等,以改变与诸如如上所述的非易失性储存装置120的集成电路(ic)存储器元件相关联的参数的值。虽然本文参考非易失性储存装置120描述了许多示例,本领域技术人员将认识到,本文所公开的主题可以适用于各种类型的非易失性和易失性储存装置。

在一个实施例中,命令模块302可以从储存器客户端116、非易失性存储器控制器124、非易失性存储器介质控制器126、装置驱动器或储存器管理层(sml)130等接收命令,以对与集成电路存储器元件相关联的参数的值进行改变、修改、调整,更改等。如本文中所使用的,参数可以是变量、执行变量、设定、储存操作设定等,其包括用于ic存储器元件上的储存操作、储存功能等的值,诸如编程擦除或读取操作。可以改变的储存参数的示例可以包含读取电压阈值设定、读取偏置阈值设定、校验电压设定、编程电压设定、回路计数设定、步进尺寸设定等。

在一个实施例中,数据模块304配置为接收一个或多个数据集、数据元组等,其具有改变参数、设定、参数组、设定组等的值的命令。一个或多个数据集中的每一个可以包括用于改变储存参数的值的数据。例如,每个数据集可以包含与要改变的储存参数相关联的标识和识别的储存参数的新值。标识可以包含地址、局部或全局唯一标识、储存位置等,其识别ic存储器元件的要改变的参数。数据集中包含的储存参数的新值可以为各种数据类型,诸如整数、浮点数(float)、双倍、字符串等。例如,读取电压阈值参数的值可以为诸如2.8伏特的值。

在一个实施例中,数据模块304以与命令模块302接收改变参数的命令相同的数据速率接收一个或多个数据集。例如,ic存储器元件可以以切换模式执行—例如其中在200mb/s的速率下接收数据的ddr模式—使得命令模块302接收参数改变命令且数据模块304以相同数据速率接收一个或多个数据集。这不同于常规存储器系统,其中在接收用于改变ic存储器元件的一个或多个参数的数据之前,ic存储器元件可以被置于较慢执行模式下,例如,传统(legacy)模式、sdr模式等。

例如,在一个实施例中,数据模块304可以在紧接在其中命令模块302接收参数改变命令的最终时钟循环之后的时钟循环的开始时接收一个或多个数据集。例如,在切换模式下时,可以在每个时钟循环期间接收200mb/s的数据。命令模块302可以在200mb/s时钟循环期间接收参数改变命令。然后数据模块304可以接收一个或多个数据集,以在下一200mb/s时钟循环期间改变ic存储器元件的一个或多个参数。因此,ic存储器元件不被置于较慢执行模式下来接收用于改变参数的数据集,而是反之保持在高性能模式下并且以与命令模块302接收命令的时钟循环速率相同的时钟循环速率来接收用于改变参数的数据集。

在另一示例性实施例中,数据模块304在每个数据集的接收之间没有延迟的情况下接收一个或多个数据集中的每一个。在这样的实施例中,作为示例,数据模块304可以在每个数据集的接收之间不接收另一参数改变命令的情况下接收每个用于改变参数的数据集。在另一示例性实施例中,数据模块304可以在每个数据集的接收之间没有一个或多个附加时钟循环的情况下接收每个用于改变参数的数据集。例如,可以在相同的200mb/s时钟循环期间接收一个或多个数据集,而不是在不同的时钟循环期间分开地发送每个数据集。

在一个实施例中,写入模块306配置为将参数的新值写入或编程到与参数相关联的储存位置、地址等。在某些实施例中,写入模块306通过基于每个数据集中提供的标识而确定参数的储存位置来处理数据模块304接收的每个数据集,并且将提供的新值写入到参数的储存位置。在这样的实施例中,写入模块306盖写参数的储存位置处的任何现有的值或数据。在各种实施例中,储存位置可以指寄存器或其它非易失性储存位置,其用于储存ic存储器元件上的参数或储存与ic存储器元件相关联的参数。

在某些实施例中,一个或多个数据集中的数据集还包含诸如位掩码的掩码,写入模块306使用掩码来确定应改变到数据模块304接收的每个数据集中提供的新值的一个或多个参数的储存位置或多个参数的设定、设定组等。例如,参数集可以由字节或其它位串表示,其中字节或位串中的每个位表示参数的至少一部分,或参数的储存位置的至少一部分。在这样的实施例中,每个参数可以储存为一个或多个字节,并且位串中表示参数集的每个位引用、指向到、指示参数的至少一部分的储存位置等。

例如,数据模块304可以接收包含表示参数集的位串的标识、地址等的数据集,其中每个位表示集的不同参数。数据集还可以包含位掩码,写入模块306使用位掩码来确定由位串的位表示的哪个参数要被改变。例如,写入模块304可以使用表示参数集和位掩码的位串来进行诸如逻辑or、and、xor等的逻辑操作,以确定由位串的一个或多个位表示的哪个参数要被改变。

在具体实施例中,如果由位串11111111表示八个参数,其中每个位是指参数(例如,寄存器中储存的参数值)的储存位置、表示参数值的字节等,并且数据模块304接收包含00010000的位掩码的数据集,则写入模块306可以使用表示参数集和位掩码的位串进行逻辑xor操作(例如,11111111v00010000=00010000),以确定由第三位表示的参数或参数值的储存位置是要被改变的参数值。以此方式,仅由位掩码指定的参数被载入/读取并改变,而不是载入/读取参数集的由位串表示的全部参数。

在一些实施例中,表示参数集、或参数的储存位置的位串包括多个位,其一起表示单个参数值。例如,如果参数的值是大于该单个字节—诸如浮点或双倍—的值,则组合的多个位可以表示单个参数值,或参数值的(多个)储存位置。例如,如果读取阈值的参数值是诸如2.8伏特的二倍(例如,8字节或64位),则位串的表示储存位置的每个位对此参数可以指八个字节中要求储存参数值的字节的储存位置。

图4绘示了参数管理模块150的一个示例。参数管理模块150可以实质上类似于上面相对于图1描述的参数管理模块150。在所绘示的实施例中,参数管理模块150包含命令模块302、数据模块304以及写入模块306,其可以实质上类似于上面参考图3描述的命令模块302、数据模块304以及写入模块306。在其它实施例中,参数管理模块150包含模式改变模块402、储存器模块404以及格式模块406,在下面对其更详细地描述。

在一个实施例中,命令模块302包含模式改变模块402的实施例。在一个实施例中,模式改变模块402接收将ic存储器元件置于测试模式、内部模式等的命令。如本文中所使用的,ic存储器元件的测试或内部模式可以指ic存储器元件的用于接收和/或处理与ic存储器元件的储存操作相关联的管理命令的运行或执行模式。例如,在ic存储器元件被置于测试或内部模式时,可以进行改变ic存储器元件的储存操作参数。在各种实施例中,在模式改变模块402接收将ic存储器元件置于测试模式的命令并然后将ic存储器元件置于测试模式之后,命令模块302接收改变储存参数的命令,并且数据模块304接收一个或多个用于改变储存参数的数据集。

例如,模式改变模块402可以接收将nand闪速储存装置置于测试模式的命令,诸如命令‘5cc5’。在接收‘5cc5’命令之后,模式改变模块402可以将nand闪速储存装置置于测试/内部模式,并且然后命令模块302可以接收改变储存参数的命令。然后数据模块304可以接收一个或多个用于改变储存参数的数据集。值得注意的是,这是在nand闪速储存装置在诸如切换模式或ddr模式的高速或高性能模式下运行时处理的,使得在相同的高速数据速率下接收参数改变命令和用于改变储存参数的数据集,而不是将nand闪速储存装置置于较慢模式,诸如sdr模式。

在某些实施例中,模式改变模块402接收终止命令,其指示ic存储器元件应被取出测试/内部模式并置于常规运行模式。例如,写入模块306可以将终止命令发送到模式改变模块402,以指示其完成改变参数值且ic存储器元件可以返回到正常运行模式。

在一个实施例中,储存器模块404配置为将数据模块304接收的一个或多个数据集储存在与ic存储器元件相关联的一个或多个数据锁存器中。如本文中所使用的,数据锁存器是指ic存储器元件的用于储存数据直到其被写入到ic存储器元件或被从ic存储器元件读取的储存区域。在某些实施例中,储存器模块404使用的数据锁存器是出入ic存储器元件的主数据进入点(point-of-entry)。储存器模块404用来储存一个或多个数据集的数据锁存器的示例可以包含adl、bdl、cdl、xdl等。以此方式,数据可以储存在ic存储器元件上的现有的储存器中而不需要额外的储存器。

在一个实施例中,在写入模块306将数据集中的新的参数值写入到ic存储器元件之前,储存器模块404将一个或多个数据集储存在一个或多个数据锁存器中。在各种实施例中,储存器模块404包含格式模块406,其配置为在储存器模块404将数据集储存在数据锁存器中之前,将一个或多个接收的数据集格式化。在一些实施例中,格式模块406将一个或多个接收的数据集格式化为具有预限定格式的一个或多个位串。例如,对于每个数据集,格式模块406可以将位串格式化为(参数标识)(位掩码)(新值),并且储存器模块404可以将每个位串储存在一个或多个数据锁存器中。位串可以储存在相邻的储存位置中(例如,作为一个长位串)或在分开的储存位置中(例如,作为分开的位串)。例如,格式模块406可以在数据集之间、在数据集之前、在数据集之后等包含一个或多个位作为偏移、填塞(padding)等。

储存器模块404还可以配置为跟踪、确定或以其它方式识别多少个数据集储存在数据锁存器中。以此方式,写入模块306可以确定多少个数据集已经储存在数据锁存器中,并且可以迭代通过数据集确定的次数,以改变与每个数据集相关联的每个参数的参数值。例如,对于每个数据集,写入模块306可以根据预限定的数据格式从数据锁存器读取数据集,基于参数标识和/或位掩码来确定要改变的参数,并且将新值写入到参数的储存位置。在一些实施例中,写入模块306可以在单个时钟循环内读取数据组以修改ic存储器元件的参数、设定、执行变量等。

图5是图示了改变储存参数的方法500的一个示例的示意性流程图。在一个实施例中,方法500开始,并且命令模块302接收502改变ic存储器元件的参数的值的命令。参数可以包含ic存储器元件的一个或多个储存操作的设定。

在其它实施例中,数据模块304接收504具有命令的一个或多个数据集。一个或多个数据集中的数据集可以包含与要改变的参数相关联的标识和参数的新值。以与命令相同的数据速率—例如,切换模式或ddr模式数据速率—接收504一个或多个数据集中的每一个。

在一个实施例中,写入模块306对于一个或多个数据集中的每一个将参数的新值写入506到与参数相关联的储存位置,并且方法500结束。

图6是图示改变储存参数的方法600的其它实施例的示意性流程图。在一个实施例中,方法600开始且模式改变模块402接收将ic存储器元件置于测试/内部模式的命令,并且将ic存储器元件置于602测试/内部模式。在其它实施例中,命令模块302接收604改变ic存储器元件的参数的值的命令。

在一个实施例中,数据模块304以与命令相同的数据速率接收606具有命令的一个或多个数据集。在一些实施例中,写入模块306将数据集中提供的由数据集中的标识识别的位掩码应用608到参数串,以确定要将参数串的哪个参数改变到数据集中包含的新值。

在一些实施例中,写入模块306将参数的新值写入610到与确定的参数相关联的储存位置。写入模块306确定612是否存在要处理以改变不同参数的附加的数据集。如果存在附加的数据集,则写入模块306应用608数据集的位掩码以确定另一参数并将新值写入610到参数。写入模块306对数据模块304接收的每个数据集这样做,并且当写入模块306确定612不存在更多附加的数据集要处理时,方法600结束。

图7是图示改变储存参数的方法700的另一实施例的示意性流程图。在一个实施例中,方法700开始且数据模块302接收702包含用于改变ic存储器元件的一个或多个储存参数的数据的一个或多个数据集。在某些实施例中,在ic存储器元件在切换模式下运行时,例如,在诸如ddr的高速数据速率模式下,数据模块302接收702一个或多个数据集。

在其它实施例中,数据模块302确定704接收的数据集的数目。在一些实施例中,格式模块406格式化706数据集以储存在一个或多个数据锁存器中。作为示例,格式模块406可以将每个数据集格式化为具有预限定格式、顺序、布置、组织等的位串,诸如具有以下数据域顺序的位串:(参数标识)(位掩码)(新值)。

在一个实施例中,储存器模块404在与ic存储器元件相关联的一个或多个数据锁存器中储存708格式化的数据集。在其它实施例中,命令模块302接收710改变参数的命令。响应于接收参数改变命令,写入模块306从数据锁存器读取712数据集,确定要改变的参数(使用数据集中的标识和/或数据集中的位掩码),并且将数据集中的参数的新值写入714到参数的储存位置。

写入模块306确定716已经写入到参数的储存位置的数据集的数目是否等于数据模块304接收的且储存在数据锁存器中的数据集的数目。如果不等于,则写入模块306从数据锁存器读取712下一数据集,并且将数据集中的新值写入714到与数据集相关联的参数的储存位置。写入模块306对数据模块304接收的每个数据集这样做,且当写入模块306确定716已经写入到参数的储存位置的数据集的数目等于数据模块304接收的数据集的数目时,方法700结束。

在各种实施例中,用于接收改变储存参数的命令的构件可以包含命令模块302、参数管理模块150、非易失性储存装置接口139、非易失性存储器介质控制器126、储存器客户端116、主机计算装置110、总线127、网络115、控制器(例如,裸芯控制器220、状态机222、控制器244、装置驱动器等)、感测放大器250、电压源、处理器111、其它逻辑硬件和/或计算机可读储存介质上储存的其它可执行代码。其它实施例可以包含相似或等同构件,以接收改变储存参数的命令。

用于接收一个或多个数据集以改变储存参数的构件,可以包含数据模块304、参数管理模块150、非易失性储存装置接口139、非易失性存储器介质控制器126、储存器客户端116、主机计算装置110、总线127、网络115、控制器(例如,裸芯控制器220、状态机222、控制器244、装置驱动器等)、感测放大器250、电压源、处理器111、其它逻辑硬件,和/或计算机可读储存介质上储存的其它可执行代码。其它实施例可以包含相似或等同构件,来接收一个或多个数据集以改变储存参数。

在各种实施例中,用于将新值写入到储存参数的构件可以包含写入模块306、参数管理模块150、非易失性储存装置接口139、非易失性存储器介质控制器126、储存器客户端116、主机计算装置110、总线127、网络115、控制器(例如,裸芯控制器220、状态机222、控制器244、装置驱动器等)、感测放大器250、电压源、处理器111、其它逻辑硬件,和/或计算机可读储存介质上储存的其它可执行代码。其它实施例可以包含相似或等同构件,来将新值写入到储存参数。

本公开可以实施为其它具体形式,而不背离其精神或基本特性。所描述的实施例在全部方面中仅认为是说明性的而非限制性的。因此,本公开的范围由所附权利要求而非由前述描述指示。权利要求的等同的含义和范围内的全部改变包含在它们的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1