一种解析方法、解析装置、电子设备和计算机存储介质与流程

未命名 08-01 阅读:113 评论:0


1.本公开涉及存储器技术领域,尤其涉及一种解析方法、解析装置、电子设备和计算机存储介质。


背景技术:

2.在动态随机存取存储器(dynamic random access memory,dram)中,可以包括dram逻辑地址(dram logical address)和dram物理地址(dram physical address)。其中,dram逻辑地址是dram内部使用的逻辑地址,dram物理地址是dram内部使用的物理地址。目前可以由操作系统的物理地址通过转换得到dram逻辑地址,dram逻辑地址通过转换得到dram内存单元的实际排布。


技术实现要素:

3.本公开提供了一种解析方法、解析装置、电子设备和计算机存储介质,能够对存储器逻辑行的物理位置关系进行正确解析,从而可以实现存储器的逻辑行到物理行的转换。
4.本公开的技术方案是这样实现的:
5.第一方面,本公开实施例提供了一种解析方法,该方法包括:
6.在目标存储库的解析过程中,通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系;
7.重复执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述多个逻辑行全部解析完成;
8.根据所述链表确定映射关系,所述映射关系用于记录所述多个逻辑行的物理位置关系;
9.其中,所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系,包括:
10.获取所述目标存储库的待解析逻辑行,其中,所述目标存储库包括多个逻辑行;
11.对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;
12.将所述至少一个翻转逻辑行写入所述链表。
13.在一些实施例中,该方法还包括:
14.获取所述目标存储库的逻辑行数量;
15.根据所述目标存储库的逻辑行数量,确定所述链表的链表结构;其中,所述链表包括多个节点,且所述多个节点的数量和所述目标存储库的逻辑行数量相同。
16.在一些实施例中,所述将所述至少一个翻转逻辑行写入所述链表,包括:
17.若所述至少一个翻转逻辑行仅包括第一翻转逻辑行,则利用第一解析策略将所述第一翻转逻辑行写入所述链表;
18.若所述至少一个翻转逻辑行至少包括第一翻转逻辑行和第二翻转逻辑行,则利用第二解析策略将所述第一翻转逻辑行和所述第二翻转逻辑行写入所述链表。
19.在一些实施例中,所述利用第一解析策略将所述第一翻转逻辑行写入所述链表,包括:
20.在所述链表中不存在所述第一翻转逻辑行的情况下,将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;
21.判断所述待解析节点的后继节点是否为空;
22.若所述待解析节点的后继节点为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的后继节点;
23.若所述待解析节点的后继节点不为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的前驱节点。
24.在一些实施例中,所述第一翻转逻辑行和所述第二翻转逻辑行是所述至少一个翻转逻辑行中翻转次数最多的两个逻辑行,且所述第一翻转逻辑行的翻转次数大于或者等于所述第二翻转逻辑行的翻转次数;
25.相应地,所述利用第二解析策略将所述第一翻转逻辑行和所述第二翻转逻辑行写入所述链表,包括:
26.判断所述第一翻转逻辑行是否存在于所述链表中;
27.若所述第一翻转逻辑行不存在于所述链表中,则将所述第一翻转逻辑行写入所述链表;
28.若所述第一翻转逻辑行存在于所述链表中,则判断所述第二翻转逻辑行是否存在于所述链表中;
29.若所述第二翻转逻辑行不存在于所述链表中,则将所述第二翻转逻辑行写入所述链表。
30.在一些实施例中,所述将所述第一翻转逻辑行写入所述链表,包括:
31.将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;
32.判断所述待解析节点的后继节点是否为空;
33.若所述待解析节点的后继节点为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的后继节点;
34.若所述待解析节点的后继节点不为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的前驱节点。
35.在一些实施例中,所述将所述第二翻转逻辑行写入所述链表,包括:
36.将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;
37.判断所述待解析节点的后继节点是否为空;
38.若所述待解析节点的后继节点为空,则将所述第二翻转逻辑行的行地址写入所述待解析节点的后继节点;
39.若所述待解析节点的后继节点不为空,则将所述第二翻转逻辑行的行地址写入所述待解析节点的前驱节点。
40.在一些实施例中,在所述至少一个翻转逻辑行仅包括第一翻转逻辑行,且在所述链表中不存在所述第一翻转逻辑行的情况下,所述方法还包括:
41.统计对所述待解析逻辑行执行行锤击操作的锤击次数;
42.判断所述锤击次数是否大于或者等于预设阈值;其中,所述预设阈值为对所述待
解析逻辑行执行行锤击操作的最大锤击次数;
43.若所述锤击次数小于所述预设阈值,则继续执行所述对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行的步骤;
44.若所述锤击次数大于或者等于所述预设阈值,则返回执行所述获取所述目标存储库的待解析逻辑行的步骤。
45.在一些实施例中,所述获取所述目标存储库的待解析逻辑行,包括:
46.从预设栈中将栈顶元素出栈,以获取所述目标存储库的待解析逻辑行;其中,所述栈顶元素表示所述目标存储库的待解析逻辑行。
47.在一些实施例中,当所述待解析逻辑行是所述目标存储库中首个被解析的逻辑行时,在所述从预设栈中将栈顶元素出栈,以获取所述目标存储库的待解析逻辑行之前,所述方法还包括:
48.在初始化所述预设栈后,从所述目标存储库中随机选取一条逻辑行作为待解析逻辑行,并将所述待解析逻辑行压入所述预设栈的栈顶。
49.在一些实施例中,在所述将所述至少一个翻转逻辑行写入链表的过程中,所述方法还包括:
50.将写入所述链表中的翻转逻辑行压入所述预设栈的栈顶。
51.在一些实施例中,在对所述目标存储库进行解析之前,所述方法还包括:
52.对所述多个逻辑行分别写入预设数据;其中,所述预设数据用于判断所述逻辑行是否发生翻转。
53.在一些实施例中,所述根据所述链表确定映射关系,包括:
54.设置输出文件;
55.将所述链表遍历到所述输出文件,得到所述目标存储库的目标文件;其中,所述目标文件中存储有所述映射关系记录的多个逻辑行的物理位置关系。
56.在一些实施例中,所述方法应用于存储器,所述存储器包括至少一个存储库,所述目标存储库是所述至少一个存储库中的任意一个存储库;所述方法还包括:
57.判断所述至少一个存储库是否全部完成解析;
58.若所述至少一个存储库均完成解析,则保存所有存储库的目标文件;
59.若所述至少一个存储库中存在未解析的存储库,则从所述未解析的存储库中确定目标存储库,并返回执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述至少一个存储库全部完成解析。
60.第二方面,本公开实施例提供了一种解析装置,该解析装置包括:
61.解析单元,配置为在目标存储库的解析过程中,通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系;并重复执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述目标存储库包括的多个逻辑行全部解析完成;
62.确定单元,配置为根据链表确定映射关系,所述映射关系用于记录所述多个逻辑行的物理位置关系;
63.所述解析单元包括获取单元,锤击单元和写入单元;其中,
64.所述获取单元,配置为获取所述目标存储库的待解析逻辑行,其中,所述目标存储
库包括多个逻辑行;
65.所述锤击单元,配置为对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;
66.所述写入单元,配置为将所述至少一个翻转逻辑行写入所述链表。
67.第三方面,本公开实施例提供了一种电子设备,该电子设备包括存储器和处理器,其中,
68.存储器,用于存储能够在所述处理器上运行的计算机程序;
69.处理器,用于在运行所述计算机程序时,执行如第一方面任一项所述的解析方法。
70.第四方面,本公开实施例提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被至少一个处理器执行时实现如第一方面任一项所述的解析方法。
71.本公开实施例所提供的一种解析方法、解析装置、电子设备和计算机存储介质,在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;并重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成;根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系;其中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系,包括:获取目标存储库的待解析逻辑行,其中,目标存储库包括多个逻辑行;对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;将至少一个翻转逻辑行写入链表;这样,基于行锤击操作会使得被锤击行的物理相邻行发生翻转的特性,通过对待解析逻辑行执行行锤击操作,并将所得到的翻转逻辑行写入链表中,能够得到存储器的逻辑行的物理位置关系,从而实现了对存储器逻辑行的物理位置关系的正确解析,也就实现了存储器的逻辑行到物理行的转换。
附图说明
72.图1为本公开实施例提供的一种操作系统和dram的地址转换示意图;
73.图2为本公开实施例提供的一种dram逻辑行和dram物理行的对应关系示意图;
74.图3为本公开实施例提供的一种解析方法的流程示意图一;
75.图4为本公开实施例提供的一种dram的内存行刷新示意图;
76.图5为本公开实施例提供的一种侵略者行和受害者行之间的位置关系示意图一;
77.图6为本公开实施例提供的一种侵略者行和受害者行之间的位置关系示意图二;
78.图7为本公开实施例提供的一种解析方法的详细流程示意图一;
79.图8为本公开实施例提供的一种解析方法的详细流程示意图二;
80.图9为本公开实施例提供的一种链表的结构示意图;
81.图10为本公开实施例提供的一种元素入栈/出栈的过程示意图;
82.图11为本公开实施例提供的一种解析方法的流程示意图二;
83.图12为本公开实施例提供的一种解析方法的详细流程示意图三;
84.图13为本公开实施例提供的一种解析方法的详细流程示意图四;
85.图14为本公开实施例提供的一种解析方法的详细流程示意图五;
86.图15为本公开实施例提供的一种解析装置的组成结构示意图;
87.图16为本公开实施例提供的一种电子设备的组成结构示意图。
具体实施方式
88.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。可以理解的是,此处所描述的具体实施例仅用于解释相关公开,而非对该公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关申请相关的部分。
89.除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本公开的目的,不是旨在限制本公开。
90.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
91.需要指出,本公开实施例所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本公开实施例能够以除了在这里图示或描述的以外的顺序实施。
92.在计算机寻址地址中,动态随机存取存储器逻辑地址(dram logical address,dram逻辑地址)是dram内部使用的逻辑地址,不是dram内存单元的实际排布;而dram物理地址(dram physical address,dram物理地址)是dram内部使用的地址,即为dram内部的实际排布。
93.应理解,计算机寻址地址存在四种不同的地址:操作系统虚拟地址、操作系统物理地址、dram逻辑地址和dram物理地址,具体如图1所示,其示出了本公开实施例提供的一种操作系统和dram的地址转换示意图。
94.如图1所示,在操作系统中,可以包括操作系统虚拟地址和操作系统物理地址。其中,操作系统虚拟地址是操作系统直接分配使用的地址,不是内存单元实际的地址;操作系统物理地址是内存单元实际的地址,而且操作系统虚拟地址通过转换可以得到操作系统物理地址,且该转换方法是公开的。
95.如图1所示,在dram中,可以包括dram逻辑地址和dram物理地址。其中,dram逻辑地址是dram内部使用的逻辑地址,不是dram内存单元的实际排布;dram物理地址是dram内部使用的地址,表示的就是dram内部的实际排布。在这里,在操作系统和dram之间,操作系统物理地址通过转换可以得到dram逻辑地址;而在dram逻辑地址和dram物理地址之间,dram逻辑地址通过转换可以得到dram物理地址,但是该转换方法是未知的。
96.另外,dram逻辑行(简称逻辑行)具体是指由dram逻辑地址得到的行(row),dram物理行(简称物理行)具体是指由dram物理地址得到的行。dram逻辑行和dram物理行是一一对应的,即存在某种映射,但是不一定是逐一映射,也就是说,逻辑行相邻的两行不一定是物理行相邻的两行。
97.即dram逻辑地址通过转换可以得到dram物理地址,但是该转换方法是未知的,从而导致dram逻辑行与dram物理行之间的映射关系是不确定的。
98.示例性地,参见图2,其示出了本公开实施例提供的一种dram逻辑行和dram物理行
的对应关系示意图。如图2所示,在dram逻辑地址中存在dram逻辑行0、1、2

n,在dram物理地址中存在dram逻辑行0、1、2

n。其中,逻辑行0对应物理行1,逻辑行1对应物理行2,逻辑行2对应物理行0,逻辑行n对应物理行m;可见,dram逻辑行0不一定对应dram物理行0。
99.目前,技术人员可以通过研究电路设计方案或者版图,以由dram逻辑地址推算出实际的dram物理地址。然而,通常情况下,完整的电路版图往往难以获取到,而且由于版图设计的多变性,导致这种方法存在效率低下容易出错等诸多问题。可见,目前还没有能够高效实现dram逻辑行与dram物理行关系解码的方法。
100.基于此,本公开实施例提供了一种解析方法,该方法的基本思想是:在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;其中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系,包括:获取目标存储库的待解析逻辑行,其中,目标存储库包括多个逻辑行;对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;将至少一个翻转逻辑行写入链表;重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成;根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系;这样,基于行锤击操作会使得被锤击行的物理相邻行发生翻转的特性,通过对待解析逻辑行执行行锤击操作,并将所得到的翻转逻辑行写入链表中,能够得到存储器的逻辑行的物理位置关系,实现了对存储器逻辑行的物理位置关系的正确解析,从而可以实现存储器的逻辑行到物理行的转换。
101.下面将结合附图对本公开各实施例进行详细说明。
102.本公开的一实施例中,参见图3,其示出了本公开实施例提供的一种解析方法的流程示意图一。如图3所示,该方法可以包括:
103.s301、在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系。
104.s302、重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成。
105.s303、根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系。
106.需要说明的是,本公开实施例提供的解析方法可以应用于解析装置,或者集成有该解析装置的电子设备。这里,电子设备可以以各种形式来实施,例如,电子设备可以是诸如计算机、智能手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(personal digital assistant,pda)、导航装置、可穿戴设备、服务器、存储器等具有存储功能的设备,对此不作具体限定。
107.还需要说明的是,以存储器为例,本公开实施例提供的解析方法主要应用于存储器(例如dram)的逻辑地址到物理地址的解析,以实现将存储器的逻辑行解码到物理行。在该存储器中可以包括至少一个存储库(bank),目标存储库是至少一个存储库中的任意一个存储库。对存储器中的每一个存储库均按照本公开实施例所提供的解析方法进行解析,从而得到存储器从逻辑地址到物理地址的解析结果。
108.在本公开实施例中,对于目标存储库的解析过程,可以通过对目标存储库中的待解析逻辑行执行行锤击操作,确定存储库中的逻辑行的在物理地址上的物理位置关系。并重复执行该过程,直至目标存储库中的多个逻辑行全部解析完成,这时候,目标存储库中的
所有逻辑行的位置关系都在链表中被记录下来,从而能够根据链表确定映射关系,该映射关系记录了逻辑行的物理位置关系。
109.需要说明的是,act-pre(active-precharge)可以是指dram物理行的一个访问操作,包含了行激活(row activation,act)、读(read)或者写(write)、预充电(precharge,pre)等操作。参见图4,其示出了本公开实施例提供的一种dram的内存行刷新示意图。
110.如图4所示,dram由于其结构原理,存在电容漏电的现象,需要在电容保持的时间t
refw
内进行所有内存行的刷新。其中,refw表示刷新窗口(refresh window),在高温时,刷新时间为32ms(毫秒),在中温时,刷新时间为64ms,在低温时,刷新时间为128ms。n表示有1个或多个act-pre的命令组合。
111.行锤击(row hammer)是dram的一种漏洞。当dram的某dram物理地址行在一个刷新周期内不断地被act-pre(即锤击)时,该行的dram物理地址邻近行会发生位翻转(bit flip,简称为翻转)。通常称被锤击行为侵略者行(aggressor row),其邻近行为受害者行(victim row)。
112.参见图5,其示出了本公开实施例提供的一种侵略者行和受害者行之间的位置关系示意图一。如图5所示,对侵略者行进行锤击,导致其临近的+1受害者行和-1受害者行发生翻转。
113.另外,对侵略者行进行锤击,还可能导致其临近的多个受害者行发生翻转。参见图6,其示出了本公开实施例提供的一种侵略者行和受害者行之间的位置关系的示意图二。如图6所示,对侵略者行进行锤击,导致其临近的+1受害者行、-1受害者行、+2受害者行和-2受害者行均发生翻转。
114.结合图5和图6,图5为单行模式的行锤击,攻击的侵略者行为1行,可能产生其邻近的两个受害者行,即+1行和-1行都可能发生翻转;如果侵略者行的相邻距离为2的两个受害者行都发生翻转,即+2行和-2行都发生位翻转,那么+1行和-1行必定发生翻转,而且
±
1行的翻转次数一定比
±
2行发生翻转的次数多。
115.基于行锤击的特性,即对某一行进行行锤击操作,其在物理地址上相邻的行会发生翻转的特性,本公开实施例提出了一种基于行锤击的dram逻辑行与dram物理行关系解码的方法,实现将dram逻辑行解析得到dram物理行。即通过对目标存储库的逻辑行执行行锤击操作确定逻辑行的物理位置关系,由于一个目标存储库中通常包括多个逻辑行,因此,本公开实施例重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至目标存储库的多个逻辑行全部解析完成。
116.在一些实施例中,参见图7,其示出了本公开实施例提供的一种解析方法的详细流程示意图一,图7是对图3的详细描述,即图3中的步骤s301包含了图7中的步骤s3011~s3013。如图7所示,该详细流程可以包括:
117.s301:在目标存储库的解析过程中,执行:
118.s3011、获取目标存储库的待解析逻辑行。
119.s3012、对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行。
120.s3013、将至少一个翻转逻辑行写入链表。
121.s302、重复执行步骤s3011~s3013,直至多个逻辑行全部解析完成。
122.s303、根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系。
123.需要说明的是,如图7所示,本公开实施例提供的解析方法包括步骤s301~s303,对于步骤s301来说,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系具体可以包括步骤s3011~s3013。
124.还需要说明的是,目标存储库可以包括多个逻辑行,首先确定目标存储库的待解析逻辑行,然后按照前述方式对逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行,并将至少一个翻转逻辑行写入链表中,从而能够得到待解析逻辑行和翻转逻辑行之间的物理位置关系,完成对待解析逻辑行的解析。
125.还需要说明的是,本公开实施例可以利用链表来存储逻辑行的物理位置关系。因此,在一些实施例中,参见图8,其示出了本公开实施例提供的一种解析方法的详细流程示意图二,图8是在图7的基础上,对图3的进一步详细描述。如图8所示,该详细流程可以包括:
126.s801、获取目标存储库的逻辑行数量。
127.s802、根据目标存储库的逻辑行数量,确定链表的链表结构。
128.s301:在目标存储库的解析过程中,执行:
129.s3011、获取目标存储库的待解析逻辑行。
130.s3012、对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行。
131.s3013、将至少一个翻转逻辑行写入链表。
132.s302、重复执行步骤s3011~s3013,直至多个逻辑行全部解析完成。
133.s303、根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系。
134.需要说明的是,在对目标存储库进行解析时,首先获取目标存储库的逻辑行数量,然后根据目标存储库的逻辑行数量,确定链表的链表结构,即首先进行链表的初始化。其中,链表包括多个节点,且多个节点的数量和目标存储库的逻辑行数量相同。然后执行步骤s301~s302,完成对目标存储库的解析。
135.参见图9,其示出了本公开实施例提供的一种链表的结构示意图。将链表中的每一个元素称为节点,链表由一系列结点组成。如图9所示,其示出了一个包括m个节点(节点1,节点2,
……
,节点m)的链表,其中,链表包括多个节点,且多个节点的数量和目标存储库的逻辑行数量相同。每个结点包括三个部分:一个是存储数据元素的数据域(这里保存的是dram逻辑行的行地址),一个是存储上一个结点地址的指针域,称为前驱,一个是存储下一个结点地址的指针域,称为后继,结点的数据域中存储的内容可以在运行时动态生成。整个链表中每个节点的数据域和该节点在链表的顺序,即是dram逻辑行和dram物理行的映射关系。
136.本公开实施例在确定链表的链表结构时,是根据目标存储库的逻辑行数量进行确定的,链表的节点数量即为目标存储库的逻辑行数量,每个节点的数据域用于保存逻辑行的行地址。也就是说,在链表结构确定之后,链表上每个节点的顺序已经固定,通过后续步骤,将逻辑行的行地址写入对应的节点的数据域,从而通过该链表将逻辑行的物理位置关系进行记录。
137.还需要说明的是,本公开实施例可以通过预设栈来存储需要解析的逻辑行。栈(stack)又名堆栈,它是一种后进先出,运算受限的线性表数据结构,其增删操作只能在一端进行,该端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,即把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又
称作出栈或退栈,即把栈顶元素删除掉,使相邻的元素成为新的栈顶元素。
138.示例性地,参见图10,其示出了本公开实施例提供的一种元素入栈/出栈的过程示意图。如图10所示,在图10的左侧图,栈为栈空状态,然后依次将元素1、2、3压入栈顶,从而从栈底到栈顶,元素依次为1、2、3,如图10的中间图所示,此时,元素1为栈底元素,元素3为栈顶元素;将该栈的栈顶元素进行出栈,即将元素3进行出栈,在将栈顶元素3进行出栈之后,元素2成为新的栈顶元素,如图10的右侧图所示。
139.在利用预设栈存储需要解析的逻辑行时,在一些实施例中,获取目标存储库的待解析逻辑行,可以包括:
140.从预设栈中将栈顶元素出栈,以获取目标存储库的待解析逻辑行;其中,栈顶元素表示目标存储库的待解析逻辑行。
141.需要说明的是,在获取目标存储库的待解析逻辑行时,将预设栈的栈顶元素进行出栈,这时候,出栈的元素即为目标存储库的待解析逻辑行。
142.进一步地,在一些实施例中,当待解析逻辑行是目标存储库中首个被解析的逻辑行时,在从预设栈中将栈顶元素出栈,以获取目标存储库的待解析逻辑行之前,该方法还可以包括:
143.在初始化预设栈后,从目标存储库中随机选取一条逻辑行作为待解析逻辑行,并将待解析逻辑行压入预设栈的栈顶。
144.需要说明的是,对于目标存储库中第一个被解析的逻辑行,确定待解析逻辑行的方式为:在将预设栈进行初始化之后,从目标存储库中随机选取一条逻辑行作为待解析逻辑行,将随机选取的待解析逻辑行压入预设栈的栈顶。然后在目标存储库的解析过程中,将待解析逻辑行从预设栈出栈,执行后续操作。
145.还需要说明的是,对于不是目标存储库中的第一条被解析的待解析逻辑行的情况,在一些实施例中,在将至少一个翻转逻辑行写入链表的过程中,该方法还可以包括:
146.将写入链表中的翻转逻辑行压入预设栈的栈顶。
147.需要说明的是,由于本公开实施例在将翻转逻辑行写入链表时,还会将写入链表中的翻转逻辑行压入预设栈的栈顶。这样,每将一个翻转逻辑行写入链表后,预设栈中就会增加该翻转逻辑行,从而在解析下一条逻辑行时,只需要从预设栈中将栈顶元素进行出栈即可得到待解析逻辑行,无需再从目标存储库的多个逻辑行中进行选择,实现了对目标存储库中的逻辑行的解析。
148.这样,本公开实施例可以基于预设栈获取待解析逻辑行,在获取待解析逻辑行之后,对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行。
149.也就是说,由于在对待解析逻辑行执行锤击操作时,不一定每次锤击都能够使待解析逻辑行的相邻行发生翻转。因此,在对待解析逻辑行执行行锤击操作之后,如果发生翻转的逻辑行的数量为零,就继续对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行。其中,至少一个翻转逻辑行为待解析逻辑行在物理地址上临近的逻辑行。
150.可以理解的是,在执行行锤击操作时,这里所述的待解析逻辑行即为前述的侵略者行,翻转逻辑行即为前述的受害者行。
151.另外,本公开实施例还提供了校验逻辑行是否发生翻转的方法,在一些实施例中,在对目标存储库进行解析之前,该方法还可以包括:
152.对多个逻辑行分别写入预设数据;其中,预设数据用于判断逻辑行是否发生翻转。
153.需要说明的是,在对目标存储库进行解析之前,预先对目标存储库的多个逻辑行写入预设数据,以判断在执行行锤击操作之后,逻辑行是否发生翻转。这里,预设数据通常为一些易于检测的的数据值,在没有执行行锤击操作之前,将预设数据写入逻辑行,如果该逻辑行发生位翻转,预设数据的值会改变,判断在对待解析逻辑行执行行锤击操作前后,除待解析逻辑行外的其它逻辑行的预设数据是否相等就可以校验这些逻辑行是否发生了位翻转。
154.这样,通过提前在逻辑行中写入预设数据,能够准确校验逻辑行是否发生翻转,使得在确定逻辑行的物理位置关系时,转换结果准确。
155.在得到至少一个翻转逻辑行之后,将至少一个翻转逻辑行写入链表中。
156.在一些实施例中,将至少一个翻转逻辑行写入链表,可以包括:
157.若至少一个翻转逻辑行仅包括第一翻转逻辑行,则利用第一解析策略将第一翻转逻辑行写入链表;
158.若至少一个翻转逻辑行至少包括第一翻转逻辑行和第二翻转逻辑行,则利用第二解析策略将第一翻转逻辑行和第二翻转逻辑行写入链表。
159.需要说明的是,在对待解析逻辑行执行行锤击操作得到的至少一个翻转逻辑行中,这至少一个翻转逻辑行的数量可能为一个,也可能是大于一个。在至少一个翻转逻辑行的数量为一,即仅包括一个第一翻转逻辑行的情况下,利用第一解析策略将第一翻转逻辑行写入链表中。
160.在至少一个翻转逻辑行的数量大于一,即至少包括第一翻转逻辑行和第二翻转逻辑行的情况下,利用第二解析策略将第一翻转逻辑行和第二翻转逻辑行写入链表中。
161.还需要说明的是,这里所提到的两个第一翻转逻辑行不一定代表完全相同的两个逻辑行,主要是为了说明发生位翻转的逻辑行的数量。
162.对于第一解析策略,在一些实施例中,利用第一解析策略将第一翻转逻辑行写入链表,可以包括:
163.在链表中不存在第一翻转逻辑行的情况下,将待解析逻辑行在链表中对应的节点确定为待解析节点;
164.判断待解析节点的后继节点是否为空;
165.若待解析节点的后继节点为空,则将第一翻转逻辑行的行地址写入待解析节点的后继节点;
166.若待解析节点的后继节点不为空,则将第一翻转逻辑行的行地址写入待解析节点的前驱节点。
167.需要说明的是,如果至少一个翻转逻辑行仅包括一个第一翻转逻辑行,且该第一翻转逻辑行不存在于链表中,则需要将第一翻转逻辑行写入链表中。
168.具体来说,将待解析逻辑行在链表中对应的节点确定为待解析节点,并判断待解析节点的后继节点是否为空,如果不为空,说明待解析节点已经存在后继,就将第一翻转逻辑行的行地址写入待解析节点的前驱节点;如果待解析节点的后继节点为空,说明待解析节点不存在后继,就将第一翻转逻辑行的行地址写入待解析节点的后继节点。然后返回解析下一条待解析逻辑行,直至完成对目标存储库所有逻辑行的解析。
169.也就是说,将第一翻转逻辑行写入链表,是指将第一翻转逻辑行的行地址写入待解析节点的前驱节点或者后继节点。具体来说,是将第一翻转逻辑行的行地址写入待解析节点的前驱节点或者后继节点的数据域。
170.这样,对于链表中的每个节点所指代的逻辑行,其前驱或者后继都是指向其在物理地址上相邻的逻辑行的节点。从而链表中节点的顺序关系即为逻辑行对应的物理行的顺序关系,实现了对逻辑行的物理位置关系的解码。
171.还需要说明的是,待解析节点为待解析逻辑行在链表中对应的节点。也就是说,在对待解析逻辑行进行解析之前,待解析逻辑行已经被写入了链表中。
172.对于目标存储库中,第一个被解析的待解析逻辑行而言,在将其压入预设栈的栈顶的同时,还会将其行地址写入链表中的一个节点,该节点可以是链表中的任意一个节点,在对第一个待解析逻辑行进行解析的过程中,该节点就作为待解析节点。
173.另外,在将第一翻转逻辑行的行地址写入待解析节点的后继节点或者前驱节点后,同时还将第一翻转逻辑行压入预设栈的栈顶。这样,在完成对待解析逻辑行的解析之后,需要返回执行针对下一条待解析逻辑行的解析,下一条待解析逻辑行为预设栈的栈顶元素,也就是第一翻转逻辑行。
174.因此,对于目标存储库中,不是第一个被解析的待解析逻辑行而言,其在被确定为待解析逻辑行之前,就已经被写入了链表中,即链表中已经存在了该待解析逻辑行对应的节点。
175.另外,在一些实施例中,在至少一个翻转逻辑行仅包括第一翻转逻辑行,且在链表中不存在第一翻转逻辑行的情况下,该方法还可以包括:
176.统计对待解析逻辑行执行行锤击操作的锤击次数;
177.判断锤击次数是否大于或者等于预设阈值;其中,预设阈值为对待解析逻辑行执行行锤击操作的最大锤击次数;
178.若锤击次数小于预设阈值,则继续执行对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行的步骤;
179.若锤击次数大于或者等于预设阈值,则返回执行获取目标存储库的待解析逻辑行的步骤。
180.需要说明的是,在至少一个翻转逻辑行仅包括第一翻转逻辑行时,第一翻转逻辑行有可能已经存在于链表中,这时候就无需将第一翻转逻辑行写入链表中。由于对于物理位置上的第一条逻辑行和最后一条逻辑行,其相邻(除非特别说明,否则,相邻均指物理位置相邻)的逻辑行只有一条,那么如果翻转逻辑行的数量为一个,则说明待解析逻辑行可能为位于边界的逻辑行,也有可能是操作失误等原因导致的误判。
181.因此,本公开实施例设置预设阈值来提高判断待解析逻辑行是不是边界逻辑行的容错率,预设阈值表示对待解析逻辑行进行行锤击操作的最大次数,在翻转逻辑行数量为一时使用。
182.如果锤击次数小于预设阈值,就继续对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;如果锤击次数大于或者等于预设阈值,说明对待解析逻辑行的锤击次数已经达到最大次数,就返回获取下一条待解析逻辑行,对下一条待解析逻辑行进行解析。
183.这样,在翻转逻辑行的数量为一且该翻转逻辑行已经存在于链表中的情况下,通过将累积锤击次数和预设阈值比较,确定是否需要继续对待解析逻辑行执行行锤击操作,从而避免了由于各种因素的影响导致的误判,提高了确定待解析逻辑行是否为边界逻辑行的准确率。
184.对于第二解析策略,在一些实施例中,第一翻转逻辑行和第二翻转逻辑行是至少一个翻转逻辑行中翻转次数最多的两个逻辑行,且第一翻转逻辑行的翻转次数大于或者等于第二翻转逻辑行的翻转次数;
185.相应地,利用第二解析策略将第一翻转逻辑行和第二翻转逻辑行写入链表,可以包括:
186.判断第一翻转逻辑行是否存在于链表中;
187.若第一翻转逻辑行不存在于链表中,则将第一翻转逻辑行写入链表;
188.若第一翻转逻辑行存在于链表中,则判断第二翻转逻辑行是否存在于链表中;
189.若第二翻转逻辑行不存在于链表中,则将第二翻转逻辑行写入链表。
190.需要说明的是,当翻转逻辑行的数量大于一个时,选择多个翻转逻辑行中翻转次数最多的两个作为第一翻转逻辑行和第二翻转逻辑行。由行锤击的特性可知,与待解析逻辑行最相邻的翻转逻辑行的翻转次数一定大于与待解析逻辑行次相邻或者更远的翻转逻辑行的翻转次数。
191.这样,第一翻转逻辑行和第二翻转逻辑行为待解析逻辑行的物理相邻行。从而能够更准确地得到逻辑行之间的物理位置关系。
192.还需要说明的是,本公开实施例可以将两个翻转逻辑行中翻转次数更多的翻转逻辑行写入待解析逻辑行的后继节点,因此,第一翻转逻辑行的翻转次数大于或者等于第二翻转逻辑行的翻转次数。在将第一翻转逻辑行和第二翻转逻辑行写入链表的过程中,首先判断第一翻转逻辑行是否存在于链表中,如果存在,则判断第二翻转逻辑行是否存在于链表中;如果第二翻转逻辑行不存在于链表中,则先将第一翻转逻辑行写入链表中,再判断第二翻转逻辑行是否存在于链表中。
193.对第二翻转逻辑行的判断类似,如果其不存在于链表中,就将其写入链表中。如果其存在于链表中,就返回解析下一条待解析逻辑行,直至完成对目标存储库所有逻辑行的解析。
194.在一些实施例中,将第一翻转逻辑行写入链表,可以包括:
195.将待解析逻辑行在链表中对应的节点确定为待解析节点;
196.判断待解析节点的后继节点是否为空;
197.若待解析节点的后继节点为空,则将第一翻转逻辑行的行地址写入待解析节点的后继节点;
198.若待解析节点的后继节点不为空,则将第一翻转逻辑行的行地址写入待解析节点的前驱节点。
199.在一些实施例中,将第二翻转逻辑行写入链表,可以包括:
200.将待解析逻辑行在链表中对应的节点确定为待解析节点;
201.判断待解析节点的后继节点是否为空;
202.若待解析节点的后继节点为空,则将第二翻转逻辑行的行地址写入待解析节点的
后继节点;
203.若待解析节点的后继节点不为空,则将第二翻转逻辑行的行地址写入待解析节点的前驱节点。
204.需要说明的是,将第一/第二翻转逻辑行写入链表的方式与前述的将第一翻转逻辑行写入链表的方式相同,这里不再赘述。
205.需要注意的是,在将第一/第二翻转逻辑行写入链表之后,仍然需要将第一/第二翻转逻辑行压入预设栈的栈顶。在这里,如果第一翻转逻辑行和第二翻转逻辑行都被写入链表中,则两者都会被压入预设栈中,这时候由于首先针对第一翻转逻辑行进行判断和写入链表,那么第一翻转逻辑行首先被压入预设栈,第二翻转逻辑行则在第一翻转逻辑行之后被压入预设栈,则此时预设栈的栈顶元素为第二翻转逻辑行。那么,下一条被解析的待解析逻辑行为预设栈的栈顶元素,也就是第二翻转逻辑行。
206.可见,本公开每将一条翻转逻辑行写入链表后,还同时将其压入预设栈中。这样,对于目标存储库的解析而言,只需要在确定第一条待解析逻辑行时,从目标存储库中随机选取一条逻辑行,对于后续的待解析逻辑行,只需要将预设栈的栈顶元素出栈,无需在目标存储库中进行选取,就能够完成对目标存储库的所有逻辑行的解析。
207.在目标存储库的所有逻辑行全部完成解析之后,就可以得到存储有逻辑行的物理位置关系的链表。根据该链表确定映射关系,其中,映射关系用于记录多个逻辑行的物理位置关系。从而实现了对逻辑行的物理位置关系的解码。
208.在一些实施例中,根据链表确定映射关系,可以包括:
209.设置输出文件;
210.将链表遍历到输出文件,得到目标存储库的目标文件;其中,目标文件中存储有映射关系记录的多个逻辑行的物理位置关系。
211.需要说明的是,在根据链表确定映射关系时,可以设置一个输出文件,然后将链表遍历到输出文件,从而得到目标存储库的目标文件。在该目标文件中,存储有映射关系记录的多个逻辑行的物理位置关系。
212.本公开实施例提供的方法可以应用于包括至少一个存储库的存储器,在一些实施例中,目标存储库是至少一个存储库中的任意一个存储库;该方法还可以包括:
213.判断至少一个存储库是否全部完成解析;
214.若至少一个存储库均完成解析,则保存所有存储库的目标文件;
215.若至少一个存储库中存在未解析的存储库,则从未解析的存储库中确定目标存储库,并返回执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至至少一个存储库全部完成解析。
216.需要说明的是,在完成对目标存储库的解析之后,判断存储器中的所有存储库是否全部完成解析,如果存储器中的所有存储库均完成解析,就把所有存储库的目标文件进行保存,即保存存储器中每个存储库的所有逻辑行的物理位置关系。如果存在还未进行解析的存储库,就从未进行解析的存储库中确定一个目标存储库,并按照前述方式对目标存储库进行解析,直到所有存储库均完成解析。
217.本公开实施例提供了一种解析方法,在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;并重复执行通过对目标存储
库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成;根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系;其中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系,包括:获取目标存储库的待解析逻辑行,其中,目标存储库包括多个逻辑行;对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;将至少一个翻转逻辑行写入链表;这样,基于行锤击操作会使得被锤击行的物理相邻行发生翻转的特性,通过对待解析逻辑行执行行锤击操作,并将所得到的翻转逻辑行写入链表中,能够得到存储器的逻辑行的物理位置关系,实现了对存储器逻辑行的物理位置关系的正确解析,从而可以实现存储器的逻辑行到物理行的转换。
218.本公开的另一实施例中,参见图11,其示出了本公开提供的一种解析方法的流程示意图二。如图11所示,该方法可以包括:
219.s1001、确定存储库数量。
220.需要说明的是,在解析算法开始后,首先获得存储器中的存储库的总数量。
221.s1002、判断所有存储库是否均完成解析。
222.需要说明的是,如果判断结果为是,即存储器的所有存储库均已经完成解析,就执行步骤s1005;如果判断结果为否,即存在还未进行解析的存储库,就执行步骤s1003。
223.s1003、解析目标存储库。
224.需要说明的是,在存储器中存在还未解析的存储库的情况下,从还未解析的存储库中确定一个目标存储库,并对目标存储库进行解析。
225.简单来说,解析目标存储库主要包括重复执行以下步骤:
226.(1)执行行锤击操作攻击待解析逻辑行,获得一个或两个(或者更多个)发生位翻转的翻转逻辑行,并将翻转逻辑行写入链表。
227.其中,翻转逻辑行与被攻击的逻辑行在物理位置上相邻。
228.(2)重复执行步骤(1)直到完成解析的逻辑行的数量等于目标存储库中的逻辑行总数量。
229.(3)保存待解析逻辑行的解析结果。
230.由于本公开保存的是目标存储库的逻辑行的物理位置关系,链表中节点的相邻关系映射的就是物理地址上的物理行之间的相邻关系,因此,解析结果也可以理解为从逻辑行到物理行解析的结果。
231.s1004、保存目标存储库的解析结果。
232.需要说明的是,在完成对目标存储库进行解析之后,将目标存储库的解析结果进行保存,即保存目标存储库所有逻辑行到物理行解析的结果。
233.s1005、保存所有数据。
234.需要说明的是,在完成对存储器中所有存储库的解析之后,将所有数据进行保存,并结束算法。
235.还需要说明的是,前述步骤s1001~s1005仅为解析方法的概括性描述。对于步骤s1003、s1004和s1005的实现过程,将进行进一步具体描述。
236.对于步骤s1003,参见图12,其示出了本公开提供的一种解析方法的详细流程示意图三,该详细流程是对步骤s1003的具体描述。如图12所示,该详细流程可以包括:
237.s1003a、初始化预设栈。
238.s1003b、初始化链表。
239.需要说明的是,针对目标存储库进行解析时,根据目标存储库能够获得n条需要进行解析的逻辑行,并将n条逻辑行存储在数组中;同时,还可以对每一条逻辑行写入预设数据,用于校验逻辑行是否发生翻转;其中,n表示目标存储库中的逻辑行数量。
240.初始化预设栈为空,并初始化链表,确定链表的链表结构。对于预设栈,在本公开实施例中,其中元素数量不超过三个,保证了深度遍历逻辑行的实现。
241.其中,预设栈用于存储将要被解析的逻辑行,链表用于保存逻辑行的物理位置关系,即物理顺序关系。
242.s1003c、随机将一条逻辑行压入预设栈。
243.需要说明的是,目标存储库中第一条被解析的逻辑行是随机确定的。这里,可以从前述的数组中随机确定一条逻辑行压入预设栈中,这个随机确定的逻辑行即为目标存储库的第一条待解析逻辑行。
244.还需要说明的是,对于第一条被解析的逻辑行,在将其压入预设栈的同时,还需要将其写入链表中,即将该逻辑行的行地址写入链表中一个节点的数据域中,以在链表中生成其对应的节点。
245.s1003d、判断预设栈是否为空。
246.需要说明的是,如果判断结果为是,即预设栈为空,说明目标存储库的所有逻辑行均解析完成,就执行前述的步骤s1004,保存目标存储库的解析结果。
247.如果判断结果为否,即预设栈不为空,说明目标存储库存在还未解析的逻辑行,就执行步骤s1003e。
248.s1003e、将待解析逻辑行从预设栈的栈顶出栈。
249.需要说明的是,将预设栈的栈顶元素进行出栈,出栈的栈顶元素也就是待解析逻辑行。
250.s1003f、对待解析逻辑行执行行锤击操作。
251.s1003g、得到m条翻转逻辑行。
252.s1003h、判断m是否等于0。
253.需要说明的是,对待解析逻辑行执行行锤击操作,能够得到m条翻转逻辑行。这里,对于每次锤击,m的数量是不确定的。
254.首先判断m是否为0,如果判断结果为是,即m为0,并返回步骤s1003f,继续对待解析逻辑行执行行锤击操作,直到m不为0;如果判断结果为否,即m不为0,就执行步骤s1003i。
255.s1003i、判断m是否小于2。
256.需要说明的是,在m不为0的情况下,进一步判断m是否小于2,如果判断结果为是,即m小于2,也即m为1,就执行步骤s1003j以及之后步骤,也就是执行前述实施例所述的第一解析策略。
257.如果判断结果为否,m不小2,即m大于或者等于2,就执行前述实施例中的第二解析策略,对于第二解析策略,将在后续进行具体描述。
258.s1003j、判断翻转逻辑行是否存在于链表中。
259.需要说明的是,此时,仅存在一条翻转逻辑行,判断该翻转逻辑行是否存在于链表
中;如果判断结果为是,即该翻转逻辑行存在于链表中,就执行步骤s1003k;如果判断结果为否,即该翻转逻辑行不存在于链表中,就执行步骤s1003l。
260.s1003k、判断对待解析逻辑行执行行锤击操作的锤击次数是否大于或者等于预设阈值。
261.需要说明的是,预设阈值指的是对待解析逻辑行执行行锤击操作的最大锤击次数,在m=1时使用,用于提高判断待解析逻辑行是不是边界逻辑行的容错率。
262.如果判断结果为是,即锤击次数大于或者等于预设阈值,就返回执行步骤s1003d;如果判断结果为否,即锤击次数小于预设阈值,就返回执行步骤s1003f。
263.s1003l、判断链表中的当前节点的后继节点是否为空。
264.需要说明的是,如果判断结果为是,即链表中的当前节点的后继节点为空,就执行步骤s1003m;如果判断结果为否,即链表中的当前节点的后继节点不为空,就执行步骤s1003n。
265.s1003m、将翻转逻辑行添加到链表中当前节点的后继节点。
266.s1003n、将翻转逻辑行添加到链表中当前节点的前驱节点。
267.s1003o、将翻转逻辑行压入预设栈的栈顶。
268.需要说明的是,当前节点即为待解析节点在链表中对应的节点。在将翻转逻辑行添加到链表中之后,还将翻转逻辑行压入预设栈的栈顶。然后返回执行步骤s1003d。
269.进一步地,在步骤s1003i之后,如果步骤s1003i的判断结果为否,即翻转逻辑行的数量大于或者等于2,此时对多个翻转逻辑行执行前述的第二解析策略。具体地,参见图13,其示出了本公开提供的一种解析方法的详细流程示意图四,该详细流程是对第二解析策略的具体描述。如图13所示,该详细流程可以包括:
270.s1003p、选取翻转次数最多的两条翻转逻辑行:翻转逻辑行a和翻转逻辑行b。
271.需要说明的是,在翻转逻辑行的数量为多个时,选择其中翻转次数最多的两条逻辑行:翻转逻辑行a和翻转逻辑行b。其中,翻转逻辑行a的翻转次数可以大于翻转逻辑行b的翻转次数。
272.s1003q、判断翻转逻辑行a是否存在于链表中。
273.需要说明的是,如果判断结果为是,即翻转逻辑行a存在于链表中,就执行步骤s1003v;如果判断结果为否,即翻转逻辑行a不存在于链表中,就执行步骤s1003r。
274.s1003r、判断链表中的当前节点的后继节点是否为空。
275.需要说明的是如果判断结果为是,即链表中的当前节点的后继节点为空,就执行步骤s1003s;如果判断结果为否,即链表中的当前节点的后继节点不为空,就执行步骤s1003t。
276.s1003s、将翻转逻辑行a添加到链表中当前节点的后继节点。
277.s1003t、将翻转逻辑行a添加到链表中当前节点的前驱节点。
278.s1003u、将翻转逻辑行a压入预设栈的栈顶。
279.需要说明的是,在将翻转逻辑行a添加到链表中之后,还将翻转逻辑行a压入预设栈的栈顶。
280.s1003v、判断翻转逻辑行b是否存在于链表中。
281.需要说明的是,如果判断结果为是,即翻转逻辑行b存在于链表中,就执行前述的
步骤s1003d;如果判断结果为否,即翻转逻辑行b不存在于链表中,就执行步骤s1003w。
282.s1003w、判断链表中的当前节点的后继节点是否为空。
283.需要说明的是如果判断结果为是,即链表中的当前节点的后继节点为空,就执行步骤s1003x;如果判断结果为否,即链表中的当前节点的后继节点不为空,就执行步骤s1003y。
284.s1003x、将翻转逻辑行b添加到链表中当前节点的后继节点。
285.s1003y、将翻转逻辑行b添加到链表中当前节点的前驱节点。
286.s1003z、将翻转逻辑行b压入预设栈的栈顶。
287.需要说明的是,在将翻转逻辑行b添加到链表中之后,还将翻转逻辑行b压入预设栈的栈顶。然后返回执行步骤s1003d。
288.这样,通过步骤s1003a~s1003z详细描述了对目标存储库进行解析的方式。
289.进一步地,对于图11中的步骤s1004,参见图14,其示出了本公开实施例提供的一种解析方法的详细流程示意图五,该详细流程是对步骤s1004的具体描述。如图14所示,该详细流程可以包括:
290.s1004a、设置输出文件。
291.s1004b、将链表遍历到输出文件。
292.s1004c、目标存储库逻辑行到物理行解析完成。
293.需要说明的是,在完成对目标存储库的解析之后,将解析结构进行保存。可以设置一个输出文件,将链表遍历到输出文件,完成目标存储库逻辑行到物理行的解析,得到目标存储库的目标文件。
294.相应地,对于图11中的步骤1005,在将存储器的所有目标存储库都解析完成后,能够得到每一个存储库的目标文件,将所有的目标文件进行保存,得到存储器中所有逻辑行到物理行的映射关系。
295.本公开实施例提供了一种解析方法,通过上述实施例对前述实施例的具体实现进行了详细阐述,从中可以看出,本公开实施例提出的解析方法对存储器中的存储库进行解析,单次算法能够获得一个存储库的所有逻辑行的物理位置关系;在进行逻辑行到物理行的解析时,基于的逻辑行的行地址是已知的;在一个存储库对应的链表中的边界逻辑行(即首尾物理行)可以实现翻转的逻辑行的条数为一。本方法创新性地实现了存储器的逻辑行到物理行的转换,并且可以有效实现存储器所有存储库的所有逻辑行到物理行的转换。
296.本公开的再一实施例中,参见图15,其示出了本公开实施例提供的一种解析装置40的组成结构示意图。如图15所示,该解析装置40可以包括:
297.解析单元401,配置为在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;并重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至目标存储库包括的多个逻辑行全部解析完成;
298.确定单元402,配置为根据链表确定映射关系,映射关系用于记录多个逻辑行的物理位置关系;
299.解析单元401包括获取单元4011,锤击单元4012和写入单元4013;其中,
300.获取单元4011,配置为获取目标存储库的待解析逻辑行,其中,目标存储库包括多
个逻辑行;
301.锤击单元4012,配置为对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;
302.写入单元4013,配置为将至少一个翻转逻辑行写入链表。
303.在一些实施例中,确定单元402,还配置为获取目标存储库的逻辑行数量;以及根据目标存储库的逻辑行数量,确定链表的链表结构;其中,链表包括多个节点,且多个节点的数量和目标存储库的逻辑行数量相同。
304.在一些实施例中,写入单元4013,具体配置为若至少一个翻转逻辑行仅包括第一翻转逻辑行,则利用第一解析策略将第一翻转逻辑行写入链表;以及若至少一个翻转逻辑行至少包括第一翻转逻辑行和第二翻转逻辑行,则利用第二解析策略将第一翻转逻辑行和所述第二翻转逻辑行写入链表。
305.在一些实施例中,写入单元4013,还具体配置为在链表中不存在第一翻转逻辑行的情况下,将待解析逻辑行在链表中对应的节点确定为待解析节点;以及判断待解析节点的后继节点是否为空;以及若待解析节点的后继节点为空,则将第一翻转逻辑行的行地址写入待解析节点的后继节点;以及若待解析节点的后继节点不为空,则将第一翻转逻辑行的行地址写入待解析节点的前驱节点。
306.在一些实施例中,第一翻转逻辑行和第二翻转逻辑行是至少一个翻转逻辑行中翻转次数最多的两个逻辑行,且第一翻转逻辑行的翻转次数大于或者等于第二翻转逻辑行的翻转次数;写入单元4013,还具体配置为判断第一翻转逻辑行是否存在于链表中;以及若第一翻转逻辑行不存在于链表中,则将第一翻转逻辑行写入链表;以及若第一翻转逻辑行存在于链表中,则判断第二翻转逻辑行是否存在于链表中;以及若第二翻转逻辑行不存在于链表中,则将第二翻转逻辑行写入链表。
307.在一些实施例中,写入单元4013,还具体配置为将待解析逻辑行在链表中对应的节点确定为待解析节点;以及判断待解析节点的后继节点是否为空;以及若待解析节点的后继节点为空,则将第一翻转逻辑行的行地址写入待解析节点的后继节点;以及若待解析节点的后继节点不为空,则将第一翻转逻辑行的行地址写入待解析节点的前驱节点。
308.在一些实施例中,写入单元4013,还具体配置为将待解析逻辑行在链表中对应的节点确定为待解析节点;以及判断待解析节点的后继节点是否为空;以及若待解析节点的后继节点为空,则将第二翻转逻辑行的行地址写入待解析节点的后继节点;以及若待解析节点的后继节点不为空,则将第二翻转逻辑行的行地址写入待解析节点的前驱节点。
309.在一些实施例中,如图15所示,解析单元401还可以包括统计单元4014,配置为在所述至少一个翻转逻辑行仅包括第一翻转逻辑行,且在所述链表中不存在所述第一翻转逻辑行的情况下,统计对待解析逻辑行执行行锤击操作的锤击次数;以及判断锤击次数是否大于或者等于预设阈值;其中,预设阈值为对待解析逻辑行执行行锤击操作的最大锤击次数;以及若锤击次数小于预设阈值,则继续执行对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行的步骤;以及若锤击次数大于或者等于预设阈值,则返回执行获取目标存储库的待解析逻辑行的步骤。
310.在一些实施例中,获取单元4011,具体配置为从预设栈中将栈顶元素出栈,以获取目标存储库的待解析逻辑行;其中,栈顶元素表示目标存储库的待解析逻辑行。
311.在一些实施例中,当待解析逻辑行是目标存储库中首个被解析的逻辑行时,写入单元4013,还具体配置为在初始化预设栈后,从目标存储库中随机选取一条逻辑行作为待解析逻辑行,并将待解析逻辑行压入预设栈的栈顶。
312.在一些实施例中,写入单元4013,还具体配置为将写入链表中的翻转逻辑行压入预设栈的栈顶。
313.在一些实施例中,如图15所示,解析装置40还可以包括校验单元403,配置为对多个逻辑行分别写入预设数据;其中,预设数据用于判断逻辑行是否发生翻转。
314.在一些实施例中,确定单元402,具体配置为设置输出文件;以及将链表遍历到输出文件,得到目标存储库的目标文件;其中,目标文件中存储有映射关系记录的多个逻辑行的物理位置关系。
315.在一些实施例中,解析装置40应用于存储器,存储器包括至少一个存储库,目标存储库是至少一个存储库中的任意一个存储库;相应地,确定单元402,还配置为判断至少一个存储库是否全部完成解析;以及若至少一个存储库均完成解析,则保存所有存储库的目标文件;以及若至少一个存储库中存在未解析的存储库,则从未解析的存储库中确定目标存储库,并返回执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至至少一个存储库全部完成解析。
316.可以理解地,在本公开中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本公开中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
317.所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本公开所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
318.因此,本公开提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被至少一个处理器执行时实现前述实施例中任一项所述解析方法的步骤。
319.基于上述的计算机存储介质,参见图16,其示出了本公开实施例提供的一种电子设备50的组成结构示意图。如图16所示,可以包括:通信接口501、存储器502和处理器503;各个组件通过总线系统504耦合在一起。可理解,总线系统504用于实现这些组件之间的连接通信。总线系统504除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图16中将各种总线都标为总线系统504。其中,通信接口501,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
320.存储器502,用于存储能够在处理器503上运行的计算机程序;
321.处理器503,用于在运行所述计算机程序时,执行:
322.在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;其中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系,可以包括:
323.获取目标存储库的待解析逻辑行,其中,目标存储库包括多个逻辑行;
324.对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;
325.将至少一个翻转逻辑行写入链表;
326.重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成;
327.根据所述链表确定映射关系,所述映射关系用于记录所述多个逻辑行的物理位置关系。
328.可以理解,本公开中的存储器502可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddrsdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步链动态随机存取存储器(synchronous link dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,drram)。本文描述的系统和方法的存储器502旨在包括但不限于这些和任意其它适合类型的存储器。
329.而处理器503可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器503中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器503可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开中的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本公开中的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器502,处理器503读取存储器502中的信息,结合其硬件完成上述方法的步骤。
330.可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(application specific integrated circuits,asic)、数字信号处理器(digital signal processing,dsp)、数字信号处理设备(dsp device,dspd)、可编程逻辑设备(programmable logic device,pld)、现场可编程门阵列(field-programmable gate array,fpga)、通用处理器、控制器、微控制器、微处理器、用于执行本公开所述功能的其它电子单元或其组合中。
331.对于软件实现,可通过执行本文所述功能的模块(例如过程、函数等)来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
332.可选地,作为另一个实施例,处理器503还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的解析方法。
333.在本公开实施例中,对于电子设备50而言,由于其可以包括前述的解析装置40,从而能够通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系。这样,电子设备50可以通过对待解析逻辑行执行行锤击操作,并将所得到的翻转逻辑行写入链表中,能够得到存储器的逻辑行的物理位置关系,实现了对存储器逻辑行的物理位置关系的正确解析,从而可以实现存储器的逻辑行到物理行的转换。
334.以上所述,仅为本公开的较佳实施例,并非用于限定本公开的保护范围。
335.需要说明的是,在本公开中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
336.上述本公开序号仅仅为了描述,不代表实施例的优劣。
337.本公开所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
338.本公开所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
339.本公开所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
340.以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

技术特征:
1.一种解析方法,其特征在于,所述方法包括:在目标存储库的解析过程中,通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系;重复执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述多个逻辑行全部解析完成;根据所述链表确定映射关系,所述映射关系用于记录所述多个逻辑行的物理位置关系;其中,所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系,包括:获取所述目标存储库的待解析逻辑行,其中,所述目标存储库包括多个逻辑行;对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;将所述至少一个翻转逻辑行写入所述链表。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:获取所述目标存储库的逻辑行数量;根据所述目标存储库的逻辑行数量,确定所述链表的链表结构;其中,所述链表包括多个节点,且所述多个节点的数量和所述目标存储库的逻辑行数量相同。3.根据权利要求1所述的方法,其特征在于,所述将所述至少一个翻转逻辑行写入所述链表,包括:若所述至少一个翻转逻辑行仅包括第一翻转逻辑行,则利用第一解析策略将所述第一翻转逻辑行写入所述链表;若所述至少一个翻转逻辑行至少包括第一翻转逻辑行和第二翻转逻辑行,则利用第二解析策略将所述第一翻转逻辑行和所述第二翻转逻辑行写入所述链表。4.根据权利要求3述的方法,其特征在于,所述利用第一解析策略将所述第一翻转逻辑行写入所述链表,包括:在所述链表中不存在所述第一翻转逻辑行的情况下,将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;判断所述待解析节点的后继节点是否为空;若所述待解析节点的后继节点为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的后继节点;若所述待解析节点的后继节点不为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的前驱节点。5.根据权利要求3所述的方法,其特征在于,所述第一翻转逻辑行和所述第二翻转逻辑行是所述至少一个翻转逻辑行中翻转次数最多的两个逻辑行,且所述第一翻转逻辑行的翻转次数大于或者等于所述第二翻转逻辑行的翻转次数;相应地,所述利用第二解析策略将所述第一翻转逻辑行和所述第二翻转逻辑行写入所述链表,包括:判断所述第一翻转逻辑行是否存在于所述链表中;若所述第一翻转逻辑行不存在于所述链表中,则将所述第一翻转逻辑行写入所述链表;
若所述第一翻转逻辑行存在于所述链表中,则判断所述第二翻转逻辑行是否存在于所述链表中;若所述第二翻转逻辑行不存在于所述链表中,则将所述第二翻转逻辑行写入所述链表。6.根据权利要求5所述的方法,其特征在于,所述将所述第一翻转逻辑行写入所述链表,包括:将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;判断所述待解析节点的后继节点是否为空;若所述待解析节点的后继节点为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的后继节点;若所述待解析节点的后继节点不为空,则将所述第一翻转逻辑行的行地址写入所述待解析节点的前驱节点。7.根据权利要求5所述的方法,其特征在于,所述将所述第二翻转逻辑行写入所述链表,包括:将所述待解析逻辑行在所述链表中对应的节点确定为待解析节点;判断所述待解析节点的后继节点是否为空;若所述待解析节点的后继节点为空,则将所述第二翻转逻辑行的行地址写入所述待解析节点的后继节点;若所述待解析节点的后继节点不为空,则将所述第二翻转逻辑行的行地址写入所述待解析节点的前驱节点。8.根据权利要求3所述的方法,其特征在于,在所述至少一个翻转逻辑行仅包括第一翻转逻辑行,且在所述链表中不存在所述第一翻转逻辑行的情况下,所述方法还包括:统计对所述待解析逻辑行执行行锤击操作的锤击次数;判断所述锤击次数是否大于或者等于预设阈值;其中,所述预设阈值为对所述待解析逻辑行执行行锤击操作的最大锤击次数;若所述锤击次数小于所述预设阈值,则继续执行所述对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行的步骤;若所述锤击次数大于或者等于所述预设阈值,则返回执行所述获取所述目标存储库的待解析逻辑行的步骤。9.根据权利要求1所述的方法,其特征在于,所述获取所述目标存储库的待解析逻辑行,包括:从预设栈中将栈顶元素出栈,以获取所述目标存储库的待解析逻辑行;其中,所述栈顶元素表示所述目标存储库的待解析逻辑行。10.根据权利要求9所述的方法,其特征在于,当所述待解析逻辑行是所述目标存储库中首个被解析的逻辑行时,在所述从预设栈中将栈顶元素出栈,以获取所述目标存储库的待解析逻辑行之前,所述方法还包括:在初始化所述预设栈后,从所述目标存储库中随机选取一条逻辑行作为待解析逻辑行,并将所述待解析逻辑行压入所述预设栈的栈顶。11.根据权利要求9所述的方法,其特征在于,在所述将所述至少一个翻转逻辑行写入
链表的过程中,所述方法还包括:将写入所述链表中的翻转逻辑行压入所述预设栈的栈顶。12.根据权利要求1所述的方法,其特征在于,在对所述目标存储库进行解析之前,所述方法还包括:对所述多个逻辑行分别写入预设数据;其中,所述预设数据用于判断所述逻辑行是否发生翻转。13.根据权利要求1至12任一项所述的方法,其特征在于,所述根据所述链表确定映射关系,包括:设置输出文件;将所述链表遍历到所述输出文件,得到所述目标存储库的目标文件;其中,所述目标文件中存储有所述映射关系记录的多个逻辑行的物理位置关系。14.根据权利要求13所述的方法,其特征在于,所述方法应用于存储器,所述存储器包括至少一个存储库,所述目标存储库是所述至少一个存储库中的任意一个存储库;所述方法还包括:判断所述至少一个存储库是否全部完成解析;若所述至少一个存储库均完成解析,则保存所有存储库的目标文件;若所述至少一个存储库中存在未解析的存储库,则从所述未解析的存储库中确定目标存储库,并返回执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述至少一个存储库全部完成解析。15.一种解析装置,其特征在于,所述解析装置包括:解析单元,配置为在目标存储库的解析过程中,通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系;并重复执行所述通过对所述目标存储库中的逻辑行执行行锤击操作确定所述逻辑行的物理位置关系的步骤,直至所述目标存储库包括的多个逻辑行全部解析完成;确定单元,配置为根据链表确定映射关系,所述映射关系用于记录所述多个逻辑行的物理位置关系;所述解析单元包括获取单元,锤击单元和写入单元;其中,所述获取单元,配置为获取所述目标存储库的待解析逻辑行,其中,所述目标存储库包括多个逻辑行;所述锤击单元,配置为对所述待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;所述写入单元,配置为将所述至少一个翻转逻辑行写入所述链表。16.一种电子设备,所述电子设备包括存储器和处理器,其中,所述存储器,用于存储能够在所述处理器上运行的计算机程序;所述处理器,用于在运行所述计算机程序时,执行如权利要求1至14任一项所述的解析方法。17.一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被至少一个处理器执行时实现如权利要求1至14任一项所述的解析方法。

技术总结
本公开实施例提供了一种解析方法、解析装置、电子设备和计算机存储介质,该方法包括:在目标存储库的解析过程中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系;并重复执行通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系的步骤,直至多个逻辑行全部解析完成;根据链表确定映射关系,该映射关系用于记录多个逻辑行的物理位置关系;其中,通过对目标存储库中的逻辑行执行行锤击操作确定逻辑行的物理位置关系,包括:获取目标存储库的待解析逻辑行,该目标存储库包括多个逻辑行;对待解析逻辑行执行行锤击操作,直至得到至少一个翻转逻辑行;将至少一个翻转逻辑行写入链表。将至少一个翻转逻辑行写入链表。将至少一个翻转逻辑行写入链表。


技术研发人员:李晓磊 韩宝磊
受保护的技术使用者:长鑫存储技术有限公司
技术研发日:2022.01.21
技术公布日:2023/7/31
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐