一种MLC闪存读写方法转让专利

申请号 : CN201811174482.7

文献号 : CN109471594B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯丹童薇刘景宁冯雅植李帅徐洁

申请人 : 华中科技大学

摘要 :

本发明公开了一种MLC闪存读写方法,属于闪存技术领域。本发明使用先进MLC闪存芯片提供的高级命令,即SLC模式,开发闪存页的重复编程,在写入数据时,SLC模式操作处理器控制在不同环境下调用不同的接口并规定了数据写入的操作步骤,同时记录数据写入位置,以确保数据不因为错误的写入过程而崩溃;在读出数据时,SLC模式操作处理器通过查找数据写入位置,以及当前系统状态,明确数据读出的步骤,以保证数据可以正确被读出;本发明还进一步地提供了数据碎片化管理方法,数据碎片管理模块会决定数据写入时的分配算法并定时地整理碎片数据,由此提升系统整体性能。

权利要求 :

1.一种MLC闪存读写方法,其特征在于,所述方法具体包括以下步骤:(1)从请求队列中取出下一条请求进行处理,先判断当前空闲的存储空间是否达到预设的垃圾回收阈值,是则执行步骤(2);否则执行步骤(3);

(2)先对待回收物理块中逻辑地址相关联的有效数据进行迁移整理,再对该物理块进行回收;

(3)判断合并队列是否不为空,是则转入步骤(4);否则转入步骤(5);

(4)依据合并队列执行合并操作;

(5)判断当前请求的类型,若是写请求,进入步骤(6);若是读请求,进入步骤(9);

(6)根据写请求的逻辑地址将写请求划分若干写子请求,并判断各个子请求大小,若其大小为若干子页大小,则转入步骤(7);若其大小等于一个物理页大小,则转入步骤(8);

(7)使用闪存的SLC模式,同时结合请求逻辑地址是否为读密集区域,以及逻辑地址相关联的情况,执行数据的子页写入操作;转入步骤(11);

(8)执行页写入操作,转入步骤(11);

(9)执行闪存页读取操作,并根据读请求逻辑地址是否为读密集区域进行数据整理的合并操作;

(10)记录和更新读密集区域的判定参数;

(11)将执行完成的请求放入提交队列,并返回步骤(1)。

2.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(2)具体为:(21)选择空闲空间不足的晶圆中无效页数最多的物理块作为待垃圾回收的目标块,再遍历目标块中每个物理页,转入步骤(22);

(22)遍历当前物理页中所有子页,若所有子页都是有效子页,则查找一个新的物理页作为目标地址,再转入步骤(26);否则转入步骤(23);

(23)判断当前物理子页和下一个物理子页是否都是有效子页且逻辑地址连续,是则下一个物理子页更新为当前物理子页,继续执行步骤(23);否则转入步骤(24);

(24)查找当前有效子页逻辑地址对应的物理页中,是否有足够的空闲空间存放这些连续的有效子页,若是则将该物理页作为目标地址,转入步骤(26);否则转入步骤(25);

(25)查找一个新的物理页作为目标地址,并转入步骤(26);

(26)将有效子页中有效数据迁移到目标地址中,若目标块所有物理页都遍历完则转入步骤(27);否则返回步骤(22);

(27)对目标块执行垃圾回收操,结束。

3.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(4)具体包括:(41)判断当前执行的合并请求地址所在通道是否空闲,若是则转入步骤(42);否则结束步骤(4);

(42)根据MLC活跃指针找到下一个MLC空闲页作为目标地址,并转入步骤(43);

(43)将合并的数据迁移到新的目标地址中。

4.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(7)具体包括:(71)判断子页写请求的逻辑地址是否为读密集区域,若是则转入步骤(711);否则转入步骤(72);

(72)查找子页写请求的逻辑地址所在的物理页中是否还有空闲子页响应当前子请求,若是则转入步骤(73);否则转入步骤(74);

(73)选择该物理页地址作为操作目标地址,并转入步骤(75);

(74)根据SLC活跃指针找到下一个SLC空闲页作为操作目标地址,并转入步骤(75);

(75)判断选中的操作目标地址所在的物理块是否工作在SLC模式下,若是,则转入步骤(76);否则转入步骤(77);

(76)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中,并转入步骤(710);

(77)变换该物理块所在晶圆工作模式为SLC模式,并转入步骤(78);

(78)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中并转入步骤(79);

(79)还原该物理块所在晶圆工作模式为默认模式,即MLC模式,并转入步骤(710);

(710)将该条写请求对应的逻辑地址的读次数清0,并转入步骤(713);

(711)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(712);

(712)执行整页写入操作,并转入步骤(713);

(713)子页写入操作执行结束。

5.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(8)具体为:(81)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(82);

(82)执行整页写入操作,并转入步骤(83);

(83)页写入操作执行结束。

6.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(9)具体为:(91)根据请求的逻辑地址,在映射表中找到对应的物理地址将数据读出,并统计实际需要读出的物理页数目,并转入步骤(92);

(92)判断实际需要读出的物理页数目是否多于读请求的逻辑页数目,是则转入步骤(93);否则转入步骤(95);

(93)判断该逻辑地址是否为读密集区域,是则转入步骤(94);否则转入步骤(95);

(94)将该逻辑地址加入合并队列中,并转入步骤(95);

(95)读请求操作执行结束。

7.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,所述步骤(10)具体为:(101)判断此次读请求的逻辑地址的读次数是否为0,是则转入步骤(102);否则转入步骤(103);

(102)将该逻辑地址的第一次读时间更新为当前时间,并转入步骤(104);

(103)将该逻辑地址的最后一次读时间更新为当前时间,并转入步骤(104);

(104)将该逻辑地址的读次数统计加1,并转入步骤(105);

(105)判断该逻辑地址的读次数是否大于预设的读次数阈值,若是,则转入步骤(106);

若否,则转入步骤(107);

(106)计算读密集区域的平均读时间间隔,累加读密集区域总的读次数,并转入步骤(107);

(107)将读密集区域总的读次数加1,并判断总的读次数是否大于等于统计预设次数,是则转入步骤(108);否则转入步骤(1010);

(108)使用新的平均读时间间隔替换之前使用的读时间间隔,并转入步骤(109);

(109)将读密集区域总的读次数清0;

(1010)结束。

8.根据权利要求1所述的一种MLC闪存读写方法,其特征在于,判定逻辑地址是否为读密集区域具体为:将读请求的到达时间减去读请求逻辑地址对应的记录中上一次读操作时间,得到读请求时间间隔,比较读请求时间间隔和读密集区域的平均读时间间隔,若小于等于平均读时间间隔则是读密集区域;若大于平均读时间间隔则不是读密集区域。

9.根据权利要求7中所述的一种MLC闪存读写方法,其特征在于,所述计算读密集区域的平均读时间间隔,具体为:若当前逻辑地址读次数大于预设的读次数阈值,则认定为读密集区域,并通过本次读请求逻辑地址对应的记录中的读次数,第一次读时间,当前读时间,以及总的读密集区域的平均读时间间隔和总的密集区域读次数计算得到新的读密集区域的平均读时间间隔。

说明书 :

一种MLC闪存读写方法

技术领域

[0001] 本发明属于闪存技术领域,更具体地,涉及一种MLC闪存读写方法。

背景技术

[0002] 随着闪存制造工艺的进步,NAND型闪存芯片的存储密度越来越高,存储容量越来越大。特别是近年来发展的3D型闪存可以持续增加存储密度。但是,伴随闪存存储容量增大,同时带来了“大块”的问题。“大块”意味着一个闪存块(擦除操作的基本单位)的容量过大,其表现为要么一个闪存块中闪存页的数目过大,要么闪存块中的闪存页容量过大。表1展示了NAND型闪存的关键参数的发展趋势:
[0003]
[0004] 表1
[0005] 作为闪存读写的基本单位,闪存页过大会造成存储空间利用率不高和传输浪费的问题,进而导致闪存性能降低。造成这些问题的原因是因为上层文件系统的粒度和下层读写基本单位的粒度不匹配。常见文件系统的基本单位是文件系统块(File System Block,简称FSB),其大小基本固定,通常都采用4KB大小的管理粒度。闪存页的容量已经由早先的512字节,增加到4KB,8BK,现在16KB页大小已经很普遍了,未来还可能增加到32KB甚至更大。闪存页的容量已经达到文件系统块的数倍。以16KB的闪存页为例,4个4KB的文件系统块才能填满一个闪存页。如果需要更新一个闪存页中4KB的数据,需要先将整个闪存页中16KB的数据读出,与4KB的更新数据合并后,再写入一个新的闪存页中。造成了大量传输数据和写入数据的浪费。解决这一问题的传统方法是使用一个写缓存来合并写入的小请求,这个缓存把小请求合并成页大小的请求再发下去执行。但是,这种方法的局限是很明显的。首先其效果很大程度上取决于写缓存的容量,一个小容量的缓存带来的效果是不明显的;其次,某一种写缓存策略通常只对某一种类型的负载有好的效果,而对其他类型的负载则不显著。
[0006] 闪存根据每个单元存储的比特位数,可分为每个单元存储一位比特数据的单层单元(Single-Level Cell,简称SLC)和每个单元存储多位比特数据的多层单元(Multi-Level Cell,简称MLC)。需要指出的是,单层单元和多层单元开发闪存页重复编程的方法是不同的。由于MLC每个单元存储更多比特信息,因此拥有比起SLC更大的容量,受到更多的商用青睐,同时开发其重复编程也更加困难。MLC闪存中一个单元存储多位数据,假设存储2比特数据,就需要4个不同的状态来表示最终的数据。这4种状态之间的转化受限于芯片自身的特性,不像“一次写入存储器”那样可以单向地转换到任意状态,这也是MLC闪存无法直接进行闪存页的重复编程的原因。然而,最近先进的MLC闪存芯片都支持将闪存在默认模式(MLC模式)和SLC模式下进行切换。SLC模式提供了更短的编程/读取延迟和同样的擦除时间。更重要的是,切换到SLC模式后,开发者可以更好的开发闪存的可重复编程特性,实现MLC闪存的多次子页写。
[0007] 使用SLC模式开发MLC闪存的多次子页写,还需要在软件管理中做很多工作才能保证数据的可靠性和系统的高性能。不正确的调用SLC模式或者将MLC模式和SLC模式混用,会造成数据崩溃,丢失数据。另外,子页的分配带来了数据碎片化的问题,这将在读密集型负载中带来雪崩效应,严重影响系统性能。

发明内容

[0008] 针对现有技术的以上缺陷或改进需求,本发明提供了一种MLC闪存读写方法,其目的在于利用闪存页的可重复编程特性,将一个闪存页划分成为若干个闪存子页,每次写入一个或多个闪存子页,进而实现多次向同一个闪存页写入小数据直至填满整个页,最大化大容量闪存页的利用率,有效延长了闪存的使用寿命,提升了系统性能。
[0009] 为实现上述目的,本发明提供了一种MLC闪存读写方法,所述方法具体包括:
[0010] (1)从请求队列中取出下一条请求进行处理,先判断当前空闲的存储空间是否达到预设的垃圾回收阈值,是则执行步骤(2);否则执行步骤(3);
[0011] (2)先对待回收物理块中逻辑地址相关联的有效数据进行迁移整理,再对该物理块进行回收;
[0012] (3)判断合并队列是否不为空,是则转入步骤(4);否则转入步骤(5);
[0013] (4)依据合并队列执行合并操作;
[0014] (5)判断当前请求的类型,若是写请求,进入步骤(6);若是读请求,进入步骤(9);
[0015] (6)根据写请求的逻辑地址将写请求划分若干写子请求,并判断各个子请求大小,若其大小为若干子页大小,则转入步骤(7);若其大小等于一个物理页大小,则转入步骤(8);
[0016] (7)使用闪存的SLC模式,同时结合请求逻辑地址是否为读密集区域,以及逻辑地址相关联的情况,执行数据的子页写入操作;转入步骤(11);
[0017] (8)执行页写入操作,转入步骤(11);
[0018] (9)执行闪存页读取操作,并根据读请求逻辑地址是否为读密集区域进行数据整理的合并操作;
[0019] (10)记录和更新读密集区域的判定参数;
[0020] (11)将执行完成的请求放入提交队列,并返回步骤(1)。
[0021] 进一步地,所述步骤(2)具体为:
[0022] (21)选择空闲空间不足的晶圆中无效页数最多的物理块作为待垃圾回收的目标块,再遍历目标块中每个物理页,转入步骤(22);
[0023] (22)遍历当前物理页中所有子页,若所有子页都是有效子页,则查找一个新的物理页作为目标地址,再转入步骤(26);否则转入步骤(23);
[0024] (23)判断当前物理子页和下一个物理子页是否都是有效子页且逻辑地址连续,是则下一个物理子页更新为当前物理子页,继续执行步骤(23);否则转入步骤(24);
[0025] (24)查找当前有效子页逻辑地址对应的物理页中,是否有足够的空闲空间存放这些连续的有效子页,若是则将该物理页作为目标地址,转入步骤(26);否则转入步骤(25);
[0026] (25)查找一个新的物理页作为目标地址,并转入步骤(26);
[0027] (26)将有效子页中有效数据迁移到目标地址中,若目标块所有物理页都遍历完则转入步骤(27);否则返回步骤(22);
[0028] (27)对目标块执行垃圾回收操,结束。
[0029] 进一步地,所述步骤(4)具体包括:
[0030] (41)判断当前执行的合并请求地址所在通道是否空闲,若是则转入步骤(42);否则结束步骤(4);
[0031] (42)根据MLC活跃指针找到下一个MLC空闲页作为目标地址,并转入步骤(43);
[0032] (43)将合并的数据迁移到新的目标地址中。
[0033] 进一步地,所述步骤(7)具体包括:
[0034] (71)判断子页写请求的逻辑地址是否为读密集区域,若是则转入步骤(711);否则转入步骤(72);
[0035] (72)查找子页写请求的逻辑地址所在的物理页中是否还有空闲子页响应当前子请求,若是则转入步骤(73);否则转入步骤(74);
[0036] (73)选择该物理页地址作为操作目标地址,并转入步骤(75);
[0037] (74)根据SLC活跃指针找到下一个SLC空闲页作为操作目标地址,并转入步骤(75);
[0038] (75)判断选中的操作目标地址所在的物理块是否工作在SLC模式下,若是,则转入步骤(76);否则转入步骤(77);
[0039] (76)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中,并转入步骤(710);
[0040] (77)变换该物理块所在晶圆工作模式为SLC模式,并转入步骤(78);
[0041] (78)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中并转入步骤(79);
[0042] (79)还原该物理块所在晶圆工作模式为默认模式,即MLC模式,并转入步骤(710);
[0043] (710)将该条写请求对应的逻辑地址的读次数清0,并转入步骤(713);
[0044] (711)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(712);
[0045] (712)执行整页写入操作,并转入步骤(713);
[0046] (713)子页写入操作执行结束。
[0047] 进一步地,所述步骤(8)具体为:
[0048] (81)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(82);
[0049] (82)执行整页写入操作,并转入步骤(83);
[0050] (83)页写入操作执行结束。
[0051] 进一步地,所述步骤(9)具体为:
[0052] (91)根据请求的逻辑地址,在映射表中找到对应的物理地址将数据读出,并统计实际需要读出的物理页数目,并转入步骤(92);
[0053] (92)判断实际需要读出的物理页数目是否多于读请求的逻辑页数目,是则转入步骤(93);否则转入步骤(95);
[0054] (93)判断该逻辑地址是否为读密集区域,是则转入步骤(94);否则转入步骤(95);
[0055] (94)将该逻辑地址加入合并队列中,并转入步骤(95);
[0056] (95)读请求操作执行结束。
[0057] 进一步地,所述步骤(10)具体为:
[0058] (101)判断此次读请求的逻辑地址的读次数是否为0,是则转入步骤(102);否则转入步骤(103);
[0059] (102)将该逻辑地址的第一次读时间更新为当前时间,并转入步骤(104);
[0060] (103)将该逻辑地址的最后一次读时间更新为当前时间,并转入步骤(104);
[0061] (104)将该逻辑地址的读次数统计加1,并转入步骤(105);
[0062] (105)判断该逻辑地址的读次数是否大于预设的读次数阈值,若是,则转入步骤(106);若否,则转入步骤(107);
[0063] (106)计算读密集区域的平均读时间间隔,累加读密集区域总的读次数,并转入步骤(107);
[0064] (107)将读密集区域总的读次数加1,并判断总的读次数是否大于等于统计预设次数,是则转入步骤(108);否则转入步骤(1010);
[0065] (108)使用新的平均读时间间隔替换之前使用的读时间间隔,并转入步骤(109);
[0066] (109)将读密集区域总的读次数清0;
[0067] (1010)结束。
[0068] 进一步地,所述判定逻辑地址是否为读密集区域具体为:
[0069] 将读请求的到达时间减去读请求逻辑地址对应的记录中上一次读操作时间,得到读请求时间间隔,比较读请求时间间隔和读密集区域的平均读时间间隔,若小于等于平均读时间间隔则是读密集区域;若大于平均读时间间隔则不是读密集区域。
[0070] 进一步地,所述计算读密集区域的平均读时间间隔,具体为:
[0071] 若当前逻辑地址读次数大于预设的读次数阈值,则认定该区域为读密集区域,并通过本次读请求逻辑地址对应的记录中的读次数,第一次读时间,当前读时间,以及总的读密集区域的平均读时间间隔和总的密集区域读次数计算得到新的读密集区域的平均读时间间隔。
[0072] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下技术特征及有益效果:
[0073] (1)本发明提出了一种MLC闪存多次子页写的方法,使原本在擦除间只能写入一次的物理页能够进行多次小粒度数据的写入。这一方面增加了大容量闪存空间的利用率,减小了写放大,这有效延长了闪存的使用寿命;另一方面,节省了传输开销和垃圾回收开销,有效的提高了大容量闪存页在响应小请求时的效率,提升了系统性能;
[0074] (2)本发明提出了一种由于子页分配产生数据碎片化的管理方法,有效提升了在执行读密集型负载时的读响应时间,进而系统整体的性能才能得以保证,碎片管理包括了分配时的判定分配机制和数据合并操作,从这两个方面管理数据碎片化;
[0075] (3)本发明提供了一种读密集区域判定预测的方法,使系统能够以较小的代价预测不同负载中读密集区域的平均读间隔时间,为系统中的碎片管理提供有力的判定依据;
[0076] (4)本发明在垃圾回收时,进行了逻辑相关联地数据迁移方案,使逻辑相关联的数据能够在回收时进行有效整理,减少了数据碎片化,从而提升系统性能。

附图说明

[0077] 图1为本发明方法的总体流程图;
[0078] 图2为本发明实施垃圾回收操作的执行流程图;
[0079] 图3为本发明实施合并操作的执行流程图;
[0080] 图4为本发明实施子页写操作的一个例子;
[0081] 图5为本发明实施读密集区域预测的执行流程图;
[0082] 图6为本发明实施中SLC模式块生命周期示例图。

具体实施方式

[0083] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0084] 3D MLC闪存芯片的读写操作粒度为闪存页,擦除操作粒度为闪存块。在本发明实施例采用的3D MLC芯片中,转换芯片中晶圆/物理块到SLC模式的命令字和地址字有两种方法,分别为:D5h-91h-00h-01h-00h-00h转换一个目标晶圆到SLC模式;Dah-60h-address*3-D0h转换一个目标物理块到SLC模式。转换芯片中晶圆/物理块到MLC模式的命令字和地址字有两种方法,分别为:D5h-91h-02h-01h-00h-00h转换一个目标晶圆到SLC模式;DFh-60h-address*3-D0h转换一个目标物理块到MLC模式。
[0085] 本发明提供了一种MLC闪存多次子页写入和碎片优化的闪存转换层管理方法,如图1所示,首先接收文件系统下发的IO请求,并建立请求队列,这里建立队列的方法采用一般性的技术,因此不做进一步的赘述;然后只要队列不为空,就从队列中取出下一条请求进行处理,具体处理实施步骤如下:
[0086] (1)从请求队列中取出下一条请求进行处理,判断当前空闲的存储空间是否达到垃圾回收的阈值,若达到阈值,则转入步骤(2);否则,转入步骤(3);这里垃圾回收的阈值的取值,不同厂商的设定通常有所不同,根据设备的设计要求,对普通用户级设备阈值通常较低,对企业级设备阈值会高一些。我们在这里的设计是设备容量的20%作为阈值。
[0087] (2)执行垃圾回收操作,并转入步骤(3);
[0088] 在本实施例中,执行垃圾回收操作如图2所示,包括如下步骤:
[0089] (21)选择空闲空间不足的晶圆中无效页数最多的物理块作为待垃圾回收的目标块,再遍历该物理块中每个物理页,转入步骤(22);
[0090] (22)判断当前物理页中是否所有子页全有效,若是,则直接转入步骤(26);若否,则转入步骤(23);
[0091] (23)判断当前物理子页和下一个物理子页是否都是有效子页且逻辑地址连续,若是,则下一个物理子页更新为当前物理子页,继续执行步骤(23);若否,则转入步骤(24);
[0092] (24)查找当前有效页逻辑地址对应的物理页中,是否有足够的空闲空间存放这些连续的有效子页,若是,则将该物理页作为目标地址,转入步骤(26);若否,则转入步骤(25);
[0093] (25)查找一个新的物理页作为目标地址,并转入步骤(26);
[0094] (26)将有效子页中效数据迁移到目标地址中,并转入步骤(27);
[0095] (27)垃圾回收操作执行结束;
[0096] (3)判断合并列表中是否有合并请求,若有,则转入步骤(4);否则,转入步骤(5);
[0097] (4)执行合并操作,并转入步骤(5);
[0098] 在本实施例中,执行合并操作如图3所示,包括如下步骤:
[0099] (41)判断当前执行的合并请求地址所在通道是否空闲,若是,则转入步骤(42);若结束步骤(4);
[0100] (42)根据MLC活跃指针找到下一个MLC空闲页作为目标地址,并转入步骤(43);
[0101] (43)将合并的数据迁移到新的目标地址中;
[0102] (5)判断当前请求类型,若为写请求,则转入步骤(6);若为读请求,则转入(9);
[0103] (6)根据写请求的逻辑地址将写请求划分若干写子请求,并判断子请求大小,若为若干子页大小的子页请求,则转入步骤(7);若为一个整物理页大小的页请求,则转入步骤(8);
[0104] (7)执行子页写入操作流程,并转入步骤(11);
[0105] 在本实施例中,执行子页写入操作包括如下步骤:
[0106] (71)将该请求的到达时间减去该请求逻辑地址对应记录的上一次读操作时间,得到读请求时间间隔。通过比较该读请求时间间隔和读密集区域的平均读时间间隔,判断子页写请求的逻辑地址是否为读密集型区域,小于等于平均时间间隔则说明是读密集型的,大于平均时间间隔则不是。若是,转入步骤(711);若否,转入步骤(72);
[0107] (72)在映射表中查找子页写请求的逻辑地址所在的物理页中是否还有空闲子页可以响应当前子请求,若是,则转入步骤(73);若否,则转入步骤(74);
[0108] (73)选择该物理页地址作为操作目标地址,并转入步骤(75);
[0109] (74)根据SLC活跃指针找到下一个SLC空闲页作为操作目标地址,并转入步骤(75);
[0110] (75)判断选中的操作目标地址所在的物理块是否工作在SLC模式下,若是,则转入步骤(76);若否,则转入步骤(77);
[0111] (76)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中,如图4所示,并转入步骤(710);
[0112] (77)变换该物理块所在晶圆工作模式为SLC模式,并转入步骤(78);
[0113] (78)写入的子页数据和页内偏移作为有效数据,物理页的其余位置填入全1作为掩码,组织成一个完整物理页,然后写入物理介质中,如图4所示,并转入步骤(79);
[0114] (79)还原该物理块所在晶圆工作模式为默认模式,即MLC模式,并转入步骤(710);
[0115] (710)将该条写请求对应的逻辑地址的读次数记录清0,并转入步骤(713);
[0116] (711)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(712);
[0117] (712)执行整页写入操作,并转入步骤(713);
[0118] (713)子页写入操作执行结束;
[0119] 值得注意的是,在图4中,由于闪存写入的基本单位是物理页,所以就算进行子页写入,仍然需要进行封装,即将子页信息和掩码一起封装成一个完成的物理页,进行写入。在图4中,展现了多个小请求进行3次子页写,写入同一个物理页的例子。找到物理页中空闲的子页,然后将有效子页数据填入那个空闲物理页所在的偏移,然后其他地方填入掩码
0xFF,并写入物理介质。在一次写入之后,除了子页部分的物理介质变为有效数据,其余物理空间仍然是空闲子页可以被再次写入其他数据。直到所有空间都被利用。
[0120] (8)执行页写入操作流程,并转入步骤(11);
[0121] 在本实施例中,执行页写入操作包括如下步骤:
[0122] (81)根据MLC活跃指针找到下一个MLC空闲页作为操作地址,并转入步骤(82);
[0123] (82)执行整页写入操作,并转入步骤(83);
[0124] (83)页写入操作执行结束;
[0125] (9)执行读请求,并转入步骤(10);
[0126] 在本实施例中,执行读请求包括如下步骤:
[0127] (91)根据请求的逻辑地址,在映射表中找到对应的物理地址将数据读出,并统计实际需要读出的物理页数目,并转入步骤(92);
[0128] (92)判断实际需要读出的物理页数目是否多于读请求的逻辑页数目,若是,则转入步骤(93);若否,则转入步骤(95);
[0129] (93)判断个逻辑地址是否为读密集型区域,若是,则转入步骤(94);若否,则转入步骤(95);
[0130] (94)将该逻辑地址加入合并队列中,并转入步骤(95);
[0131] (95)读请求操作执行结束;
[0132] (10)记录和计算读密集型区域判定参数,并更新读密集型区域的平均读间隔时间,并转入步骤(11);
[0133] 在本实施例中,记录和计算读密集型区域判定参数,并更新读密集型区域的平均读间隔时间如图5所示,包括如下步骤:
[0134] (101)判断此次读请求的逻辑地址的读次数是否为0,若是,则转入步骤(102);若否,则转入步骤(103);
[0135] (102)将该逻辑地址的第一次读时间更新为当前时间,并转入步骤(104);
[0136] (103)将该逻辑地址的最后一次读时间更新为当前时间,并转入步骤(104);
[0137] (104)将该逻辑地址的读次数统计加1,并转入步骤(105);
[0138] (105)判断该逻辑地址读次数是否大于预设的“读次数阈值”,若是,则转入步骤(106);若否,则转入步骤(107);
[0139] (106)计算读密集区域的平均读时间间隔,累加读密集区域总的读次数,并转入步骤(107);
[0140] (107)将总读请求次数加1,并判断总读请求次数是否大于等于统计预设次数,若是,则转入步骤(108);若否,则转入步骤(1010);
[0141] 根据系统对性能要求和计算开销的平衡设定,本实施方案中统计预设次数为3000次。对统计要求高的系统可减少这个次数;对想计算开销少的系统可增加这个次数。
[0142] (108)使用新的平均读时间间隔替换之前使用的时间间隔,并转入步骤(109);
[0143] (109)将统计部分的时间间隔、读请求次数清0,并转入步骤(1010);
[0144] (1010)记录和计算“读密集型”区域执行结束,并转入步骤(11);
[0145] (11)将执行完成的请求放入提交队列,并返回步骤(1)。
[0146] 另外,引入SLC模式后,一个物理块的生命周期相比于传统设计是不同的。图6展示了一个SLC块的生命周期示例。在设备上电启动后,一个空闲物理块处于默认模式,即MLC模式。当需要用到一个物理块作为SLC模式块响应子页请求时,找到一个未使用过的物理块,使用擦除方法转换该物理块到SLC模式下,然后就可以按顺序使用其中的闪存页了。使用方法在图4中展示。若在关机前,该物理块就被选中成为垃圾回收目标块,则将该物理块擦除,重新回到默认模式下的空闲块状态。若该物理块在使用器件,经历了设备的关机重启,该物理块会因为断电,恢复到默认模式下。再次开机启动后,由于该块使用前后的工作模式不同,是不能直接写入和读出数据的,否则会导致数据崩溃。因此再次访问该块中数据,需要先设置所在晶圆为SLC模式,进行SLC数据访问,再设置所在晶圆为MLC模式。这三步应当被系统视作一个原子操作执行。在使用周期最后,再进行垃圾回收。
[0147] 以上内容本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。