CN111831575A - 逻辑地址范围的存储方法、装置及存储设备 - Google Patents
逻辑地址范围的存储方法、装置及存储设备 Download PDFInfo
- Publication number
- CN111831575A CN111831575A CN201910305273.XA CN201910305273A CN111831575A CN 111831575 A CN111831575 A CN 111831575A CN 201910305273 A CN201910305273 A CN 201910305273A CN 111831575 A CN111831575 A CN 111831575A
- Authority
- CN
- China
- Prior art keywords
- node
- linked list
- logical address
- address range
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000003780 insertion Methods 0.000 claims abstract description 44
- 230000037431 insertion Effects 0.000 claims abstract description 44
- 230000015654 memory Effects 0.000 description 16
- 238000012545 processing Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000002093 peripheral effect Effects 0.000 description 10
- 230000001133 acceleration Effects 0.000 description 9
- 238000001514 detection method Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 2
- 239000000919 ceramic Substances 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 101000685982 Homo sapiens NAD(+) hydrolase SARM1 Proteins 0.000 description 1
- 102100023356 NAD(+) hydrolase SARM1 Human genes 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000000849 selective androgen receptor modulator Substances 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Abstract
本申请公开了一种逻辑地址范围的存储方法、装置及存储介质,属于存储技术领域。所述方法包括获取主机端发送的数据操作命令;确定数据操作命令对应的第一逻辑地址范围,并构建存储有第一逻辑地址范围的第一节点;若检测到第一节点与第一链表中的节点发生冲突,则将第一节点插入到第二链表中,第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,第二链表用于存储等待插入第一链表的节点。本申请提供的第一链表可以直接插入逻辑地址范围,减小了逻辑地址范围的插入次数,显著提高了存储设备的读写性能,通过在节点发生冲突时,将节点插入第二链表进行排队等待,避免了逻辑地址范围的冲突,保证了逻辑地址范围的操作时序。
Description
技术领域
本申请涉及存储技术领域,特别涉及一种逻辑地址范围的存储方法、装置及存储设备。
背景技术
为了便于存储数据,目前的SSD(Solid State Disk,固态硬盘)等存储设备需要建立物理地址与逻辑地址之间的映射,并将正在访问的逻辑地址存储起来。比如,在接收到主机端发送的数据操作命令后,由于响应数据操作命令需要一定的时长,因此,存储设备可以先将正在响应的数据操作命令对应的逻辑地址存储在链表中,以表示这些逻辑地址正在使用,避免逻辑地址冲突。
相关技术中,在接收到主机端发送的数据操作命令后,存储设备可以将数据操作命令对应的逻辑地址抽象为节点插入到链表中。但是,由于目前的链表中的每个节点只能存储单独的逻辑地址,而数据操作命令对应的逻辑地址通常是一个范围,如0~64,64~128等,因此,在将数据操作命令对应的逻辑地址范围抽象为节点插入时,需要先将逻辑地址范围拆分成单独的逻辑地址,再将拆分后的各个逻辑地址分别抽象为节点进行插入。例如,若数据操作命令对应的逻辑地址范围为0~64,则需要先将0~64的逻辑地址范围拆分成64个单独的逻辑地址,再将这64个逻辑地址分别抽象为节点插入到链表中,也即需要执行64次节点插入操作。
由于相关技术中,当数据操作命令对应的逻辑地址是一个范围时,需要先将逻辑地址范围进行拆分,再分别执行节点插入操作,因此节点插入操作较为繁琐,而且不支持判断逻辑地址范围是否发生冲突。
发明内容
本申请实施例提供了一种逻辑地址范围的存储方法、装置及存储设备,可以用于解决相关技术中存在的节点插入操作较为繁琐,严重影响存储设备的性能,以及不支持判断逻辑地址范围是否发生冲突问题。所述技术方案如下:
第一方面,提供了一种逻辑地址范围的存储方法,应用于存储设备中,所述方法包括:
获取主机端发送的数据操作命令;
确定所述数据操作命令对应的第一逻辑地址范围,并构建存储有所述第一逻辑地址范围的第一节点;
若检测到所述第一节点与所述第一链表中的节点发生冲突,则将所述第一节点插入到第二链表中,所述第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,所述第二链表用于存储等待插入所述第一链表的节点,节点发生冲突是指节点存储的逻辑地址范围发生重叠。
可选地,所述将所述第一节点插入到第二链表中之前,还包括:
查询所述第一链表中是否存在目标节点,所述目标节点是指存储的逻辑地址范围包含所述第一逻辑地址范围的一个节点,或者存储的逻辑地址范围连续且连续的逻辑地址范围包含所述第一逻辑地址范围的多个连续节点;
若查询到所述第一链表中存在所述目标节点,则确定所述第一节点与所述第一链表中的节点发生冲突。
可选地,所述第一链表的节点存储有起始地址和存储范围,所述起始地址和存储范围用于指示一个逻辑地址范围,所述第一逻辑地址范围的起始地址为第一起始地址;
所述查询所述第一链表中是否存在目标节点,包括:
从所述第一链表中定位第二节点,所述第二节点是指存储的起始地址小于所述第一起始地址的节点中存储的起始地址最大的节点;
检测所述第二节点存储的起始地址和存储范围所指示的第二逻辑地址范围是否包含所述第一逻辑地址范围;
若所述第二逻辑地址范围包含所述第一逻辑地址范围,则将所述第二节点确定为所述目标节点;
若所述第二逻辑地址范围不包含所述第一逻辑地址范围,则检测第三节点存储的起始地址和存储范围所指示的第三逻辑地址范围是否包含所述第一逻辑地址范围,所述第三节点是指所述第二节点的后一个节点;
若所述第三逻辑地址范围包含所述第一逻辑地址范围,则将所述第三节点确定为所述目标节点;
若所述第三逻辑地址范围不包含所述第一逻辑地址范围,则检测所述第一链表中是否存在多个连续节点,所述多个连续节点是指以所述第二节点或所述第三节点为起始节点、存储的逻辑地址范围连续且最后一个节点存储的逻辑地址范围的截止地址大于或等于所述第一逻辑地址范围的截止地址的多个节点;
若所述第一链表中存在所述多个连续节点,则将所述多个连续节点确定为所述目标节点。
可选地,所述检测所述第一链表中是否存在多个连续节点,包括:
检测所述第三节点存储的起始地址是否等于所述第一起始地址;
若所述第三节点存储的起始地址等于所述第一起始地址,则令所述第三节点为参考节点;
检测所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围是否连续;
若所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围连续,则检测所述参考节点的后一个节点存储的逻辑地址范围的截止地址是否大于或等于所述第一逻辑地址范围的截止地址;
若所述参考节点的后一个节点存储的逻辑地址范围的截止地址大于或等于所述第一逻辑地址范围的截止地址,则将所述第三节点、所述第三节点与所述参考节点的后一个节点之间的节点以及所述参考节点的后一个节点确定为所述多个连续节点;
若所述参考节点的后一个节点存储的逻辑地址范围的截止地址小于所述第三逻辑地址范围的截止地址,则令所述参考节点的后一个节点为参考节点,并返回检测所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围是否连续的步骤。
可选地,所述检测所述第三节点存储的起始地址是否等于所述第一起始地址之后,还包括:
若所述第三节点存储的起始地址不等于所述第一起始地址,则检测所述第二节点与所述第三节点存储的逻辑地址范围是否连续;
若所述第二节点与所述第三节点存储的逻辑地址范围连续,则令所述第二节点为参考节点;
检测所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围是否连续;
若所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围连续,则检测所述参考节点的后一个节点存储的逻辑地址范围的截止地址是否大于或等于所述第一逻辑地址范围的截止地址;
若所述参考节点的后一个节点存储的逻辑地址范围的截止地址大于或等于所述第一逻辑地址范围的截止地址,则将所述第二节点、所述第二节点与所述参考节点的后一个节点之间的节点以及所述参考节点的后一个节点确定为所述多个连续节点;
若所述参考节点的后一个节点存储的逻辑地址范围的截止地址小于所述第一逻辑地址范围的截止地址,则令所述参考节点的后一个节点为参考节点,并返回检测所述参考节点与所述参考节点的后一个节点存储的逻辑地址范围是否连续的步骤。
可选地,所述将所述第一节点插入到所述第二链表中,包括:
从所述第一链表和所述第二链表中确定与所述第一节点发生冲突的节点;
将确定的节点的标识作为所述第一节点的冲突节点的标识添加到所述第一节点中;
将添加标识后的第一节点插入到所述第二链表的最后一个节点之后。
可选地,所述构建存储有所述第一逻辑地址范围的第一节点之后,还包括:
若检测到所述第一节点未与所述第一链表中的节点发生冲突,则将所述第一节点插入到所述第一链表中。
可选地,所述将所述第一节点插入到所述第一链表中之前,还包括:
检测所述第二链表是否已储有等待插入所述第一链表的节点;
若所述第二链表未存储有等待插入所述第一链表的节点,则执行将所述第一节点插入到所述第一链表中的步骤;
若所述第二链表已存储有等待插入所述第一链表的节点,则检测所述第一节点是否与所述第二链表中的节点发生冲突;
若所述第一节点未与所述第二链表中的节点发生冲突,则执行将所述第一节点插入到所述第一链表中的步骤。
可选地,所述检测所述第一节点是否与所述第二链表中的节点发生冲突之后,还包括:
若所述第一节点与所述第二链表中的节点发生冲突,则将所述第一节点插入到所述第二链表中。
可选地,所述将所述第一节点插入到所述第一链表中之后,还包括:
若所述数据操作命令已响应完成,则将所述第一节点从所述第一链表中删除。
可选地,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述将所述第一节点从所述第一链表中删除之后,还包括:
对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第一节点的标识,则将所述第一节点的标识从所述任一节点的冲突节点的标识中删除。
可选地,所述将所述第一节点从所述第一链表中删除之后,还包括:
检测所述第二链表中是否存在满足节点插入条件的第三节点,所述节点插入条件是指不与所述第一链表中的节点以及当前节点之前的节点发生冲突;
若所述第二链表中存在所述第三节点,则将所述第三节点插入到所述第一链表中,并将所述第三节点从所述第二链表中删除。
可选地,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述检测所述第二链表中是否存在满足节点插入条件的第三节点,包括:
检测所述第二链表中是否存在未存储有当前节点的冲突节点的标识的节点;
若所述第二链表中存在未存储有当前节点的冲突节点的标识的节点,则将所述未存储有当前节点的冲突节点的标识的节点确定为所述第三节点。
可选地,所述将所述第三节点从所述第二链表中删除之后,还包括:
对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第三节点,则将所述第三节点的标识从所述任一节点的冲突节点的标识中删除。
可选地,所述数据操作命令为数据读取命令或数据写入命令,所述第一链表为skiplist(跳表)。
第二方面,提供了一种逻辑地址范围的存储装置,所述装置包括:
获取模块,用于获取主机端发送的数据操作命令;
第一确定模块,用于确定所述数据操作命令对应的第一逻辑地址范围,并构建存储有所述第一逻辑地址范围的第一节点;
第一插入模块,用于若检测到所述第一节点与所述第一链表中的节点发生冲突,则将所述第一节点插入到第二链表中,所述第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,所述第二链表用于存储等待插入所述第一链表的节点,节点发生冲突是指节点存储的逻辑地址范围发生重叠。
可选地,所述装置还包括:
查询模块,用于查询所述第一链表中是否存在目标节点,所述目标节点是指存储的逻辑地址范围包含所述第一逻辑地址范围的一个节点,或者存储的逻辑地址范围连续且连续的逻辑地址范围包含所述第一逻辑地址范围的多个连续节点;
第二确定模块,用于若查询到所述第一链表中存在所述目标节点,则确定所述第一节点与所述第一链表中的节点发生冲突。
可选地,所述第一插入模块用于:
从所述第一链表和所述第二链表中确定与所述第一节点发生冲突的节点;
将确定的节点的标识作为所述第一节点的冲突节点的标识添加到所述第一节点中;
将添加标识后的第一节点插入到所述第二链表的最后一个节点之后。
可选地,所述装置还包括:
第二插入模块,用于若检测到所述第一节点未与所述第一链表中的节点发生冲突,则将所述第一节点插入到所述第一链表中。
可选地,所述装置还包括:
第一检测模块,用于检测所述第二链表是否已储有等待插入所述第一链表的节点;
第一触发模块,用于若所述第二链表未存储有等待插入所述第一链表的节点,则触发所述第二插入模块将所述第一节点插入到所述第一链表中;
第二检测模块,用于若所述第二链表已存储有等待插入所述第一链表的节点,则检测所述第一节点是否与所述第二链表中的节点发生冲突;
第二触发模块,用于若所述第一节点未与所述第二链表中的节点发生冲突,则触发所述第二插入模块将所述第一节点插入到所述第一链表中。
可选地,所述装置还包括:
第三插入模块,用于若所述第一节点与所述第二链表中的节点发生冲突,则将所述第一节点插入到所述第二链表中。
可选地,所述装置还包括:
第一删除模块,用于若所述数据操作命令已响应完成,则将所述第一节点从所述第一链表中删除。
可选地,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述装置还包括:
第二删除模块,用于对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第一节点的标识,则将所述第一节点的标识从所述任一节点的冲突节点的标识中删除。
可选地,所述装置还包括:
第三检测模块,用于检测所述第二链表中是否存在满足节点插入条件的第三节点,所述节点插入条件是指不与所述第一链表中的节点以及当前节点之前的节点发生冲突;
第四插入模块,用于若所述第二链表中存在所述第三节点,则将所述第三节点插入到所述第一链表中,并将所述第三节点从所述第二链表中删除。
可选地,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述第三检测模块用于:
检测所述第二链表中是否存在未存储有当前节点的冲突节点的标识的节点;
若所述第二链表中存在未存储有当前节点的冲突节点的标识的节点,则将所述未存储有当前节点的冲突节点的标识的节点确定为所述第三节点。
可选地,所述装置还之后,还包括:
第三删除模块,用于对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第三节点,则将所述第三节点的标识从所述任一节点的冲突节点的标识中删除。
可选地,所述数据操作命令为数据读取命令或数据写入命令,所述第一链表为skiplist。
第三方面,提供了一种存储设备,所述存储设备用于执行上述任一种逻辑地址范围的存储方法。
第四方面,提供了一种终端,所述终端包括处理器和存储设备,所述存储设备用于执行上述任一种逻辑地址范围的存储方法。
第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述任一种逻辑地址范围的存储方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例中,存储设备维护有节点能够直接存储逻辑地址范围的第一链表,使得存储设备可以直接在第一链表中插入数据操作命令对应的逻辑地址范围,避免了需要将逻辑地址范围进行拆分后再分别插入导致影响存储设备性能的问题,减小了节点插入次数,显著提高了存储设备的读写性能。另外,通过在插入存储有数据操作命令对应的逻辑地址范围的第一节点之前,若检测到第一节点与第一链表中的节点发生冲突,先将等待插入第一链表但与第一链表中的节点发生冲突的节点先保存在第二链表中,使其先进行排队等待,不仅支持逻辑地址范围的冲突检测,避免逻辑地址范围发生冲突,而且保证了逻辑地址范围的操作时序以及数据的正确性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术中提供的一种存储设备的示意图;
图2是本申请实施例提供的一种存储设备的示意图;
图3是本申请实施例提供的一种skiplist的数据结构示意图;
图4是本申请实施例提供的一种逻辑地址范围的存储方法的流程图;
图5是本申请实施例提供的一种逻辑地址范围的查询方法流程图;
图6是本申请实施例提供的另一种逻辑地址范围的查询方法流程图;
图7是本申请实施例提供的另一种逻辑地址范围的存储方法流程图;
图8是本申请实施例提供的一种逻辑地址范围的存储装置的结构框图;
图9是本申请实施例提供的一种终端的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细地解释说明之前,先对本申请实施例涉及的名词进行解释。
链表
一种物理存储单元上的存储结构,由一系列节点(node)组成。节点为链表的存储单元,用于存储数据。
skiplist(跳表)
一种有序链表,由m个节点组成,每个节点的层数随机生成。例如第i个节点包含元素x,则i节点的每一层都包含元素x,并且每一层的节点都指向同一层的下一个节点。其中,元素是指节点中存储的值或范围。
key(起始地址),range(存储范围)
本申请实施例提供的链表上的节点所存储的值,key和range共同表示对应节点上存储的逻辑地址范围,比如,key~key+range即为对应节点上存储的逻辑地址范围。
逻辑地址
固态硬盘写入数据的逻辑层地址
物理地址
固态硬盘物理介质对应的地址
接下来,对本申请实施例的应用场景予以说明。
本申请实施例提供的逻辑地址范围的存储方法应用于存储设备中,该存储设备可以包括物理存储单元和/或逻辑存储单元,示例的,该存储设备可以为SSD(Solid StateDisk,固态硬盘)。进一步地,该存储设备还可以为分布式存储设备,分布式存储设备包括多个存储节点,每个存储节点可以为物理存储单元或逻辑存储单元。
由于主机端响应数据操作命令需要一定的时长,因此SSD在接收到主机端发送的数据操作命令后,可以先将主机端正在响应的数据操作命令对应的逻辑地址存储在链表中,以便与新进入的数据操作命令对应的逻辑地址进行比对,如果新进入的数据操作命令对应的逻辑地址与正在响应的数据操作命令对应的逻辑地址发生冲突,则需要等待当前正在响应的数据操作命令响应完成之后,才能执行新的数据操作命令。其中,该数据操作命令包括数据读取命令或数据写入命令。
接下来,对本申请实施例涉及的实施环境进行介绍。
首先,需要说明的是,相关技术提供的存储设备在通过链表存储逻辑地址时,链表中的每个节点仅能存储key,key表示该节点上存储的逻辑地址的值,且各个节点存储的key不允许重复。图1是相关技术中提供的一种存储设备的示意图,如图1所示,该存储设备存储有链表,该链表包括4个节点。其中,头节点的key=INT_MIN,表示头节点上存储的逻辑地址为INT_MIN;第二个节点的key=15,表示第二个节点上存储的逻辑地址为15;以此类推。
由上可知,相关技术提供的链表的节点只能存储一个单独的逻辑地址,而不能存逻辑地址范围,因此,当需要在链表中插入一个逻辑地址范围时,也就需要将逻辑地址范围进行拆分,再将拆分的逻辑地址分别插入到链表中,操作较为繁琐,无法支持直接插入逻辑地址范围,也不支持判断插入的逻辑地址范围是否与其他节点存在冲突,无法兼顾内存开销和性能开销。
为了提高存储设备的性能,本申请实施例对相关技术的存储设备进行了改进,使得存储设备能够维护第一链表和第二链表。其中,第一链表与相关技术中的链表的数据结构并不相同,第一链表中的节点可以直接存储逻辑地址范围,且第一链表为有序链表。第二链表中的节点用于存储等待插入第一链表的节点,且第二链表中的节点按时序排列。另外,该存储设备还可以基于第二链表对第一链表进行节点插入操作和节点删除操作,以及对第一链表进行逻辑地址范围的直接查询操作等。
作为一种示例,第一链表中的节点可以存储key和range这两个参数,其中,key表示该节点上存储的逻辑地址范围的起始地址的值,range表示一个存储范围,key~key+range即为该节点上存储的逻辑地址范围。也即是,将现有链表中节点存储key的形式,修改为存储key+range的形式,使其可以直接存储逻辑地址范围。另外,各个节点上存储的key不允许重复。
为了保证同一逻辑地址的数据操作命令的操作时序,即先到达的数据操作命令先进行操作,相较于相关技术的存储设备,本申请实施例提供的存储设备中还维护了一个第二链表,第二链表的节点用于存储与第一链表中的节点发生冲突的逻辑地址范围。也即是,本申请实施例中,将正在访问的逻辑地址范围进行一级保存,存入到第一链表中,并将等待访问但与第一链表中的节点发生冲突的逻辑地址范围进行二级保存,存入第二链表中。进一步地,第二链表中的节点除了存储冲突逻辑地址范围外,还可以存储当前节点的冲突节点的标识,当前节点的冲突节点是指第一链表的节点和第二链表的当前节点之前的节点中与当前节点发生冲突的节点。
图2是本申请实施例提供的一种存储设备的示意图,如图2所示,该存储设备存储有第一链表21和第二链表22。第一链表21包括4个节点,头节点的key=INT_MIN,表示头节点存储的逻辑地址范围为INT_MIN~INT_MIN;第二个节点的key=15,range=5,表示第二个节点存储的逻辑地址范围为15~15+5;第三个节点的key=22,range=5,表示第三个节点存储的逻辑地址范围为22~22+5;以此类推。第二链表22中存储有一个等待插入第一链表21的节点,该节点的key=15,range=5,即该节点与第一链表21中的第二个节点冲突。另外,该节点还可以存储第一链表21中的第二个节点的标识,以表示该节点与第一链表21中的第二个节点冲突。
可选地,第一链表可以为skiplist。skiplist由n层组成,第一层包含所有的元素,每一层都是一个有序的链表。而且,如果节点i包含元素x,则节点i的所有层都包含元素x,每一层都指向下一个节点的同一层元素(如果下一个节点没有该层,则指向下下一个节点直到找到有该层的节点)。图3是本申请实施例提供的一种skiplist的数据结构示意图,如图3所示,该skiplist包括4个节点,头节点的层数代表该skiplist的最大层数,从左到右的节点的层数依次为4层、2层、4层、2层,存储的逻辑地址范围依次为INT_MIN~INT_MIN、15~20、22~27、40~43。
进一步地,当第一链表为skiplist时,还可以将skiplist中的节点根据层数不同分配在不同的存储器中进行存储。比如,将层数高的节点放在SRAM(Static Random-AccessMemory,静态随机存取存储器)中存储,将层数低的节点放在DRAM(Dynamic Random AccessMemory,动态随机存储器)中存储。所述层数高的节点是指所处层的层数大于或等于预设层数的节点,所述层数低的节点是指所处层数小于预设层数的节点,预设层数可以预先设置。示例的,DRAM可以为DDR SDRAM(Double Data Rate Synchronous DRAM,双倍速率同步动态随机存储器)。
这种存储方式在使用较小SARM空间的前提下可以提高SSD的查询性能,因为每次查询的操作均从高层节点开始,高层节点的数量相对于底层节点的数量也较少,占用空间也较少,从而能够提高搜索速度。
接下来,对本申请实施例提供的逻辑地址范围的存储方法进行详细介绍。图4是本申请实施例提供的一种逻辑地址范围的存储方法的流程图,该方法应用于存储设备中。如图4所示,该方法包括如下步骤:
步骤401:获取主机端发送的数据操作命令。
主机端发送的数据操作命令可以为数据读取命令或数据写入命令,且每个数据操作命令均存在对应的逻辑地址范围。所述主机端是指数据操作命令的处理端,如终端的处理器等。
步骤402:确定数据操作命令对应的第一逻辑地址范围,并构建存储有第一逻辑地址范围的第一节点。
例如,确定数据操作命令对应的逻辑地址范围为第一逻辑地址范围后,可以基于第一逻辑地址范围的起始地址和存储范围,构建一个包含该起始地址和存储范围的第一节点。示例的,假设第一逻辑地址范围为15~20,则可以构建一个包含key和range的节点,其中,key=15,range=5。
步骤403:检测第一节点与第一链表中的节点是否发生冲突。
其中,第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,也即是,第一链表中的各个节点可以直接存储逻辑地址范围,且所存储的逻辑地址范围正在被访问。示例的,第一链表为有序的链表,具体可以为skiplist等形式。
作为一种示例,第一链表中的每个节点存储有起始地址和存储范围,起始地址和存储范围用于指示一个逻辑地址范围。示例的,节点的起始地址为key,存储范围为range,则key+range即为该节点存储的逻辑地址范围。
其中,节点发生冲突是指节点存储的逻辑地址范围发生重叠。第一节点可以与第一链表中的某个节点发生冲突。比如,若第一节点的逻辑地址范围为15~20,第二链表中的节点A的逻辑地址范围为17~21,由于这两个节点的逻辑地址范围发生重叠,因此称这第一节点和节点A发生冲突。当然,第一节点也可以与第一链表中的多个节点发生冲突。比如,若第一节点的逻辑地址范围为20~40,第二链表中节点B的逻辑地址范围为20~30,节点C的逻辑地址范围为30~40,由于第一节点与节点A和节点B的逻辑地址范围均发生重叠,因此称第一节点与节点A和节点B均发生冲突。
作为一种示例,检测第一节点与第一链表中的节点是否发生冲突的操作包括:查询第一链表中是否存在目标节点,目标节点是指存储的逻辑地址范围包含第一逻辑地址范围的一个节点,或者存储的逻辑地址范围连续且连续的逻辑地址范围包含第一逻辑地址范围的多个连续节点;若查询到第一链表中存在目标节点,则确定第一节点与第一链表中的节点发生冲突;若查询到第一链表中不存在目标节点,则确定第一节点与第一链表中的节点未发生冲突。
也即是,在节点插入过程中,可以在第一链表中对第一节点对应的逻辑地址范围进行查询,如果查询到包含该逻辑地址范围的节点,则说明存在冲突,如果未查询到,则说明未存在冲突。由此可知,第一链表还支持对逻辑地址范围的查询,具体的查询过程将在下述图5实施例中详细阐述,本申请实施例在此先不做赘述。
步骤404:若检测到第一节点与第一链表中的节点发生冲突,则将第一节点插入到第二链表中。
如果第一节点与第一链表中的节点发生冲突,则为了避免逻辑地址范围冲突,则可以先将第一节点插入到第二链表中,进行排队等待。
其中,第二链表中的节点是与第一链表中的节点发生冲突、无法立即插入第一链表中,因此需要进行排队等待的节点。而且,第二链表中的节点按照时序排列,比如,先进入的数据操作命令对应的逻辑地址范围排序在前,后进入的数据操作命令对应的逻辑地址范围排序在后。通过在存储设备中维护第二链表,可保证同一逻辑地址范围的数据操作命令的时序,即先到达的命令先进行操作,后到达的命令后进行操作,进而严格的保证存储设备执行数据操作命令的时序。
本申请实施例中,通过维护第二链表,实现了范围插入模式下的保时序处理,如果范围插入发生冲突,表示待插入的逻辑地址范围在当前时段繁忙,此时可以先将该范围放入第二链表中进行排队等待,当其不存在冲突节点时,在将其从第二链表中取出,以插入到第一链表中。这种方式可以严格保证对逻辑地址范围的操作按照先到先执行的方式进行操作,即保证了逻辑地址范围的操作时序以及数据的正确性。
作为一种示例,将第一节点插入到第二链表中包括:从第一链表和第二链表中确定与第一节点发生冲突的节点;将确定的节点的标识作为第一节点的冲突节点的标识添加到第一节点中;将添加标识后的第一节点插入到第二链表的最后一个节点之后。其中,节点的标识可以为节点的名称、编号或位置信息等,本申请实施例对此不做限定。
如此,可以使得第二链表中的节点不仅存储有第一逻辑地址范围,还存储有当前节点的冲突节点的标识,通过存储当前节点的冲突节点的标识,可以有效指示当前节点与哪些节点发生冲突,且便于后续根据存储的冲突节点的标识快速判断当前节点是否满足节点插入条件。
步骤405:若检测到第一节点未与第一链表中的节点发生冲突,则将第一节点插入到第一链表中。
若第一节点未与第一链表中的节点发生冲突,则表示第一逻辑地址范围当前未被访问,这种情况下,也就可以对该数据操作命令进行响应,并将第一节点插入到第一链表中。
作为一种示例,若检测到第一节点未与第一链表中的节点发生冲突,还可以先检测第二链表是否已储有等待插入第一链表的节点。若第二链表未存储有等待插入第一链表的节点,则可以直接将第一节点插入到第一链表中;若第二链表已存储有等待插入第一链表的节点,则继续检测第一节点是否与第二链表中的节点发生冲突,若第一节点未与所述第二链表中的节点发生冲突,则将第一节点插入到第一链表中,若第一节点与第二链表中的节点发生冲突,则将第一节点插入到第二链表中。
也即是,需要在第一节点既未与第一链表中的节点发生冲突,且未与第二链表中的节点发生冲突的条件下,才将第一节点插入到第一链表中。如果第一节点未与第一链表中的节点发生冲突,但与第二链表中排队等待的节点发生冲突,则需要将第一节点先保存到第二链表中进行排队等待,当前面的节点插入完成之后,再对第一节点进行插入,如此,可以保证逻辑地址范围的操作时序,进而保证数据操作命令的时序。
步骤406:若该数据操作命令已响应完成,则将第一节点从第一链表中删除。
当该数据操作命令已响应完成时,表示该数据操作命令对应的第一逻辑地址范围已访问完成,此时处于空闲状态,可以由其他数据操作命令对该第一逻辑地址范围进行访问,这种情况下也就可以将第一节点从第一链表中删除。
作为一种示例,若第二链表的节点用于存储等待插入第一链表的逻辑地址范围以及当前节点的冲突节点的标识,当前节点的冲突节点是指第一链表以及第二链表的当前节点之前的节点中与当前节点发生冲突的节点,则在将第一节点从第一链表中删除之后,还可以基于第一节点对第二链表中各个节点存储的冲突节点的标识进行更新。
具体地,更新操作包括:对于第二链表中的任一节点,若任一节点的冲突节点的标识包括第一节点的标识,则将第一节点的标识从任一节点的冲突节点的标识中删除。
步骤407:检测第二链表中是否存在满足节点插入条件的第三节点,节点插入条件是指不与第一链表中的节点以及当前节点之前的节点发生冲突。
作为一种示例,若第二链表的节点用于存储等待插入第一链表的逻辑地址范围以及当前节点的冲突节点的标识,则可以检测第二链表中是否存在未存储有当前节点的冲突节点的标识的节点,若第二链表中存在未存储有当前节点的冲突节点的标识的节点,则将未存储有当前节点的冲突节点的标识的节点确定为满足节点插入条件的第三节点。其中,未存储有当前节点的冲突节点的标识的节点还可以为存储的当前节点的冲突节点的标识为空值的节点。
步骤408:若第二链表中存在第三节点,则将第三节点插入到第一链表中,并将第三节点从第二链表中删除。
也即是,在将第三节点从第一链表中删除后,若第二链表中的某个节点不再存在冲突节点,则可以确定该节点满足节点插入条件,并对该节点执行节点插入操作,如果插入成功则将该节点从第二链表中删除。
进一步,将第三节点从第二链表中删除之后,还可以继续对第二链表中各节点的冲突节点的标识进行更新。具体地,对于第二链表中的任一节点,若该任一节点的冲突节点的标识包括第三节点的标识,则将第三节点的标识从该任一节点的冲突节点的标识中删除。
需要说明的是,图4实施例仅为本申请的示例性实施例,并不用以限制本申请,上述步骤405-408为可选步骤,可以示具体情况执行,在有些情况下还可以不执行,本申请实施例对此不做限定。
还需要说明的是,图4实施例仅是以在将第一节点插入到第一链表中之后,执行步骤407和步骤408为例进行说明,而在其他实施例中,还可以在任意时刻检测第二链表中是否存在满足节点插入条件的第三节点,并将满足节点插入条件的节点插入到第一链表中。
本申请实施例中,存储设备维护有节点能够直接存储逻辑地址范围的第一链表,使得存储设备可以直接在第一链表中插入数据操作命令对应的逻辑地址范围,避免了需要将逻辑地址范围进行拆分后再分别插入导致影响存储设备性能的问题,减小了节点插入次数,显著提高了存储设备的读写性能。另外,通过在插入存储有数据操作命令对应的逻辑地址范围的第一节点之前,若检测到第一节点与第一链表中的节点发生冲突,先将等待插入第一链表但与第一链表中的节点发生冲突的节点先保存在第二链表中,使其先进行排队等待,不仅支持逻辑地址范围的冲突检测,避免逻辑地址范围发生冲突,而且保证了逻辑地址范围的操作时序以及数据的正确性。
接下来将以第一链表的节点存储有起始地址和存储范围,第一逻辑地址范围的起始地址为第一起始地址为例,对第一逻辑地址范围的查询过程进行详细介绍。图5是本申请实施例提供的一种逻辑地址范围的查询方法流程图,如图5所示,该方法包括如下步骤:
步骤501:从第一链表中定位第二节点,第二节点是指存储的起始地址小于第一起始地址的节点中存储的起始地址最大的节点。
步骤502:检测第二节点存储的起始地址和存储范围所指示的第二逻辑地址范围是否包含第一逻辑地址范围。
步骤503:若第二逻辑地址范围包含第一逻辑地址范围,则将第二节点确定为目标节点。
步骤504:若第二逻辑地址范围不包含第一逻辑地址范围,则检测第三节点存储的起始地址和存储范围所指示的第三逻辑地址范围是否包含第一逻辑地址范围,第三节点是指第二节点的后一个节点。
步骤505:若第三逻辑地址范围包含第一逻辑地址范围,则将第三节点确定为目标节点。
步骤506:若第三逻辑地址范围不包含第一逻辑地址范围,则检测第一链表中是否存在多个连续节点,多个连续节点是指以第二节点或第三节点为起始节点、存储的逻辑地址范围连续且最后一个节点存储的逻辑地址范围的截止地址大于或等于第一逻辑地址范围的截止地址的多个节点。
具体地,检测第一链表中是否存在多个连续节点包括以下步骤:
1)检测第三节点存储的起始地址是否等于第一起始地址。
2)若第三节点存储的起始地址等于第一起始地址,则令第三节点为参考节点。
3)检测参考节点与参考节点的后一个节点存储的逻辑地址范围是否连续。
4)若参考节点与参考节点的后一个节点存储的逻辑地址范围不连续,则确定未查询到包含第一逻辑地址范围的目标节点,结束操作。
5)若参考节点与参考节点的后一个节点存储的逻辑地址范围连续,则检测参考节点的后一个节点存储的逻辑地址范围的截止地址是否大于或等于第一逻辑地址范围的截止地址。
6)若参考节点的后一个节点存储的逻辑地址范围的截止地址大于或等于所述第一逻辑地址范围的截止地址,则将第三节点、第三节点与参考节点的后一个节点之间的节点以及参考节点的后一个节点确定为该多个连续节点。
7)若参考节点的后一个节点存储的逻辑地址范围的截止地址小于第三逻辑地址范围的截止地址,则令参考节点的后一个节点为参考节点,并返回步骤3)。
8)若第三节点存储的起始地址不等于第一起始地址,则检测第二节点与第三节点存储的逻辑地址范围是否连续。
9)若第二节点与第三节点存储的逻辑地址范围连续,则令第二节点为参考节点。
10)检测参考节点与参考节点的后一个节点存储的逻辑地址范围是否连续。
11)若参考节点与参考节点的后一个节点存储的逻辑地址范围不连续,则确定未查询到包含第一逻辑地址范围的目标节点,结束操作。
12)若参考节点与参考节点的后一个节点存储的逻辑地址范围连续,则检测参考节点的后一个节点存储的逻辑地址范围的截止地址是否大于或等于第一逻辑地址范围的截止地址。
13)若参考节点的后一个节点存储的逻辑地址范围的截止地址大于或等于第一逻辑地址范围的截止地址,则将第二节点、第二节点与参考节点的后一个节点之间的节点以及参考节点的后一个节点确定为该多个连续节点。
14)若参考节点的后一个节点存储的逻辑地址范围的截止地址小于第一逻辑地址范围的截止地址,则令参考节点的后一个节点为参考节点,并返回步骤10)。
步骤507:若第一链表中存在该多个连续节点,则将该多个连续节点确定为目标节点。
本申请实施例中,存储设备还支持逻辑地址范围的直接查询,可以直接从第一链表中查询范围相符的目标节点,且目标节点可以为一个节点,也可以为多个连续的节点。这种查询模式避免了将逻辑地址范围拆分成key的形式分别进行查询,减小了查询一个逻辑地址范围需要调用的查询函数的次数,提高了存储设备的运行性能。
接下来,将以第一链表为skiplist,第二链表的名称为pending_list为例,对第一逻辑范围的查询过程进行详细介绍。图6是本申请实施例提供的另一种逻辑地址范围的查询方法流程图,如图6所示,该方法包括如下步骤:
步骤601:基于第一逻辑地址范围,从skiplist中定位位置节点,位置节点是指起始地址小于第二起始地址的节点中起始地址最大的节点。
步骤602:判断位置节点的前后节点存储的逻辑地址范围是否包含第一逻辑地址范围,若是,则将当前查询的节点作为查询到的包含第一逻辑地址范围的目标节点,结束操作,若否,则执行步骤603。
步骤603:将当前节点作为参考节点。
步骤604:判断参考节点与参考节点的后一个节点的逻辑地址范围是否连续,若是,则执行步骤605,若否,则返回未查询到包含第一逻辑地址范围的目标节点,结束操作。
步骤605:判断参考节点的后一个节点存储的逻辑地址范围的截止地址是否小于或等于第三逻辑地址范围的截止地址,若是,则将位置节点的后一个节点、参考节点的后一个节点、以及位置节点的后一个节点和参考节点的后一个节点之间的节点作为查询到的目标节点,结束操作,若否,则将参考节点的后一个节点作为参考节点,并返回步骤604。
例如,在定位位置节点后,如果第一逻辑地址范围的key等于位置节点的后一个节点的key,且第一逻辑地址范围的range大于位置节点的后一个节点的range,则还需要继续判断位置节点的后一个节点与之后的节点存储的逻辑地址范围是否连续,若连续则判断两个连续节点是否包含第一逻辑地址范围,依次进行,如果包含则返回包含第一逻辑地址范围的节点,如果不包含,则返回未查询到包含第一逻辑地址范围的节点。
接下来,将以第一链表为skiplist,第二链表的名称为pending_list为例,对逻辑地址范围的存储方法进行详细介绍。图7是本申请实施例提供的另一种逻辑地址范围的存储方法流程图,如图7所示,该方法包括如下步骤:
步骤701:获取主机端发送的数据操作命令。
步骤702:确定数据操作命令对应的第一逻辑地址范围,并构建存储有第一逻辑地址范围的第一节点。
其中,步骤701-702的具体操作过程可以参考上述步骤401-402,本申请实施例在此不再赘述。
步骤703:对于skiplist中的每一层链表,定位第一节点的插入位置。
步骤704:记录每一层链表中插入位置的前一个节点。
由于skiplist中每个节点都要对应层数,所有在找到插入位置后,还需要记录下来该插入位置对应的每一层的前一个节点。
步骤705:检测第一节点与skiplist中的节点是否发生冲突,若否,则执行步骤706,若是,则执行步骤708。
具体地,可以从插入位置的前后节点开始,检测skiplist中是否存在存储的逻辑地址范围包含第一逻辑地址范围的目标节点,若存在,则记为与skiplist中的节点发生冲突。
步骤706:检测第一节点是否与pending_list中的节点发生冲突,若否,则执行步骤707,若是,则执行步骤708。
步骤707:将第一节点插入到skiplist中。
具体地,可以将第一节点插入到skiplist的相应层所定位的插入位置中。
另外,插入第一节点之后,pending_list中可能会存在与第一节点冲突的节点,因此,需要维护更新这些节点的冲突节点列表,各个节点的冲突节点列表用于存储各个节点的冲突节点的标识。
步骤708:将第一节点插入到pending_list中。
具体地,可以将第一节点插入到pending_list的最后一个节点之后。另外,还可以将skiplist和pending_list中与第一节点发生冲突的节点的标识作为第一节点的冲突节点也添加到第一节点中。
步骤709:将第一节点插入到skiplist中之后,若该数据操作命令已响应完成,则将第一节点从skiplist中删除。
将第一节点从skiplist中删除之后,还可以对pending_list中各个节点的冲突节点列表进行更新,即将第一节点的标识从各个节点的冲突节点列表中删除。
步骤710:检测pending_list中是否存在满足节点插入条件的节点,节点插入条件是指冲突节点列表中不存在冲突节点的标识。
步骤711:若pending_list中存在满足节点插入条件的节点,则将该节点插入到skiplist中,并将该节点从pending_list中删除。
另外,将该节点从pending_list中删除之后,还可以继续对pending_list中各个节点的冲突节点列表进行更新。
图8是本申请实施例提供的一种逻辑地址范围的存储装置的结构框图,如图8所示,该装置包括获取模块801,第一确定模块802和第一插入模块803。
获取模块801,用于获取主机端发送的数据操作命令;
第一确定模块802,用于确定该数据操作命令对应的第一逻辑地址范围,并构建存储有该第一逻辑地址范围的第一节点;
第一插入模块803,用于若检测到该第一节点与该第一链表中的节点发生冲突,则将该第一节点插入到第二链表中,该第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,该第二链表用于存储等待插入该第一链表的节点,节点发生冲突是指节点存储的逻辑地址范围发生重叠。
可选地,该装置还包括:
查询模块,用于查询该第一链表中是否存在目标节点,该目标节点是指存储的逻辑地址范围包含该第一逻辑地址范围的一个节点,或者存储的逻辑地址范围连续且连续的逻辑地址范围包含该第一逻辑地址范围的多个连续节点;
第二确定模块,用于若查询到该第一链表中存在该目标节点,则确定该第一节点与该第一链表中的节点发生冲突。
可选地,该第一插入模块803用于:
从该第一链表和该第二链表中确定与该第一节点发生冲突的节点;
将确定的节点的标识作为该第一节点的冲突节点的标识添加到该第一节点中;
将添加标识后的第一节点插入到该第二链表的最后一个节点之后。
可选地,该装置还包括:
第二插入模块,用于若检测到该第一节点未与该第一链表中的节点发生冲突,则将该第一节点插入到该第一链表中。
可选地,该装置还包括:
第一检测模块,用于检测该第二链表是否已储有等待插入该第一链表的节点;
第一触发模块,用于若该第二链表未存储有等待插入该第一链表的节点,则触发该第二插入模块将该第一节点插入到该第一链表中;
第二检测模块,用于若该第二链表已存储有等待插入该第一链表的节点,则检测该第一节点是否与该第二链表中的节点发生冲突;
第二触发模块,用于若该第一节点未与该第二链表中的节点发生冲突,则触发该第二插入模块将该第一节点插入到该第一链表中。
可选地,该装置还包括:
第三插入模块,用于若该第一节点与该第二链表中的节点发生冲突,则将该第一节点插入到该第二链表中。
可选地,该装置还包括:
第一删除模块,用于若该数据操作命令已响应完成,则将该第一节点从该第一链表中删除。
可选地,该第二链表的节点用于存储等待插入该第一链表的逻辑地址范围以及当前节点的冲突节点的标识,该当前节点的冲突节点是指该第一链表以及该第二链表的该当前节点之前的节点中与该当前节点发生冲突的节点;
该装置还包括:
第二删除模块,用于对于该第二链表中的任一节点,若该任一节点的冲突节点的标识包括该第一节点的标识,则将该第一节点的标识从该任一节点的冲突节点的标识中删除。
可选地,该装置还包括:
第三检测模块,用于检测该第二链表中是否存在满足节点插入条件的第三节点,该节点插入条件是指不与该第一链表中的节点以及当前节点之前的节点发生冲突;
第四插入模块,用于若该第二链表中存在该第三节点,则将该第三节点插入到该第一链表中,并将该第三节点从该第二链表中删除。
可选地,该第二链表的节点用于存储等待插入该第一链表的逻辑地址范围以及当前节点的冲突节点的标识,该当前节点的冲突节点是指该第一链表以及该第二链表的该当前节点之前的节点中与该当前节点发生冲突的节点;
该第三检测模块用于:
检测该第二链表中是否存在未存储有当前节点的冲突节点的标识的节点;
若该第二链表中存在未存储有当前节点的冲突节点的标识的节点,则将该未存储有当前节点的冲突节点的标识的节点确定为该第三节点。
可选地,该装置还之后,还包括:
第三删除模块,用于对于该第二链表中的任一节点,若该任一节点的冲突节点的标识包括该第三节点,则将该第三节点的标识从该任一节点的冲突节点的标识中删除。
可选地,该数据操作命令为数据读取命令或数据写入命令,该第一链表为跳表skiplist。
本申请实施例中,存储设备维护有节点能够直接存储逻辑地址范围的第一链表,使得存储设备可以直接在第一链表中插入数据操作命令对应的逻辑地址范围,避免了需要将逻辑地址范围进行拆分后再分别插入导致影响存储设备性能的问题,减小了节点插入次数,显著提高了存储设备的读写性能。另外,通过在插入存储有数据操作命令对应的逻辑地址范围的第一节点之前,若检测到第一节点与第一链表中的节点发生冲突,先将等待插入第一链表但与第一链表中的节点发生冲突的节点先保存在第二链表中,使其先进行排队等待,不仅支持逻辑地址范围的冲突检测,避免逻辑地址范围发生冲突,而且保证了逻辑地址范围的操作时序以及数据的正确性。
需要说明的是:上述实施例提供的逻辑地址范围的存储装置在对逻辑地址范围进行存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的逻辑地址范围的存储装置与上述逻辑地址范围的存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本申请实施例提供的一种终端900的结构框图。该终端900可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group AudioLayer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端900还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端900包括有:处理器901和存储器902。存储器902可以为上述实施例所述的存储设备,该存储设备维护有上述第一链表和第二链表。
处理器901可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器901可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器901也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器901可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器901还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器902可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器902还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器902中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器901所执行以实现本申请中方法实施例提供的逻辑地址范围的存储方法。
在一些实施例中,终端900还可选包括有:外围设备接口903和至少一个外围设备。处理器901、存储器902和外围设备接口903之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口903相连。具体地,外围设备包括:射频电路904、触摸显示屏905、摄像头906、音频电路907、定位组件908和电源909中的至少一种。
外围设备接口903可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器901和存储器902。在一些实施例中,处理器901、存储器902和外围设备接口903被集成在同一芯片或电路板上;在一些其他实施例中,处理器901、存储器902和外围设备接口903中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路904用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路904通过电磁信号与通信网络以及其他通信设备进行通信。射频电路904将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路904包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路904可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路904还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏905用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏905是触摸显示屏时,显示屏905还具有采集在显示屏905的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器901进行处理。此时,显示屏905还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏905可以为一个,设置终端900的前面板;在另一些实施例中,显示屏905可以为至少两个,分别设置在终端900的不同表面或呈折叠设计;在再一些实施例中,显示屏905可以是柔性显示屏,设置在终端900的弯曲表面上或折叠面上。甚至,显示屏905还可以设置成非矩形的不规则图形,也即异形屏。显示屏905可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件906用于采集图像或视频。可选地,摄像头组件906包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件906还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路907可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器901进行处理,或者输入至射频电路904以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端900的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器901或射频电路904的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路907还可以包括耳机插孔。
定位组件908用于定位终端900的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件908可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源909用于为终端900中的各个组件进行供电。电源909可以是交流电、直流电、一次性电池或可充电电池。当电源909包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端900还包括有一个或多个传感器910。该一个或多个传感器910包括但不限于:加速度传感器911、陀螺仪传感器912、压力传感器913、指纹传感器914、光学传感器915以及接近传感器916。
加速度传感器911可以检测以终端900建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器911可以用于检测重力加速度在三个坐标轴上的分量。处理器901可以根据加速度传感器911采集的重力加速度信号,控制触摸显示屏905以横向视图或纵向视图进行用户界面的显示。加速度传感器911还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器912可以检测终端900的机体方向及转动角度,陀螺仪传感器912可以与加速度传感器911协同采集用户对终端900的3D动作。处理器901根据陀螺仪传感器912采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器913可以设置在终端900的侧边框和/或触摸显示屏905的下层。当压力传感器913设置在终端900的侧边框时,可以检测用户对终端900的握持信号,由处理器901根据压力传感器913采集的握持信号进行左右手识别或快捷操作。当压力传感器913设置在触摸显示屏905的下层时,由处理器901根据用户对触摸显示屏905的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器914用于采集用户的指纹,由处理器901根据指纹传感器914采集到的指纹识别用户的身份,或者,由指纹传感器914根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器901授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器914可以被设置终端900的正面、背面或侧面。当终端900上设置有物理按键或厂商Logo时,指纹传感器914可以与物理按键或厂商Logo集成在一起。
光学传感器915用于采集环境光强度。在一个实施例中,处理器901可以根据光学传感器915采集的环境光强度,控制触摸显示屏905的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏905的显示亮度;当环境光强度较低时,调低触摸显示屏905的显示亮度。在另一个实施例中,处理器901还可以根据光学传感器915采集的环境光强度,动态调整摄像头组件906的拍摄参数。
接近传感器916,也称距离传感器,通常设置在终端900的前面板。接近传感器916用于采集用户与终端900的正面之间的距离。在一个实施例中,当接近传感器916检测到用户与终端900的正面之间的距离逐渐变小时,由处理器901控制触摸显示屏905从亮屏状态切换为息屏状态;当接近传感器916检测到用户与终端900的正面之间的距离逐渐变大时,由处理器901控制触摸显示屏905从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图9中示出的结构并不构成对终端900的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在另一实施例中,还提供了一种存储设备,该存储设备用于执行上述实施例所述的逻辑地址范围的存储方法。
在另一实施例中,还提供了一种终端,所述终端包括处理器和存储设备,该存储设备用于执行上述实施例所述的逻辑地址范围的存储方法。
在另一实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述实施例所述的逻辑地址范围的存储方法的步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (14)
1.一种逻辑地址范围的存储方法,其特征在于,应用于存储设备中,所述方法包括:
获取主机端发送的数据操作命令;
确定所述数据操作命令对应的第一逻辑地址范围,并构建存储有所述第一逻辑地址范围的第一节点;
若检测到所述第一节点与所述第一链表中的节点发生冲突,则将所述第一节点插入到第二链表中,所述第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,所述第二链表用于存储等待插入所述第一链表的节点,节点发生冲突是指节点存储的逻辑地址范围发生重叠。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一节点插入到第二链表中之前,还包括:
查询所述第一链表中是否存在目标节点,所述目标节点是指存储的逻辑地址范围包含所述第一逻辑地址范围的一个节点,或者存储的逻辑地址范围连续且连续的逻辑地址范围包含所述第一逻辑地址范围的多个连续节点;
若查询到所述第一链表中存在所述目标节点,则确定所述第一节点与所述第一链表中的节点发生冲突。
3.根据权利要求1所述的方法,其特征在于,所述将所述第一节点插入到所述第二链表中,包括:
从所述第一链表和所述第二链表中确定与所述第一节点发生冲突的节点;
将确定的节点的标识作为所述第一节点的冲突节点的标识添加到所述第一节点中;
将添加标识后的第一节点插入到所述第二链表的最后一个节点之后。
4.根据权利要求1所述的方法,其特征在于,所述构建存储有所述第一逻辑地址范围的第一节点之后,还包括:
若检测到所述第一节点未与所述第一链表中的节点发生冲突,则将所述第一节点插入到所述第一链表中。
5.根据权利要求4所述的方法,其特征在于,所述将所述第一节点插入到所述第一链表中之前,还包括:
检测所述第二链表是否已储有等待插入所述第一链表的节点;
若所述第二链表未存储有等待插入所述第一链表的节点,则执行将所述第一节点插入到所述第一链表中的步骤;
若所述第二链表已存储有等待插入所述第一链表的节点,则检测所述第一节点是否与所述第二链表中的节点发生冲突;
若所述第一节点未与所述第二链表中的节点发生冲突,则执行将所述第一节点插入到所述第一链表中的步骤。
6.根据权利要求5所述的方法,其特征在于,所述检测所述第一节点是否与所述第二链表中的节点发生冲突之后,还包括:
若所述第一节点与所述第二链表中的节点发生冲突,则将所述第一节点插入到所述第二链表中。
7.根据权利要求4所述的方法,其特征在于,所述将所述第一节点插入到所述第一链表中之后,还包括:
若所述数据操作命令已响应完成,则将所述第一节点从所述第一链表中删除。
8.如权利要求7所述的方法,其特征在于,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述将所述第一节点从所述第一链表中删除之后,还包括:
对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第一节点的标识,则将所述第一节点的标识从所述任一节点的冲突节点的标识中删除。
9.根据权利要求7所述的方法,其特征在于,所述将所述第一节点从所述第一链表中删除之后,还包括:
检测所述第二链表中是否存在满足节点插入条件的第三节点,所述节点插入条件是指不与所述第一链表中的节点以及当前节点之前的节点发生冲突;
若所述第二链表中存在所述第三节点,则将所述第三节点插入到所述第一链表中,并将所述第三节点从所述第二链表中删除。
10.根据权利要求9所述的方法,其特征在于,所述第二链表的节点用于存储等待插入所述第一链表的逻辑地址范围以及当前节点的冲突节点的标识,所述当前节点的冲突节点是指所述第一链表以及所述第二链表的所述当前节点之前的节点中与所述当前节点发生冲突的节点;
所述检测所述第二链表中是否存在满足节点插入条件的第三节点,包括:
检测所述第二链表中是否存在未存储有当前节点的冲突节点的标识的节点;
若所述第二链表中存在未存储有当前节点的冲突节点的标识的节点,则将所述未存储有当前节点的冲突节点的标识的节点确定为所述第三节点。
11.根据权利要求10所述的方法,其特征在于,所述将所述第三节点从所述第二链表中删除之后,还包括:
对于所述第二链表中的任一节点,若所述任一节点的冲突节点的标识包括所述第三节点的标识,则将所述第三节点的标识从所述任一节点的冲突节点的标识中删除。
12.根据权利要求1-11任一项所述的方法,其特征在于,所述数据操作命令为数据读取命令或数据写入命令,所述第一链表为跳表skiplist。
13.一种逻辑地址范围的存储装置,其特征在于,所述装置包括:
获取模块,用于获取主机端发送的数据操作命令;
第一确定模块,用于确定所述数据操作命令对应的第一逻辑地址范围,并构建存储有所述第一逻辑地址范围的第一节点;
第一插入模块,用于若检测到所述第一节点与所述第一链表中的节点发生冲突,则将所述第一节点插入到第二链表中,所述第一链表中的节点用于存储正在响应的数据操作命令对应的逻辑地址范围,所述第二链表用于存储等待插入所述第一链表的节点,节点发生冲突是指节点存储的逻辑地址范围发生重叠。
14.一种存储设备,其特征在于,所述存储设备用于执行上述权利要求1-12任一项所述的逻辑地址范围的存储方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910305273.XA CN111831575A (zh) | 2019-04-16 | 2019-04-16 | 逻辑地址范围的存储方法、装置及存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910305273.XA CN111831575A (zh) | 2019-04-16 | 2019-04-16 | 逻辑地址范围的存储方法、装置及存储设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111831575A true CN111831575A (zh) | 2020-10-27 |
Family
ID=72915666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910305273.XA Pending CN111831575A (zh) | 2019-04-16 | 2019-04-16 | 逻辑地址范围的存储方法、装置及存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831575A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047902A1 (en) * | 2004-08-24 | 2006-03-02 | Ron Passerini | Processing storage-related I/O requests using binary tree data structures |
US20130275656A1 (en) * | 2012-04-17 | 2013-10-17 | Fusion-Io, Inc. | Apparatus, system, and method for key-value pool identifier encoding |
CN105808155A (zh) * | 2014-12-31 | 2016-07-27 | 北京神州云科数据技术有限公司 | 基于双控制器的读写锁方法及装置 |
CN106649131A (zh) * | 2016-12-29 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种固态硬盘及其逻辑地址范围冲突监控方法、系统 |
CN107273046A (zh) * | 2017-06-06 | 2017-10-20 | 华中科技大学 | 一种基于固态盘阵列的数据处理方法及系统 |
-
2019
- 2019-04-16 CN CN201910305273.XA patent/CN111831575A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047902A1 (en) * | 2004-08-24 | 2006-03-02 | Ron Passerini | Processing storage-related I/O requests using binary tree data structures |
US20130275656A1 (en) * | 2012-04-17 | 2013-10-17 | Fusion-Io, Inc. | Apparatus, system, and method for key-value pool identifier encoding |
CN105808155A (zh) * | 2014-12-31 | 2016-07-27 | 北京神州云科数据技术有限公司 | 基于双控制器的读写锁方法及装置 |
CN106649131A (zh) * | 2016-12-29 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种固态硬盘及其逻辑地址范围冲突监控方法、系统 |
CN107273046A (zh) * | 2017-06-06 | 2017-10-20 | 华中科技大学 | 一种基于固态盘阵列的数据处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11200022B2 (en) | Method and apparatus of playing audio data | |
CN110602321B (zh) | 应用程序切换方法、装置、电子装置及存储介质 | |
CN108132790B (zh) | 检测无用代码的方法、装置及计算机存储介质 | |
CN111694834A (zh) | 图数据的入库方法、装置、设备及可读存储介质 | |
CN110288689B (zh) | 对电子地图进行渲染的方法和装置 | |
CN110968815B (zh) | 页面刷新方法、装置、终端及存储介质 | |
CN112749590B (zh) | 目标检测方法、装置、计算机设备和计算机可读存储介质 | |
CN111813322B (zh) | 存储池的创建方法、装置、设备及存储介质 | |
CN111510482A (zh) | 失败网络请求的确定方法、装置及计算机存储介质 | |
CN113408989B (zh) | 汽车数据的比对方法、装置及计算机存储介质 | |
CN112181915A (zh) | 执行业务的方法、装置、终端和存储介质 | |
CN112669884B (zh) | 音频数据处理方法、装置、设备及存储介质 | |
CN115344537A (zh) | 存储空间分配的方法、装置、文件系统和存储介质 | |
CN111711841B (zh) | 图像帧播放方法、装置、终端及存储介质 | |
CN114282494A (zh) | 信息显示方法、装置、电子设备及存储介质 | |
CN110032421B (zh) | 内存中图集的管理方法、装置、终端及存储介质 | |
CN110851435B (zh) | 一种存储数据的方法及装置 | |
CN108733831B (zh) | 一种对词库进行处理的方法及装置 | |
CN113268234A (zh) | 页面生成方法、装置、终端和存储介质 | |
CN111831575A (zh) | 逻辑地址范围的存储方法、装置及存储设备 | |
CN110471613B (zh) | 存储数据的方法、读取数据的方法、装置及系统 | |
CN110942426A (zh) | 图像处理的方法、装置、计算机设备和存储介质 | |
CN111190751A (zh) | 基于歌单的任务处理方法、装置、计算机设备及存储介质 | |
CN111651136B (zh) | Fifo存储器、电子芯片及终端 | |
CN115379274B (zh) | 基于图片的互动方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201027 |
|
RJ01 | Rejection of invention patent application after publication |