一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

包括主机和储存系统的计算系统的制作方法

2022-07-20 04:59:45 来源:中国专利 TAG:

包括主机和储存系统的计算系统
1.相关申请的交叉引用
2.本技术基于并要求于2021年1月13日提交的韩国专利申请第10-2021-0004937号、于2021年6月16日提交的韩国专利申请第10-2021-0078288号的优先权以及于2021年12月29日提交的韩国专利申请第10-2021-0191117号的优先权,其公开内容通过引用整体并入本文。
技术领域
3.本发明构思的实施例涉及一种计算系统,并且更具体地,涉及一种包括主机和储存系统的计算系统。


背景技术:

4.当随机数据更新时,文件系统(诸如扩展文件系统4(ext4))会将新数据重写到原始位置。其被称为原地更新(in-place-update)方案。日志结构文件系统(log-structured file system,lfs)使用异地更新(out-of-place update)方案,该方案使旧数据无效并将新数据写入另一个位置。


技术实现要素:

5.本发明构思的实施例涉及一种计算系统,并且通过与节点块异步地写入压缩数据块、节点标识符和偏移被合并到其中的合并块,提供了一种具有提高的写入性能的计算系统。
6.根据本发明构思的一个方面,提供了一种包括储存系统和主机的计算系统,该储存系统被配置为存储数据,以及该主机被配置为压缩加载到存储器的预设尺寸的数据块,通过合并对应于数据块的压缩块、引用数据块的节点块的标识符和指示由节点块引用的至少一个数据块当中的数据块的索引的偏移来生成预设尺寸的合并块,并将合并块提供给储存系统。
7.根据本发明构思的一个方面,提供了一种将数据写入储存系统的主机设备,该主机设备包括存储要写入储存系统的数据或从储存系统读取的数据的存储器;压缩管理器,被配置为压缩加载到存储器的预设尺寸的数据块;以及文件系统,被配置为从压缩管理器接收对应于数据块的压缩块,通过合并压缩块、引用数据块的节点块的标识符和指示由节点块引用的至少一个数据块当中的数据块的索引的偏移来生成合并块,并将合并块写入储存系统。
8.根据本发明构思的一个方面,提供了一种包括通用闪存(ufs)系统的计算系统,该系统包括多个储存区域和ufs主机,该ufs主机被配置为在多个储存区域当中的第一储存区域中存储合并块,该合并块合并了压缩数据块被压缩成为的压缩块、引用数据块的节点块的标识符和指示由节点块引用的至少一个数据块当中的数据块的索引的偏移,并且在多个储存区域中的第二储存区域中存储指示数据块的地址的节点块。
附图说明
9.从以下结合附图的详细描述中,将更清楚地理解本发明构思的实施例,其中:
10.图1是根据本发明构思的实施例的计算系统的示意图;
11.图2是根据本发明构思的实施例的图1的主机的框图;
12.图3是根据本发明构思的实施例的图1的储存设备的框图;
13.图4是根据本发明构思的实施例的存储在图1的储存设备中的文件的结构的视图;
14.图5是根据本发明构思的实施例的图1的储存设备的框图;
15.图6是根据本发明构思的实施例的节点地址表的示意图;
16.图7是根据本发明构思的实施例的访问数据块的方法的示意图;
17.图8是根据本发明构思的实施例的写入操作的示意图;
18.图9是根据本发明构思的实施例的计算系统的操作方法的示意图;
19.图10是根据本发明构思的实施例的主机的操作方法的流程图;
20.图11是根据本发明构思的实施例的突然断电恢复操作的示意图;
21.图12是根据本发明构思的实施例的执行恢复操作的计算系统的操作方法的示意图;
22.图13示出了根据本发明概念的实施例的计算系统;
23.图14是根据本发明构思的实施例的计算系统的框图;以及
24.图15是根据本发明构思的实施例的通用闪存(ufs)系统的示意图。
具体实施方式
25.下文将参考附图更全面地描述本发明构思的实施例。贯穿附图,相同的附图标记可以指代相同的元素。
26.应当理解,术语“第一”、“第二”、“第三”等在本文中用于区分一个元素和另一个元素,并且这些元素不受这些术语的限制。因此,实施例中的“第一”元素可以被描述为另一个实施例中的“第二”元素。
27.应当理解,每个实施例内的特征或方面的描述通常应当被认为对于其他实施例中的其他类似特征或方面是可用的,除非上下文清楚地另外指示。
28.如本文中所使用的,单数形式“一个”、“一个”和“该”旨在也包括复数形式,除非上下文清楚地另外指示。
29.本文中,当一个值被描述为大约等于另一个值或者基本上相同或等于另一个值时,应该理解的是,这些值是相同的,这些值在测量错误(error)内彼此相等,或者如果可测量的不相等,则它们在值上足够接近以在功能上彼此相等,如本领域普通技术人员所理解的。例如,本文使用的术语“大约”包括所陈述的值,并意味着在由本领域普通技术人员考虑与特定量(即,测量系统的限制)的测量相关的问题中的测量和错误而确定的特定值的可接受偏差范围内。例如,“大约”可以意味着在本领域普通技术人员所理解的一个或多个标准偏差之内。此外,应当理解,虽然参数在本文可以被描述为具有“大约”某个值,但是根据实施例,该参数可以是精确的某个值或者近似是本领域普通技术人员所理解的测量错误内的某个值。
30.图1是根据本发明概念的实施例的计算系统的示意图。
31.参考图1,计算系统10可以包括主机100和储存系统200。
32.主机100可以向储存系统200提供对数据的写入请求、读取请求或擦除请求。储存系统200可以响应于写入请求将数据存储在储存区域中,响应于读取请求读取存储在储存区域中的数据并将读取的数据提供给主机100,以及响应于擦除请求对数据执行擦除操作。数据可以以预设块(例如4kb)为单位存储或读取。
33.主机100可以包括文件系统110。文件系统110可以处理数据,使得数据可以存储在储存系统200中包括的储存区域中的特定逻辑或物理位置。例如,文件系统110可以处理从用户应用提供的数据,并将处理的数据存储在储存系统200中。
34.在这种情况下,在实施例中,文件系统110可以是日志结构文件系统(lfs)。例如,文件系统110可以是闪存友好文件系统(f2fs),其是根据闪存特性设计的用于linux内核的文件系统,或者是日志记录闪存文件系统(journaling flash file system,jffs),其是在nor闪存设备中使用的linux lfs。
35.然而,文件系统110的类型不限于lfs,并且当文件被更新时,本发明构思的实施例可以应用于新数据被写入与现有数据被写入的逻辑地址不同的逻辑地址的类型的任何文件系统。
36.储存系统200可以包括储存控制器210和储存设备220。储存设备220可以包括至少一个非易失性存储器。储存控制器210可以将从主机100接收的逻辑地址转换成物理地址,并控制储存设备220以将数据存储在具有物理地址的储存区域中。
37.储存系统200可以包括响应于来自主机100的请求而存储数据的储存介质。例如,储存系统200可以包括一个或多个固态驱动器(ssd)。当储存系统200包括ssd时,储存设备220可以包括以非易失性方式存储数据的多个闪存芯片(例如,nand存储器芯片)。储存设备220可以对应于一个闪存设备,或者储存设备220可以包括包含一个或多个闪存芯片的存储器卡。
38.当储存系统200包括闪存时,闪存可以包括二维(2d)nand存储器阵列或三维(3d)(或垂直)nand(vnand)存储器阵列。3d存储器阵列可以单片地形成为具有布置在硅衬底上的有源区的存储器单元阵列,或者与存储器单元的操作相关的电路的至少一个物理层形成在衬底上或衬底中。术语“单片”意味着构成阵列的每一级的层紧靠地堆叠在阵列的每一较低级的层上。
39.在本发明构思的实施例中,3d存储器阵列可以包括垂直布置的vnand串,使得至少一个存储器单元位于另一个存储器单元上。至少一个存储器单元可以包括电荷俘获层(charge trap layer)。
40.在另一示例中,储存系统200可以包括其他多种类型的存储器。例如,储存系统200可以包括非易失性存储器,诸如磁随机存取存储器(mram)、自旋转移矩mram、导电桥接ram(cbram)、铁电ram(feram)、相位ram(pram)、电阻ram、纳米管ram、聚合物ram(poram)、纳米浮栅存储器(nfgm)、全息存储器、分子电子存储器、绝缘体电阻变化存储器等。
41.例如,储存设备220可以包括嵌入式多媒体卡(emmc)或嵌入式通用闪存(ufs)存储器设备。在示例中,储存设备220可以是可拆卸地附接到储存系统200的外部存储器。例如,储存设备220可以包括但不限于ufs存储器卡、紧凑型闪存(cf)卡、安全数字(sd)卡、microsd卡、minisd卡、极限数字(xd)卡或记忆棒。
42.主机100可以通过多种接口与储存系统200通信。例如,主机100可以通过多种接口与储存系统200通信,该各种接口诸如通用串行总线(usb)、多媒体卡(mmc)、pci-规范(pci-e)、at附件(ata)、串行at附件(sata)、并行at附件(pata)、小型计算机系统接口(scsi)、串行连接scsi(sas)、增强小型磁盘接口(esdi)、互换驱动电子设备(ide)、非易失性存储器规范(nvme)等。
43.当用新数据更新随机文件的数据时,主机100可以向储存系统200发送对新数据的写入请求(或写入命令)。
44.本文中,从用户应用提供给文件系统110的数据可以被称为文件数据。文件数据可以以预设块(例如4kb)为单位存储在储存系统200中,并且以块为单位的文件数据可以被称为数据块。文件数据可以包括多个数据块。
45.文件系统110可以生成对应于数据块的节点块。节点块可以包括关于数据块的信息。例如,节点块可以包括文件名、节点标识符、文件尺寸或数据块的逻辑地址。在实施例中,文件的名称指由数据块形成的文件的名称,节点标识符是节点块的唯一标识符,以及文件的尺寸指由数据块形成的文件的尺寸。节点块可以引用多个数据块,并且可以基于偏移来识别多个数据块中的每一个。
46.节点块可以以预设块(例如4kb)为单位存储在储存系统200中。例如,节点块可以用于找到数据块的位置。例如,文件系统110可以向每个节点块分配节点标识符。文件系统110可以通过节点地址表(nat)来管理节点标识符和对应于该节点标识符的逻辑地址。文件系统110可以通过nat访问节点块,并通过识别存储在节点块中的数据块的逻辑地址来访问数据块。
47.根据本发明构思的实施例的主机100可以包括压缩管理器120。压缩管理器120可以通过压缩数据块来生成压缩块。文件系统110可以通过合并压缩块、对应于数据块的节点块的节点标识符和数据块的偏移,以预设单位(例如4kb)生成块。本文中,通过合并压缩块、节点标识符和偏移生成的块可以被称为合并块。节点块可以引用对应于文件数据的多个数据块。节点块可以基于偏移识别多个数据块中的每一个。合并块中包括的偏移可以是用于识别多个数据块当中的数据块的信息。在本发明构思的一些实施例中,合并块可以包括指示合并块的位。压缩管理器120也可以被称为压缩电路或压缩管理器电路。
48.文件系统110可以将合并块和对应于合并块的节点块异步写入储存系统200。即,合并块被发送到储存系统200的时间段和节点块被发送到储存系统200的时间段可以是不连续的。例如,合并块可以在与节点块被发送到储存系统200的时间不同的时间被发送到储存系统200。例如,文件系统110可以响应于用户应用的请求将合并块写入储存系统200,并且在主机100和储存系统200之间的接口处于空闲状态的时间段内将节点块写入储存系统200。因此,主机100和储存系统200之间的接口被节点块占用的时间段和接口被合并块占用的时间段可以被分散,从而提高写入性能。
49.主机100可以包括存储器130。文件系统110可以将从用户应用提供的文件数据划分成数据块,并将数据块加载到存储器130。文件系统110可以生成对应于每个数据块的节点块,并将生成的节点块加载到存储器130。存储器130可以是易失性存储器设备。例如,存储器130可以包括易失性存储器,诸如dram、sdram、ddr sdram、lpddr sdram、gram等。
50.当突然断电(spo)发生时,其中对主机100的供电突然切断,加载到存储器130的数
据可能被破坏/擦除。为了防止spo,文件系统110可以执行将加载到存储器130中的整个数据(例如,nat、数据块和节点块)存储在储存系统200中的检查点操作。即使当电源切断时,储存设备220也可以持续存储数据。检查点操作可以定期或不定期地执行。例如,可以每30秒执行一次检查点操作。然而,执行检查点操作的间隔不限于此。
51.当在spo之后再次向主机100供电时,文件系统110可以执行突然断电恢复(spor)操作。在spor中,文件系统110可以将合并块加载到存储器130中,并从合并块中获得数据块。文件系统110可以从合并块获得节点标识符和偏移,并生成对应于数据块的节点块。
52.根据本发明构思的实施例的文件系统110可以将合并块和节点块异步写入储存设备220。因此,当在合并块被写入储存设备220之后发生spo时,对应于合并块的节点块可能在存储器130中被破坏/擦除,而不被写入储存设备220。因此,文件系统110可以读取已写入储存设备220的合并块,并且通过使用包括在合并块中的节点标识符和偏移来生成对应于合并块的节点块。
53.图2是根据本发明构思的实施例的图1的主机100的框图。
54.参考图2,主机100可以包括用户空间11和内核空间12。
55.图2所示的组件可以是软件组件或硬件组件,诸如例如现场可编程门阵列(fpga)或专用集成电路(asic)。然而,组件不限于此。例如,在一些实施例中,组件可以被配置为存在于可寻址储存介质中,或者可以被配置为运行一个或多个处理器。组件中提供的功能可以由更详细的组件来实现,或者可以作为通过组合多个组件来执行特定功能的一个组件来实现。
56.在实施例中,用户空间11是运行用户应用13的区域,以及内核空间12是为内核运行限制性保留的区域。为了用户空间11访问内核空间12,可以使用系统调用。
57.内核空间12可以包括虚拟文件系统14、文件系统110、设备驱动器15等。根据实施例,可以有一个或多个文件系统110。在一些实施例中,文件系统110可以是f2fs。
58.在一些实施例中,文件系统110可以将储存设备220的储存区域划分成多个块(block)、多个组(section)和多个域(zone),并将从用户应用13提供的日志写入每个块。将参照图5详细描述将储存设备220的储存区域划分成多个块、多个组和多个域。
59.虚拟文件系统14可以允许一个或多个文件系统110相互操作。虚拟文件系统14可以使能使用标准化系统调用来对不同介质的不同文件系统110执行读取/写入操作。因此,例如,无论文件系统110的类型如何,都可以使用诸如open()、read()和write()的系统调用。即,虚拟文件系统14可以是存在于用户空间11和文件系统110之间的抽象层。
60.设备驱动器15可以管理硬件和用户应用13(或操作系统)之间的接口。设备驱动器15可以是利用于硬件在特定操作系统下正常运行的程序。
61.图3是根据本发明构思的实施例的图1的储存设备220的框图。
62.参考图3,存储设备220的存储区域可以被配置为包括块31、段32、组33和域34。存储设备220的存储区域可以包括多个域34。域34可包括多个组33,组33可包括多个段32,以及段32可包括多个块31。例如,块31可以是存储4kb数据的储存区域,以及段32可以是通过包括512个块31来存储2mb数据的储存区域。如图3所示的储存设备220的配置可以在格式化储存设备220的时间确定,但不限于此。文件系统110可以以4kb页面为单位读取和写入数据。即,块31可以存储一个页面。
63.图4是根据本发明构思的实施例的存储在图1的储存设备220中的文件的结构的视图。
64.存储在储存设备220中的文件可以具有索引结构。一个文件可以包括文件数据和节点数据,该文件数据包括将由用户应用13(图2的)存储的文件的内容,该节点数据包括文件的属性、将存储文件数据的数据块的位置等。
65.参考图4,数据块41至44可以是存储文件数据的储存区域,以及节点块51至57可以是存储节点数据的储存区域。
66.节点块51至57可以包括索引节点块51、直接节点块52、54和57以及间接节点块53、55和56。
67.索引节点块51可以包括直接指向数据块41的直接指针、指向直接节点块52的单间接节点指针、指向间接节点块53的双间接节点指针或指向间接节点块55的三间接节点指针中的至少一个。可以为每个文件提供索引节点块。尽管节点块51至57中的每一个被示出为指示数据块,但是实施例不限于此。节点块51至57中的每一个可以指示多个数据块。在一些实施例中,可以基于偏移来识别多个数据块中的每一个。偏移可以是多个数据块中的每一个的索引。
68.间接节点块52、54和57可以包括直接指向数据块41、43和44的数据指针。
69.间接节点块53、55和56可以包括第一间接节点块53和56以及第二间接节点块55。第一间接节点块53和56可以包括指向直接节点块54和57的第一节点指针。第二间接节点块55可以包括指向第一间接节点块56的第二节点指针。
70.图5是根据本发明构思的实施例的图1的存储设备的框图。图6是根据本发明构思的实施例的nat的示意图。
71.参考图5,储存设备220的储存区域可以包括第一区域region 1和第二区域region 2。在文件系统110中,储存设备220的储存区域可以在格式上被划分为第一区域region 1和第二区域region 2,但是本发明构思的实施例不限于此。
72.在实施例中,第一区域region 1是存储由整个系统管理的多条信息的区域,并且可以包括例如当前分配的文件数量、有效页面数量、位置等。在实施例中,第二区域region 2是存储由用户实际使用的多条目录信息、数据、文件信息等的储存区域。
73.第一区域region 1可以包括第一超级块sb1 61和第二超级块sb2 62、检查点区(cp area)63、段信息表(sit)64、nat 65、段摘要区(ssa)66等。
74.第一超级块sb1 61和第二超级块sb2 62可以存储文件系统110的默认信息。例如,可以存储第一超级块sb1 61的尺寸、块61的数量、文件系统110的状态插件(state plug)(干净、稳定、活动、记录日志、未知)等。如图所示,第一超级块61和第二超级块62总共可以是两个块,其中每个块存储相同的内容。因此,即使当两个超级块中的任何一个发生问题时,也可以使用另一个超级块。
75.cp 63可以存储检查点。检查点可以是逻辑断点,并且断点的状态可以被完全保存。当在计算系统10的操作期间发生spo时,文件系统110可以通过使用保存的检查点来恢复数据。检查点可以定期生成。然而,检查点的生成不限于此。
76.nat 65可以包括分别对应于节点块的多个节点标识符node id(nid)和分别对应于多个节点标识符的多个地址,如图6所示。例如,对应于节点标识符n1的节点块可以对应
length)编码方案、霍夫曼编码方案、算术编码方案、熵编码方案、马尔可夫链方案、距离(range)编码方案或差分脉冲编码调制方案。
87.在操作s820中,文件系统110可以通过合并压缩块c_block、节点标识符n1和第一数据块data block 1的偏移ofs来生成合并块m_block。合并块m_block的尺寸可以是l1。在本发明构思的一些实施例中,l1可以是4kb。即,压缩块c_block的尺寸l2、节点标识符n1的尺寸l3和偏移ofs的尺寸l4的总和可以是l1。文件系统110可以生成对应于第一数据块data block 1的节点块810。节点块810可以是包括节点标识符n1和地址a2的块。地址a2可以指示存储合并块m_block的位置。节点块810可以引用包括第一数据块data block 1的多个数据块。节点块810可以基于多个数据块当中的偏移ofs来识别第一数据块data block 1。
88.在操作s830,文件系统110可以将合并块m_block写入储存系统200。合并块m_block可以被写入储存设备220中包括的数据日志。在数据日志中,可以顺序写入数据块。因此,合并块m_block可以从紧挨着第二数据块data block 2(其是现有数据块)被存储的位置的位置被顺序写入。第一数据块data block 1和第二数据块data block 2可以是关于相同文件的数据,其中第一数据块data block 1可以是最新的数据块,并且第二数据块data block 2可以是现有数据块。在实施例中,数据日志意味着对应于图5的数据段的储存区域。第一数据块data block 1可以是合并块。
89.在操作s840,文件系统110可以将对应于合并块m_block的节点块810写入储存系统200。节点块810可以被写入储存设备220中包括的节点日志。在节点日志中,可以顺序写入节点块。因此,节点块810可以从紧挨着第二节点块820(其是现有数据块)被存储的位置的位置被顺序写入。第二节点块820可以存储作为现有数据块的第二数据块data block 2的地址a4。操作s840可以在主机100和储存系统200之间的接口没有被数据占用的空闲时间的期间执行。即,写入合并块m_block的时间段。写入节点块810的时间段可以是不连续的。例如,主机100和储存系统200之间的接口被合并块m_block占用的时间和接口被节点块占用的时间可以被分散,从而提高写入性能。
90.在操作s850中,文件系统110可以通过执行将节点标识符n1的地址改变为a1的写入操作来对nat执行更新操作。在执行更新操作之前,地址a3可以对应于储存系统200的nat上的节点标识符n1。在执行更新操作之后,地址a1可以对应于节点标识符n1。
91.在操作s850之后,即使当spo发生时,文件系统110也可以通过参考存储在储存系统200中的nat来读取对应于节点标识符n1的地址a1,通过使用地址a1来访问节点块810,并且通过使用节点块810中存储的地址a2来访问合并块m_block。
92.根据本发明构思的实施例的文件系统110可以访问合并块m_block,更新指示合并块m_block的节点块810,并且更新nat以指示节点块810,即使当在操作s830之后发生spo时。
93.图9是根据本发明构思的实施例的计算系统的操作方法的示意图。
94.参考图9,计算系统的操作方法可以包括多个操作s910至s960。
95.在操作s910中,用户应用可以向文件系统110发送写入请求w_req。写入请求w_req可以是一种系统调用。例如,写入请求w_req可以是write()。
96.在操作s920中,文件系统110可以生成对应于写入请求的数据块,并将该数据块发送到压缩管理器120。文件系统110可以生成对应于数据块的至少一个节点块。至少一个节
点块可以包括索引节点块、直接块或间接块中的至少一个。数据块和节点块可以具有预设尺寸l1(例如4kb)。
97.在操作s930中,压缩管理器120可以生成压缩块c_block。例如,压缩管理器120可以根据数据块的尺寸是否减少了参考尺寸(reference size)来停止压缩操作。可以基于节点标识符的尺寸和数据块的偏移的尺寸的总和来确定参考尺寸。在本发明构思的一些实施例中,参考尺寸可以基于节点标识符的尺寸、偏移的尺寸和压缩标记的尺寸来确定。在实施例中,压缩标记意味着指示数据块被压缩的至少一个位。在操作s930中,当数据块的尺寸没有减少参考尺寸时,压缩管理器120可以向文件系统110提供压缩失败信号。
98.在操作s940中,压缩管理器120可以将压缩块c_block提供给文件系统110。压缩块c_block的尺寸可能是比l1小的l2。
99.在操作s950中,文件系统110可以生成合并块m_block。例如,文件系统110可以通过合并压缩块c_block、数据块的偏移和节点标识符来生成合并块m_block。合并块m_block的尺寸可以等于数据块的尺寸。例如,合并块m_block的尺寸可以是4kb。
100.在操作s960中,文件系统110可以向储存系统200发送写入命令w_cmd和合并块m_block。当在文件系统110将合并块m_block发送到储存系统200之后发生储存系统200的空闲时间时,节点块可以被发送到储存系统200。即,储存系统200可以异步写入合并块m_block和节点块。在操作s930中,当未生成压缩块c_block时,文件系统110可以向储存系统200发送写入命令w_cmd、数据块和节点块。即,储存系统200可以同步写入数据块和节点块。
101.图10是根据本发明构思的实施例的主机的操作方法的流程图。
102.参考图10,主机的操作方法可以包括多个操作s1010至s1060。
103.在操作s1010中,压缩管理器120可以对数据块的第一部分执行压缩操作。第一部分可以是具有数据块的预设尺寸的部分。压缩尺寸可以随着具有预设尺寸和压缩算法的部分的数据状态而不同。
104.在操作s1020中,压缩管理器120可以将压缩尺寸与参考尺寸进行比较。在本发明构思的一些实施例中,压缩管理器120可以将通过对第一部分压缩减少的尺寸与参考尺寸进行比较。参考尺寸可以对应于节点标识符的尺寸和数据块的偏移的尺寸的总和。在本发明构思的一些实施例中,参考尺寸可以对应于节点标识符的尺寸、偏移的尺寸和合并标记的尺寸。当压缩尺寸小于参考尺寸时,可以执行操作s1040,并且当压缩尺寸等于或大于参考尺寸时,可以执行操作s1030。
105.在操作s1030中,文件系统110可以生成合并块,并将合并块发送到储存系统200。文件系统110可以将合并块和写入命令一起发送到储存系统200,以对合并块执行写入操作。文件系统110可以在与发送合并块的时间段而不同的时间段内,向储存系统200提供对应于合并块的节点块,从而提高写入性能。
106.在操作s1040中,压缩管理器120可以确定是否对数据块执行了最大压缩。当执行最大压缩时,可以执行操作s1060,而当不执行最大压缩时,可以执行操作s1050。
107.在操作s1050中,压缩管理器120可以压缩数据块的下一部分。数据块的下一部分可以具有等于或不同于第一部分的尺寸的尺寸。在压缩下一部分之后,可以再次执行操作s1020。由于压缩管理器120以逐步的方式压缩数据块,可以减少被利用于生成合并块的压缩时间。
108.在操作s1060中,文件系统110可以将数据块和节点块发送到储存系统200,使得数据块和节点块在连续的时间段内被写入储存系统200。
109.图11是根据本发明构思的实施例的spor操作的示意图。
110.参考图8,在操作s830之后,可能发生spo。因此,当节点块810没有被写入节点日志时,存储器130中的数据可能被破坏/擦除。即,如图11所示,当合并块m_block被写入数据日志并且对应于合并块m_block的第一节点块810没有被写入时,可能发生spo。因此,写入节点日志的现有第二节点块820可以指示作为现有数据块的第二数据块data block 2的地址a4,而不是合并块m_block的地址a2。spr操作可以包括多个操作s1110至s1150。
111.在操作s1110,文件系统110可以将nat加载到存储器130。虽然在图11中示出了现有数据被写入nat,但是本发明构思的实施例不限于此。例如,在一些实施例中,加载到存储器130的nat可以存储对应于节点标识符n1的地址a3和对应于节点标识符n1的地址a2。
112.在操作s1120,文件系统110可以将被写入数据日志的合并块m_block加载到存储器130。当块被顺序写入数据日志时,文件系统110可以从最新写入的块开始将块顺序加载到存储器130。在图11中示出了合并块m_block被加载,但是代替合并块的数据块可以被加载到存储器130。文件系统110可以将写入节点日志的第二节点块820加载到存储器130。
113.在操作s1130中,文件系统110可以在加载的块当中搜索合并块m_block。文件系统110可以通过在加载的块当中识别合并标记e_m来搜索合并块m_block。
114.在操作s1140中,文件系统110可以通过更新第二节点块820来生成第一节点块810,使得第二节点块820对应于合并块m_block。例如,文件系统110可以基于包括在合并块m_block中的节点标识符n1和数据块的偏移ofs来更新第二节点块820。随着多个数据块被顺序写入数据日志以及多个数据块的尺寸,文件系统110可以获得合并块m_block的地址。此外,文件系统110可以基于偏移ofs将第一节点块810连接到第一数据块data block 1。具体而言,文件系统110可以将由第一节点块810引用的多个数据块当中对应于偏移ofs的数据块设置为第一数据块data block 1。因此,由于可以基于节点标识符n1和偏移ofs将第二节点块820更新为第一节点块810,所以即使当没有执行图8的操作s840时,也可以恢复第一节点块810。
115.在操作s1150,文件系统110可以更新nat。例如,文件系统110可以将对应于节点标识符n1的地址从a3更新为a1。
116.图12是根据本发明构思的实施例的执行恢复操作的计算系统的操作方法的示意图。
117.参考图12,计算系统的操作方法可以包括多个操作s1210至s1240。
118.在操作s1210中,文件系统110可以向储存系统200发送读取命令r_cmd。文件系统110可以将近期写入数据日志的块的地址与读取命令r_cmd一起发送到储存系统200。近期写入的块的地址可以通过cp获得。近期写入的块可以是最近期写入的块(例如,最新写入的块)。
119.在操作s1220中,储存系统200可以将合并块m_block发送到文件系统110。储存系统200可以发送数据块和节点块以及合并块m_block。
120.在操作s1230中,文件系统110可以在从储存系统200接收的块当中搜索合并块m_block,并将包括在找到的合并块m_block中的压缩块c_block发送到压缩管理器120。
121.在操作s1240中,压缩管理器120可以通过对压缩块c_block执行解压缩来生成数据块,并将数据块发送到文件系统110。数据块可以存储在存储器130中。
122.在操作s1250中,文件系统110可以基于包括在合并块m_block中的节点标识符和地址来生成对应于数据块的节点块。节点块可以存储在存储器130中。
123.图13是根据本发明构思的实施例的应用了存储设备的计算系统1000的示意图。图13的系统1000可以是例如移动系统,诸如便携式通信终端(例如,移动电话)、智能手机、平板个人计算机(pc)、可穿戴设备、医疗保健设备或物联网(iot)设备。然而,图13的系统1000不必须限于这种移动系统,并且可以是例如个人计算机、膝上型计算机、服务器、媒体播放器或汽车设备(例如,导航设备)。系统1000可以包括图1的计算系统10。
124.参考图13,计算系统1000可以包括主处理器1100、存储器(例如,1200a和1200b)和储存系统(例如,1300a和1300b)。此外,计算系统1000可以包括图像捕捉设备1410、用户输入设备1420、传感器1430、通信设备1440、显示器1450、扬声器1460、供电设备1470和连接接口1480中的至少一个。
125.主处理器1100可以控制计算系统1000的所有操作,包括例如计算系统1000中包括的组件的操作。主处理器1100可以被实现为例如通用处理器、专用处理器或应用处理器。
126.主处理器1100可以包括至少一个cpu核1110,并且可以进一步包括控制器1120,其被配置为控制存储器1200a和1200b和/或储存系统1300a和1300b。在一些实施例中,主处理器1100还可以包括加速器1130,该加速器1130是用于高速数据操作(诸如人工智能(ai)数据操作)的专用电路。加速器1130可以包括例如图形处理元件(gpu)、神经处理元件(npu)和/或数据处理元件(dpu),并且被实现为与主处理器1100的其他组件物理分离的芯片。
127.存储器1200a和1200b可以用作计算系统1000的主存储器设备。尽管存储器1200a和1200b中的每一个可以包括易失性存储器,诸如静态随机存取存储器(sram)和/或动态ram(dram),但是在一些实施例中,存储器1200a和1200b中的每一个可以包括非易失性存储器,诸如闪存、相变ram(pram)和/或电阻ram(rram)。存储器1200a和1200b可以在与主处理器1100相同的封装中实现。图1的主机100可以由图13的主处理器1100和存储器1200a和1200b实现。
128.储存系统1300a和1300b可以用作被配置为存储数据的非易失性存储设备,而不管是否向其供电,并且具有比存储器1200a和1200b更大的存储容量。储存系统1300a和1300b可以分别包括储存控制器1310a和1310b以及被配置为经由储存控制器1310a和1310b的控制来存储数据的nvm 1320a和1320b。尽管nvm 1320a和1320b可以包括具有二维(2d)结构或三维(3d)nand结构的闪存,但是在一些实施例中,nvm 1320a和1320b可以包括其他类型的nvm,例如pram和/或rram。
129.储存系统1300a和1300b可以与主处理器1100物理分离,并且包括在计算系统1000中,或者在与主处理器1100相同的封装中实现。储存系统1300a和1300b可以是固态设备(ssd)或存储器卡,并且可以通过接口(诸如下面将进一步描述的连接接口1480)与系统1000的其他组件可移除地组合。储存系统1300a和1300b可以是应用标准协议的设备,诸如例如通用闪存(ufs)、嵌入式多媒体卡(emmc)或非易失性存储器规范(nvme),但不限于此。图1的储存系统200可以包括在储存系统1300a和1300b中的至少一个中。
130.图像捕捉设备1410可以捕捉静止图像或运动图像。图像捕捉设备1410可以包括例
如照相机、摄像机和/或网络摄像机。
131.用户输入设备1420可以接收由系统1000的用户输入的多种类型的数据,并且包括例如触摸板、小键盘、键盘、鼠标和/或麦克风。
132.传感器1430可以检测可以从计算系统1000外部获得的多种类型的物理量,并将检测到的物理量转换成电信号。传感器1430可以包括例如温度传感器、压力传感器、照度传感器、位置传感器、加速度传感器、生物传感器和/或陀螺仪传感器。
133.通信设备1440可以根据多种通信协议在系统1000外部的其他设备之间发送和接收信号。通信设备1440可以包括例如天线、收发器和/或调制解调器。
134.显示器1450和扬声器1460可以用作输出设备,被配置为分别向系统1000的用户输出视觉信息和听觉信息。
135.供电设备1470可以适当地转换从嵌入在计算系统1000中的电池和/或外部电源供应的电力,并将转换的电力供应给计算系统1000的组件中的每一个。
136.连接接口1480可以提供计算系统1000和外部设备之间的连接,该外部设备连接到计算系统1000并且能够向计算系统1000发送数据和从计算系统1000接收数据。连接接口1480可以通过使用多种接口方案来实现,诸如例如高级技术附件(ata)、串行ata(sata)、外部sata(e-sata)、小型计算机小型接口(scsi)、串行连接scsi(sas)、外围组件互连(pci)、pci规范(pcie)、nvme、ieee 1394、通用串行总线(usb)接口、安全数字(sd)卡接口、多媒体卡(mmc)接口、emmc接口、ufs接口、嵌入式ufs(eufs)接口以及紧凑型闪存(cf)卡接口等。
137.图14是根据本发明构思的实施例的计算系统2000的框图。
138.计算系统2000可以包括主机2100和储存系统2200。储存系统2200可以包括储存控制器2210和nvm 2220。根据实施例,主机2100可以包括主机控制器2110和主机存储器2120。主机存储器2120可以用作缓冲存储器,被配置为临时存储要发送到储存系统2200的数据或者从储存系统2200接收的数据。主机2100是图1的主机100的示例。
139.储存系统2200可以包括储存介质,被配置为响应于来自主机2100的请求存储数据。作为示例,储存系统2200可以包括ssd、嵌入式存储器和可移除外部存储器中的至少一个。当储存系统2200是ssd时,储存系统2200可以是符合nvme标准的设备。当储存系统2200是嵌入式存储器或外部存储器时,储存系统2200可以是符合ufs标准或emmc标准的设备。主机2100和储存系统2200中的每一个都可以根据采用的标准协议生成包(packet)并发送该包。
140.当储存系统2200的nvm 2220包括闪存时,闪存可以包括2d nand存储器阵列或3d(或垂直)nand(vnand)存储器阵列。作为另一个示例,储存系统2200可以包括多种其他类型的nvm。例如,储存系统2200可以包括磁ram(mram)、自旋转移矩mram、导电桥接ram(cbram)、铁电ram(fram)、pram、rram以及多种其他类型的存储器。
141.根据实施例,主机控制器2110和主机存储器2120可以被实现为分离的半导体芯片。或者,在一些实施例中,主机控制器2110和主机存储器2120可以集成在相同的半导体芯片中。作为示例,主机控制器2110可以是应用处理器(ap)中包括的多个模块中的任何一个。ap可以实现为片上系统(soc)。此外,主机存储器2120可以是包括在ap中或者ap外部的nvm或存储器模块中的嵌入式存储器。
142.主机控制器2110可以管理将主机存储器2120的缓冲区域的数据(例如,写入数据)
存储在nvm 2220中的操作或者将nvm 2220的数据(例如,读取数据)存储在缓冲区域中的操作。
143.储存控制器2210可以包括主机接口2211、存储器接口2212和cpu 2213。储存控制器2210还可以包括闪存转换层(ftl)2214、包管理器2215、缓冲存储器2216、错误校正码(ecc)引擎2217和高级加密标准(aes)引擎2218。储存控制器2210还可以包括工作存储器,其中ftl 2214被加载。cpu 2213可以运行ftl 2214来控制nvm 2220上的数据写入和读取操作。
144.主机接口2211可以向主机2100发送包和从主机2100接收包。从主机2100发送到主机接口2211的包可以包括要写入到nvm 2220的命令或数据。从主机接口2211发送到主机2100的包可以包括对从nvm 2220读取的命令或数据的响应。存储器接口2212可以将要写入到nvm 2220的数据发送到nvm 2220,或者接收从nvm 2220读取的数据。存储器接口2212可以被配置为遵守标准协议,诸如例如,toggle或开放nand闪存接口(onfi)。
145.ftl2214可以执行多种功能,诸如例如地址映射操作、损耗均衡(wear-leveling)操作和垃圾收集操作。地址映射操作可以是将从主机2100接收的逻辑地址转换成用于在nvm 2220中实际存储数据的物理地址的操作。损耗均衡操作可以是通过允许均匀使用nvm 2220的块来防止或减少特定块的过度恶化的技术。作为示例,损耗均衡操作可以使用平衡物理块的擦除计数的固件技术来实现。垃圾收集操作可以是用于通过在将现有块的有效数据复制到新块之后擦除现有块来获得nvm 2220中的可用容量的技术。
146.包管理器2215可以根据连接到主机2100的接口的协议生成包,或者解析来自从主机2100接收的包的多种类型的信息。此外,缓冲存储器2216可以临时存储要写入nvm 2220的数据或要从nvm 2220读取的数据。尽管缓冲存储器2216是包括在图14中的储存控制器2210中的组件,但是在一些实施例中,缓冲存储器2216可以放置在储存控制器2210的外部。
147.ecc引擎2217可以对从nvm 2220读取的读取数据执行错误检测和校正操作。例如,ecc引擎2217可以为要写入到nvm 2220的写入数据生成奇偶校验位,并且生成的奇偶校验位可以与写入数据一起存储在nvm 2220中。在来自nvm 2220的数据的读取期间,ecc引擎2217可以通过使用与读取数据一起从nvm 2220读取的奇偶校验位来校正读取数据中的错误,并输出错误校正后的读取数据。
148.aes引擎2218可以通过使用对称密钥算法对输入到储存控制器2210的数据执行加密操作和解密操作中的至少一个。
149.图15是根据本发明构思的实施例的ufs系统3000的示意图。ufs系统3000可以是符合根据联合电子设备工程委员会(jedec)的ufs标准的系统,并且包括ufs主机3100、ufs设备3200和ufs接口3300。图1的计算系统10的以上描述的方面也可以应用于图15的ufs系统3000,除非上下文另有指示。主机3100可以包括图1的主机100的至少一些元素,并且ufs设备3200可以包括图1的储存系统200的至少一些元素。
150.参考图15,ufs主机3100可以通过ufs接口3300连接到ufs设备3200。
151.ufs主机3100可以包括ufs主机控制器3110、应用3120、ufs驱动器3130、主机存储器3140和ufs互连(uic)层3150。ufs设备3200可以包括ufs设备控制器3210、nvm 3220、存储接口3230、设备存储器3240、uic层3250和调节器3260。nvm 3220可以包括多个存储器元件3221。尽管每个存储器元件3221可以包括具有2d结构或3d结构的v-nand闪存,但是在一些
实施例中,每个存储器元件3221可以包括另一种nvm,诸如例如pram和/或rram。ufs设备控制器3210可以通过存储接口3230连接到nvm 3220。存储接口3230可以被配置为遵守标准协议,诸如例如,toggle或onfi。
152.应用3120可以指与ufs设备3200通信以使用ufs设备3200的功能的程序。应用3120可以向ufs驱动器3130发送输入-输出请求(ior),用于在ufs设备3200上进行输入/输出(i/o)操作。ior可以指例如数据读取请求、数据存储(或写入)请求和/或数据擦除(或丢弃)请求,但不限于此。
153.ufs驱动器3130可以通过ufs-主机控制器接口(ufs-hci)管理ufs主机控制器3110。ufs驱动器3130可以将由应用3120生成的ior转换成由ufs标准定义的ufs命令,并将ufs命令发送到ufs主控制器3110。一个ior可以被转换成多个ufs命令。虽然ufs命令可以由scsi标准定义,但是ufs命令可以是专用于ufs标准的命令。
154.ufs主机控制器3110可以通过uic层3150和ufs接口3300将由ufs驱动器3130转换的ufs命令发送到ufs设备3200的uic层3250。在ufs命令的发送期间,ufs主机控制器3110的ufs主机寄存器3111可以用作命令队列(cq)。
155.ufs主机3100侧的uic层3150可以包括移动工业处理器接口(mipi)m-phy 3151和mipi unipro 3152,以及ufs设备3200侧的uic层3250也可以包括mipi m-phy 3251和mipi unipro 3252。
156.ufs接口3300可以包括被配置为发送参考时钟信号ref_clk的线路、被配置为发送ufs设备3200的硬件复位信号reset_n的线路、被配置为发送一对差分输入信号din_t和din_c的一对线路、以及被配置为发送一对差分输出信号dout_t和dout_c的一对线路。
157.在一些实施例中,从ufs主机3100提供给ufs设备3200的参考时钟信号ref_clk的频率可以是大约19.2mhz、大约26mhz、大约38.4mhz和大约52mhz中的一个,但不限于此。ufs主机3100可以在操作期间,即在ufs主机3100和ufs设备3200之间的数据传发送/接收操作期间,改变参考时钟信号ref_clk的频率。ufs设备3200可以通过使用锁相环(pll)从ufs主机3100提供的参考时钟生成具有多种频率的时钟信号。此外,ufs主机3100可以通过使用参考时钟信号ref_clk的频率来设置ufs主机3100和ufs设备3200之间的数据速率。即,数据速率可以根据参考时钟信号ref_clk的频率来确定。
158.ufs接口3300可以支持多个通道,每个通道可以实现为一对差分线路。例如,ufs接口3300可以包括至少一个接收通道和至少一个发送通道。在图15中,被配置为发送一对差分输入信号din_t和din_c的一对线路可以构成接收通道,并且被配置为发送一对差分输出信号dout_t和dout_c的一对线路可以构成发送通道。尽管在图5中示出了一个发送通道和一个接收通道,但是发送通道的数量和接收通道的数量不限于此。
159.接收通道和发送通道可以基于串行通信方案发送数据。由于接收通道与发送通道分离的结构,可以使能ufs主机3100和ufs设备3200之间的全双工通信。即,当在通过接收通道从ufs主机3100接收数据的同时,ufs设备3200可以通过发送通道向ufs主机3100发送数据。此外,从ufs主机3100到ufs设备3200的控制数据(例如,命令)和要由ufs主机3100存储在ufs设备3200的nvm 3220中或要从其读取的用户数据可以通过相同的通道发送。因此,在一些实施例中,在ufs主机3100和ufs设备3200之间,除了一对接收通道和一对发送通道之外,不利用用于数据传输的单独通道。
160.ufs设备3200的ufs设备控制器3210可以控制ufs设备3200的所有操作。ufs设备控制器3210可以通过使用作为逻辑数据存储元件的逻辑元件(lu)3211来管理nvm 3220。lu 3211的数量可以是8,但不限于此。在一些实施例中,上面参考图8和图10描述的数据日志和节点日志可以包括逻辑元件(lu)3211中的至少一个。例如,第一逻辑元件(lu)可以包括在数据日志中,并且第二逻辑元件(lu)可以包括在节点日志中。逻辑元件(lu)3211可以被称为储存区域。ufs设备控制器3210可以包括ftl,并且通过使用ftl的地址映射信息,将从ufs主机3100接收的逻辑数据地址(例如,逻辑块地址(lba))转换成物理数据地址(例如,物理块地址(pba))。被配置为在ufs系统3000中存储用户数据的逻辑块可以具有预定范围内的尺寸。例如,逻辑块的最小尺寸可以设置为4k字节。
161.当来自ufs主机3100的命令通过uic层3250被应用到ufs设备3200时,ufs设备控制器3210可以响应于该命令执行操作,并且当操作完成时向ufs主机3100发送完成响应。
162.作为示例,当ufs主机3100打算在ufs设备3200中存储用户数据时,ufs主机3100可以向ufs设备3200发送数据存储命令。当从ufs设备3200接收到指示ufs主机3100准备好接收用户数据(准备好传输(ready-to-transfer))的响应(“准备好传输”响应)时,ufs主机3100可以向ufs设备3200发送用户数据。ufs设备控制器3210可以将接收到的用户数据临时存储在设备存储器3240中,并且基于ftl的地址映射信息将临时存储在设备存储器3240中的用户数据存储在nvm 3220的选定位置。
163.作为另一示例,当ufs主机3100打算读取存储在ufs设备3200中的用户数据时,ufs主机3100可以向ufs设备3200发送数据读取命令。已经接收到命令的ufs设备控制器3210可以基于数据读取命令从nvm 3220读取用户数据,并将读取的用户数据临时存储在设备存储器3240中。在读取操作期间,ufs设备控制器3210可以通过使用嵌入其中的ecc引擎来检测和校正读取的用户数据中的错误。例如,ecc引擎可以为要写入nvm 3220的写入数据生成奇偶校验位,并且生成的奇偶校验位可以与写入数据一起存储在nvm 3220中。在来自nvm 3220的数据的读取期间,ecc引擎可以通过使用从nvm 3220读取的奇偶校验位以及读取的数据来校正读取数据中的错误,并输出错误校正的读取数据。
164.此外,ufs设备控制器3210可以将临时存储在设备存储器3240中的用户数据发送到ufs主机3100。此外,ufs设备控制器3210还可以包括aes引擎。aes引擎可以通过使用对称密钥算法对发送到ufs设备控制器3210的数据执行加密操作和解密操作中的至少一个。
165.ufs主机3100可以将要发送到ufs设备3200的命令顺序地存储在ufs主机寄存器3111中,其可以用作公共队列,并且顺序地将命令发送到ufs设备3200。在这种情况下,即使先前发送的命令仍在被ufs设备3200处理的同时,即,即使在接收到先前发送的命令已经被ufs设备3200处理的通知之前,ufs主机3100也可以向ufs设备3200发送在cq待机的下一个命令。因此,在先前发送的命令的处理期间,ufs设备3200还可以从ufs主机3100接收下一个命令。可以存储在cq中的命令的最大数量(或队列深度)可以是例如32个。此外,cq可以实现为循环队列,其中存储在队列中的命令行的开始和结束由头指针和尾指针指示。
166.多个存储器元件3221中的每一个可以包括存储器单元阵列和被配置为控制存储器单元阵列的操作的控制电路。存储器单元阵列可以包括2d存储器单元阵列或3d存储器单元阵列。存储器单元阵列可以包括多个存储器单元。尽管在一些实施例中,每个存储器单元是被配置为存储1位信息的单级单元(single-level cell,slc),但是在其他实施例中,每
个存储器单元可以是被配置为存储2位或更多位信息的单元,诸如例如,多级单元(mlc)、三级单元(tlc)和四级单元(qlc)。3d存储器单元阵列可以包括垂直nand串,其中至少一个存储器单元垂直取向并位于另一个存储器单元上。
167.电压vcc、vccq1和vccq2可以作为电源电压施加到ufs设备3200。电压vcc可以是用于ufs设备3200的主电源电压,并且在大约2.4v到大约3.6v的范围内。电压vccq1可以是用于主要向ufs设备控制器3210供应低电压的电源电压,并且在大约1.14v到大约1.26v的范围内。电压vccq2可以是用于供应电压的电源电压,其低于电压vcc并且高于电压vccq1,主要给i/o接口,诸如mipi m-phy 3251,并且在大约1.7v到大约1.95v的范围内。调节器3260可以实现为分别连接到上述不同电源电压之一的一组元件调节器。
168.如本发明构思领域中的传统,根据功能块、元件和/或模块来描述实施例,并在附图中示出。本领域技术人员将理解,这些块、元件和/或模块由电子(或光学)电路(诸如逻辑电路、分立组件、微处理器、硬连线电路、存储器元素、布线连接等)物理实现。其可以使用基于半导体的制造技术或其他制造技术形成。在块、元件和/或模块由微处理器或类似物实现的情况下,它们可以使用软件(例如,微代码)来编程以执行本文讨论的各种功能,并且可以可选地由固件和/或软件驱动。或者,每个块、元件和/或模块可以由专用硬件实现,或者作为执行一些功能的专用硬件和执行其他功能的处理器(例如,一个或多个编程的微处理器和相关电路)的组合来实现。
169.在本发明构思的实施例中,提供了三维(3d)存储器阵列。3d存储器阵列被单片地形成在存储器单元的阵列的一个或多个物理级中,该存储器单元的阵列具有放置在硅衬底上方的有源区和与这些存储器单元的操作相关联的电路,无论这种相关联的电路是在这种衬底上方还是在这种衬底内。术语“单片”意味着阵列的每一级的层直接沉积在阵列的每一下级的层上。在本发明构思的实施例中,3d存储器阵列包括垂直取向的垂直nand串,使得至少一个存储器单元位于另一个存储器单元之上。至少一个存储单元可以包括电荷俘获层。在此并入作为参考的以下专利文献:美国专利第7,679,133号;第8,553,466号;第8,654,587号;第8,559,235号;以及美国专利公布第2011/0233648号,其描述了三维存储器阵列的合适配置,其中三维存储器阵列被配置为具有在级之间共享的字线和/或位线的多个级。
170.虽然已经参照发明构思的实施例具体示出和描述了发明构思,但是应当理解,在不脱离由所附权利要求限定的发明构思的精神和范围的情况下,可以在形式和细节上进行各种改变。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献