CN100353341C - 可循序写入数据至闪存中的系统及其方法 - Google Patents

可循序写入数据至闪存中的系统及其方法 Download PDF

Info

Publication number
CN100353341C
CN100353341C CNB200410042088XA CN200410042088A CN100353341C CN 100353341 C CN100353341 C CN 100353341C CN B200410042088X A CNB200410042088X A CN B200410042088XA CN 200410042088 A CN200410042088 A CN 200410042088A CN 100353341 C CN100353341 C CN 100353341C
Authority
CN
China
Prior art keywords
piece
solid block
enlivens
physical page
page
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.)
Expired - Lifetime
Application number
CNB200410042088XA
Other languages
English (en)
Other versions
CN1690983A (zh
Inventor
傅洪勋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
MediaTek Inc
Original Assignee
MediaTek Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by MediaTek Inc filed Critical MediaTek Inc
Priority to CNB200410042088XA priority Critical patent/CN100353341C/zh
Publication of CN1690983A publication Critical patent/CN1690983A/zh
Application granted granted Critical
Publication of CN100353341C publication Critical patent/CN100353341C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Memory System (AREA)

Abstract

一种可循序写入数据至闪存中的系统及其方法,应用于一电子装置中。该系统包含:至少一虚拟块,其中每一该虚拟块包含多个虚拟页,并且具有一虚拟块地址,而每一该虚拟页具有一虚拟页偏差值;至少一实体块,其中每一该实体块包含多个实体页,并且具有一实体块地址,而每一该实体页具有一实体页偏差值;以及至少一活跃块,其中每一该活跃块包含多个实体页,并且具有一活跃块地址,而每一该实体页具有一实体页偏差值。其中每一该虚拟块系映射于一实体块。在该相映射的虚拟块与实体块中,每一该虚拟页映射于每一该实体页,而在该相映射的虚拟页与实体页中,该虚拟页偏差值相同于该实体页偏差值。

Description

可循序写入数据至闪存中的系统及其方法
技术领域
本发明涉及一种可循序写入数据至闪存中的系统及其方法,特别是涉及一种具有良好的数据更新效率以及读取效率的可循序写入数据至闪存中的系统及其方法。
背景技术
相较于传统的磁性储存装置(magnetic storage device)闪存(flashmemory)具有较为便宜以及要求较少功率的优点。然而,在闪存中,无法重写一块先前已经写过的区域。换言之,在重写之前,并且先将已经存在的数据抹除之后,才能够进行写入的操作。再者,闪存具有抹除写入次数的上限。换句话说,如果对某个区域进行抹除与写入的操作超过一定的次数,例如100K,那么那个区域就会报废(broken),也就是无法再利用那个区域来进行数据的存放。此外,闪存本身可能会包含一些坏掉的块(bad blocks),这些坏掉的块有些是出厂时就已经存在的,有些则是在后来的使用过程中产生的。因此,一般而言,闪存的存取是通过一个闪存文件系统(Flash FileSystem,FFS)来进行,以使得写入与抹除的操作可以分散执行于不同的区域,以减少某个特定区域因为过度使用而报废的可能性,也使得系统可以避开,而不去使用坏掉的块。
此种文件系统是通过一个映射表(Mapping Table),将逻辑地址转换为闪存上的实体地址,再将数据写入该实体地址所指向的块。由于系统上层,如FAT,对于文件系统的存取往往是随机而非循序的,因此造成数据也是随机地写入闪存中。然而,近几年来,为了增加闪存上的数据可靠度,闪存大厂,如Toshiba,宣布在其新的NAND型态闪存的实体块内只允许循序地写入数据。如此一来,以往的闪存文件系统便无法满足此种需求。
请参考图1。图1为藉由映射表10将虚拟块(virtual block)12对应到实体块(physical block)14的示意图。如图所示,闪存具有多个实体块14(block0~blockn),而每一实体块14则包含多个实体页(physical page)16。其中,在闪存中,基本的抹除单元为一个实体块。换言之,如果要进行数据抹除的操作,就必须将整个实体块中的数据全部抹除。此外,在闪存中,每一页是基本的写入单位。换言之,数据写入的操作是藉由一页一页写入数据来进行的。
已知闪存文件系统(FFS)是利用块映射(Block-Mapping)的方式,来将虚拟块对应于实体块。换言之,其映射的基本单位为一个块。如图1所示,虚拟块12的数量等同于闪存中实体块14的数量。每一虚拟块12均具有其所对应的虚拟块地址,而每一实体块14也均具有其所对应的实体块地址。请参考图2。图2为映射表10的示意图。映射表10具有多个映射数据18。每一映射数据18存放有一虚拟块地址以及一实体块地址,以说明每一虚拟块12与实体块14的映射关系。如图所示,虚拟块地址为1的虚拟块映射于实体块地址为81的实体块。由于闪存中,有些实体块可能是坏掉的,因此实际上可用的实体块的数量可能小于虚拟块的数量。此外,由于必须避免某个特定的实体块频繁地被写入与抹除而导致该块寿命的减短,因此映射表10中所存放的虚拟块与实体块的映射关系会根据不同的情况与需求而改变,以达到避开坏掉的实体块以及避免过度使用某个特定实体块的目的。
如图1所示,每一实体块14具有多个实体页16,同样的,每一虚拟块12也具有多个虚拟页20。其中,每一实体块14中的实体页16的数量也是等同于每一虚拟块12中的虚拟页20的数量。此外,每一实体页16均具有一相对应的实体页偏差(Offset)值,而每一虚拟页20也均具有一相对应的虚拟页偏差值。当某一个虚拟块12映射于某一个实体块14时,该虚拟块12中的每一个虚拟页20均以一对一的方式映射至该实体块14中具有相同偏差值的实体页16。
请参考图3。图3说明块映射的运作方式。举例而言,假设每一个实体块14包含有32个实体页16,同样的,每一个虚拟块12也是包含32个虚拟页。如果要寻找虚拟页号码(virtual page number)为161的虚拟页所映射的实体页,那么就必须将虚拟页号码161除以每一个块所包含的页的数量(pages per block)32,以得到一个商数A=5以及一个余数B=1,其中,商数A代表一个虚拟块地址,而余数则代表一个虚拟页偏差值。在此例中,161=5*32+1,因此,利用块映射的方式,可以先找到虚拟页号码为161的虚拟页所属的虚拟块的虚拟块地址,在此例中为5,再利用映射表10找到一个实体块,其实体块地址映射于虚拟块地址为5的虚拟块,在此例中该实体块的实体块地址为3,然后再利用虚拟页偏差值,在此例中为1,找到实体页偏差值同为1的实体页。
由于上述的映射表仅储存虚拟块与实体块之间的映射关系,因此映射表所需占用的内存空间并不会太大。然而,如上所述,新一代的闪存要求循序写入数据,在这样的情况下,利用上述的映射方式来循序写入数据将会造成更新效率(update efficiency)低落的问题。
所谓循序写入的方式是指,在某个实体块中,实体页偏差值较低的实体页的数据写入必须早于实体页偏差值较高的实体页的数据写入。换言之,在写入数据至一个实体页偏差值为n的实体页之前,必须先判断实体页偏差值大于n的实体页是否有数据存在于其中,如果有,则表示之前已有数据写入实体页偏差值大于n的实体页,因此,如果还将数据写入实体页偏差值为n的实体页,就会违反循序写入的要求,因为循序写入要求较后写入数据的实体页,其实体页偏差值必须大于较先写入数据的实体页。
在这种情况下,即在写入数据至实体页偏差值为n的实体页之前,已有数据存在于实体页偏差值大于n的实体页,系统必须另外找一块新的实体块,以将实体页偏差值小于n的实体页中所存在的数据循序写入,也就是复制至新的实体块,然后再将数据写入新的实体块中,实体页偏差值为n的实体页,最后再将实体页偏差值大于n的实体页中的数据复制至新的实体块。如此一来,就可以符合循序写入的要求。因此,在上述的情形中,为了更新某个实体块的某个实体页中的数据,系统就必须搬动大量的数据以及进行抹除的操作,而造成数据更新的效率降低并且加速耗损闪存。
请参考图4。图4说明更新一个实体页的运作方式。假设系统欲写入数据至实体页偏差值为3的实体页(page 3),即实体块的第四页,那么即使第四页是空的,也就是未被写入过数据,但是由于第四页之后的实体页已有数据写入,所以,此时写入数据至第四页就不符合循序写入的规则。因此,系统必须向闪存文件系统要求一个新的实体块,然后将第四页之前的数据复制过去(第一个步骤),接着再写入第四页的数据(第二个步骤),并且再把第四页之后的数据复制到新的实体块(第三个步骤),最后,把旧的实体块中的数据全部抹除(第四个步骤),并且更新映射表,以使得原先的虚拟块可以映射至新的实体块(第五个步骤)。完成以上的五个步骤,整个更新操作才算完成。从这个例子中可以看出,系统只是为了更新一个实体页,就需要复制整个实体块中的所有实体页中的数据。换言之,系统每做一次数据更新就必须执行复制与抹除的操作,此举降低了系统的更新效率,并且缩短闪存的寿命。
为了解决上述更新效率低落的问题,在美国专利US6,678,785的专利说明书中,美国M-System INC.提出另外一种循序写入数据的方法,以改善数据的更新效率。请参考图5。图5示出了另一种循序写入数据方法的运作模式。当系统要更新某个实体块中,实体页偏差值为4的实体页,即第四页的数据时,不论第四页是否是空的,也不论第四页之后的实体页是否有数据存在,系统都会从第一页开始搜寻,以决定该实体块中是否还有空的实体页,如果有,就将更新数据写入第一个找到的空白实体页,如果找不到任何空白的实体页,就向闪存文件系统要求一个新的实体块,并且将更新数据写入第一个实体页。换言之,除非上述的第四页刚好是第一个被找到的空白实体页,否则无论是将数据写入原先的实体块中的空白实体页,或者写入一个新的实体块(从第一个实体页开始写入,即从page 0开始写入),写入更新数据的实体页的实体页偏差值均不会相同于其所映射的虚拟页的虚拟页偏差值。换言之,实体页与虚拟页之间不再具有固定的偏差(Offset)关系。因此,一个虚拟块就会映射至一个以上的实体块,而形成一对多的映射关系。这种映射关系会一直存在,直到系统所保留的空的实体块已经用完。或者,当某一个虚拟块所映射的实体块个数太多时,系统就会将一对多的映射关系压缩(Compact)成一对一的映射关系。
由于上述的方法是直接将更新数据写入空白的实体页中,而不需执行数据复制与抹除的工作,因此,不但可以循序写入数据,还可以提高数据的更新效率,并且减少闪存被抹除的次数。然而,由于虚拟页与实体页不再具有相同偏差值,因此,当要寻找某个实体页时,利用映射表找到相映射的实体块之后,系统就必须到该相映射的实体块中,从第一个实体页开始,一个实体页接着一个实体页的寻找,直到找到该实体页为止。如此一来,将会大大降低数据的读取效率。如果不想一页页去寻找而减损数据的读取效率,那么就必须增加映射表所需要记录的数据。换言之,必须在映射表中另外存放实体页与虚拟页之间的映射关系,由于实体页的数量(虚拟页的数量)远远大于实体块的数量(虚拟块的数量),因此映射表所需的内存空间就会非常大。此外,在映射表中存放实体页与虚拟页的映射关系也会大大地增加搜寻的复杂度。换言之,利用M-System INC.所提出的循序写入数据方法,不是会造成数据读取速度的降低,就是会导致必须牺牲大量的内存空间并且增加搜寻的复杂度。
发明内容
因此,本发明提出一种不同于以往的可循序写入数据至闪存中的系统及其方法,以维持良好的数据更新效率。此外,在本发明中,相映射的实体页与虚拟页仍然具有相同的偏差值,因此,不但可以保有良好的数据读取效率,还可以避免太多的内存空间被占用,并且不会增加搜寻与管理的复杂度。
本发明的可循序写入数据至闪存中的系统包含:至少一虚拟块,其中每一该虚拟块包含多个虚拟页,并且具有一虚拟块地址,而每一该虚拟页具有一虚拟页偏差值;至少一实体块,其中每一该实体块包含多个实体页,并且具有一实体块地址,而每一该实体页具有一实体页偏差值;以及至少一活跃块,其中每一该活跃块包含多个实体页,并且具有一活跃块地址,而每一该实体页具有一实体页偏差值。其中每一该虚拟块映射于一实体块。在该相映射的虚拟块与实体块中,每一该虚拟页映射于每一该实体页,而在该相映射的虚拟页与实体页中,该虚拟页偏差值相同于该实体页偏差值。
为使本发明的上述目的、特征、和优点能更明显易懂,下文特举一较佳实施例,并结合附图详细说明如下。
附图说明
图1为藉由映射表将虚拟块对应到实体块的示意图。
图2为映射表的示意图。
图3说明块映射的运作方式。
图4说明更新一个实体页的运作方式。
图5显示另一种循序写入数据方法的运作模式。
图6为本发明的闪存的结构示意图。
图7为本发明的第一映射表的示意图。
图8为本发明的第二映射表的示意图。
图9为本发明的第三映射表的示意图。
图10为本发明的循序写入数据于闪存的方法的流程图。
图11为本发明合并一实体块与一活跃块的操作示意图。
图12为本发明另一合并一实体块与一活跃块的操作示意图。
图13为本发明的读取数据的流程图。
附图符号说明
30:闪存
32:实体块
34:活跃块
36、38:实体页
40:第一映射表
42、52、62:映射数据
50:第二映射表
60:第三映射表
具体实施方式
请参考图6。图6为本发明的闪存30的结构示意图。闪存30具有多个实体块32,以及一特定数量的活跃(active)块34。其中,每一个活跃块34均具有一个相映射的实体块32。在本发明中,一个虚拟块(未显示)最多只会映射到一个实体块32。此外,在本实施例中,闪存30仅具有一个活跃块34,因此,活跃块34映射至其中一个实体块32。
在实体块32中,每一个实体页36与其所映射的虚拟页(未显示)必须具有相同的偏差值。换言之,实体块32中的实体页36与虚拟块中的虚拟页具有相同的偏差关系。然而,活跃块34中的实体页38与其所映射的虚拟页则不须具有相同的偏差值。此外,无论是实体块32或活跃块34都必须符合循序写入的规则。也就是说,系统所欲写入数据的实体页的偏差值必须大于所有已经有数据存在于其中的实体页的偏差值。因此,在本发明中,写入数据至实体块32的实体页36必须符合两个规则。一为系统所欲写入数据的实体页的偏差值必须相同于其相映射的虚拟页的偏差值,另一为该实体页的偏差值必须大于其它存有数据的实体页的偏差值。相较而言,写入数据至活跃块34的实体页38则仅须符合循序写入的规则,即所欲写入数据的实体页的偏差值必须大于其它存有数据的实体页的偏差值。
请参考图7。图7为本发明的第一映射表40的示意图。第一映射表40用来记录实体块32与虚拟块的映射关系。如图所示,第一映射表40具有多个映射数据42。每一映射数据42存放有一虚拟块地址以及一实体块地址,以说明虚拟块与实体块的映射关系。其中,一个虚拟块至多只会映射到一个实体块。
请参考图8。图8为本发明的第二映射表50的示意图。第二映射表50用来记录实体块32与活跃块34的映射关系。如图所示,第二映射表50具有多个映射数据52。每一映射数据52存放有一实体块地址以及一活跃块地址,以说明实体块与活跃块的映射关系。由于在本实施例中,闪存30仅具有一个活跃块,因此,第二映射表50仅具有一笔映射数据,以说明该活跃块映射于哪一个实体块。
请参考图9。图9为本发明的第三映射表60的示意图。第三映射表60用来记录虚拟页与活跃块34中的实体页的映射关系。如图所示,第三映射表60具有多个映射数据62。每一映射数据62存放有一虚拟页偏差值以及一活跃块中的实体页的实体页偏差值,以说明虚拟页与活跃块中的实体页的映射关系。如上所述,在活跃块34中,实体页38与其所映射的虚拟页并不具有相同的偏差值,因此必须利用第三映射表60来记录虚拟页与实体页的映射关系。由于第三映射表60仅记录活跃块34中的实体页与虚拟页的映射关系,因此,第三映射表60所需占用的内存大小取决于活跃块34的数量以及活跃块34所包含的实体页的数量。活跃块34的数量愈多,所需的内存也就愈大。在本实施例中,只有一个活跃块34,因此第三映射表60所占用的内存并不大。
请参考图10。图10为本发明的循序写入数据于闪存30的方法70的流程图。首先,闪存文件系统(FFS)收到系统上层,如FAT所传来的写入要求(步骤72)。其中此写入要求包含一个虚拟页号码。根据虚拟页号码,闪存文件系统(FFS)可以找到相映射的实体块(步骤74)。如上所述,FFS将虚拟页号码除以每一个块所包含的页的数量(pages per block),以得到一虚拟块地址,接着再利用块映射的方式,即查询第一映射表40,以找到相映射的实体块。
接着,闪存文件系统(FFS)利用第二映射表50,以决定该实体块是否具有一个相映射的活跃块(步骤76)如果有,执行步骤78。如果没有,执行步骤80。在步骤78中,闪存文件系统(FFS)从第一个实体页由上往下寻找,以决定该实体块所映射的活跃块是否具有一个空白的实体页。如果有,执行步骤82。如果没有,则执行步骤84。在步骤82中,闪存文件系统(FFS)将数据写入该活跃块中,第一个可以找到的空白实体页。由于闪存文件系统(FFS)是从第一个实体页由上往下寻找,因此FFS所找到的第一个空白实体页的偏差值大于所有其它已有数据存在其中的实体页的偏差值。所以符合循序写入的规则。
当然,本发明也可以设计成利用一指标,指向最近一个写入数据的实体页的下一个实体页,即第一个可以找到的空白实体页。如此一来,系统就无须一页一页搜寻活跃块中的实体页,而可以直接利用该指标找到第一个空白的实体页。
在步骤80中,闪存文件系统(FFS)根据虚拟页的偏差值,即将该虚拟页的虚拟页号码除以每一个块所包含的页的数量(pages per block)之后所得到的余数,决定该实体块中与该虚拟页具有相同偏差值的实体页是否为一个空白实体页,以及该实体页的偏差值是否大于其它具有数据存在于其中的实体页的偏差值。如果两个决定结果均为是,执行步骤86。如果其中有一个决定结果为否,执行步骤88。在步骤86中,闪存文件系统(FFS)会将数据写入与该虚拟页具有相同偏差值的实体页。
在步骤84中,由于该实体块所映射的活跃块不再具有任何空白的实体页,因此闪存文件系统(FFS)会将该实体块与其所映射的活跃块合并起来,以产生一个新的实体块。之后,FFS会去修改第一映射表40,以将新的实体块映射于该虚拟块。
在合并的过程中,FFS可以同时将所欲写入的数据写入新的实体块中的相映射于该虚拟页的实体页。当然,FFS也可以设计成,另外去产生一个新的活跃块,并且将新的活跃块映射于该新的实体块,而该新的活跃块是一个空白的活跃块。然后,再将数据写入该新的活跃块中的第一个实体页(步骤90)。需说明的是,之后如果还有数据要写入该实体块,那么FFS都会将数据写入该实体块所映射的活跃块中。
在步骤88中,由于该实体块(又称目的实体块)并不具有相映射的活跃块,而且闪存文件系统(FFS)无法将数据写入该目的实体块中,因此为了能够写入数据,闪存文件系统(FFS)首先会将闪存中的活跃块与其所映射的实体块(简称映射实体块)合并起来,以产生一个新的实体块。之后,再去修改第一映射表40,以将该新的实体块映射至该映射实体块所映射的虚拟块。
接着,FFS产生一个新的活跃块,并且该新的活跃块映射于该目的实体块。此外,所产生的新的活跃块是一个空白的活跃块。因此,闪存文件系统(FFS)就可以将数据写入该目的实体块所映射的活跃块,以完成数据写入的操作(步骤92)。需说明的是,之后如果还有数据要写入该目的实体块,那么FFS都会将数据写入该目的实体块所映射的活跃块中。
本发明的方法70是先判断实体块是否具有相映射的活跃块,如果没有,才会判断在符合固定偏差以及循序写入规则的前提下,是否可以将数据写入实体块。换言之,只要实体块有相映射的活跃块,FFS就不会将数据写入实体块中,而是将数据写入活跃块,即使活跃块已经没有空白实体页,FFS也会藉由合并实体块与活跃块来产生一个新的实体块,以空出一块内存空间,用以产生一个新的活跃块。然后,再将数据写入新的活跃块中。
然而,方法70的运作方式仅为本发明的最佳实施例,而本发明也可以设计成,先判断在符合固定偏差以及循序写入规则的前提下,是否可以将数据写入实体块,如果可以,就写入数据,如果不可以,再判断该实体块是否具有相映射的活跃块,如果有,则判断活跃块内是否具有空白的实体页。如果有,则写入数据。如果没有,则进行合并实体块与虚拟块的操作,进而产生一个新的活跃块。换言之,本发明也可以设计成无论实体块是否具有相映射的虚拟块,FFS都会先判断是否可以将数据写入实体块。
在本实施例中,由于闪存只有一个活跃块,因此FFS只需利用第二映射表50找到具有相映射的活跃块的实体块,并且将其与所映射的活跃块合并起来即可。所需说明的是,如果闪存具有一个以上的活跃块,那么FFS就必须进行选择的操作。FFS可以根据每个活跃块中已存有数据的实体页的数量,来做选择。举例而言,FFS可以选择写得较满的活跃块(即具有较多已写入数据的实体页),以将其与所映射的实体块合并。此外,FFS也可以随机地选择一个活跃块,以将其与所映射的实体块合并。
尚需说明的是,闪存中的活跃块可以一开始就设定成映射于某个实体块(又称映射实体块),因此,在步骤88中,FFS会利用第二映射表50找到该映射实体块,以进行合并的操作。当然,一开始,闪存中的活跃块也可以设定为闲置状态,即并未映射至任何的实体块。其中,该闲置的活跃块是一个空白的活跃块。因此,在步骤88中,FFS可以先查询是否有闲置的活跃块。如果没有,则利用第二映射表50去寻找映射实体块,以进行合并的操作。如果有,则可以直接将该闲置的活跃块映射至该目的实体块。
此外,闪存也可以具有一个以上的活跃块,而活跃块与实体块的映射关系也可以设计成一个实体块具有一个以上的活跃块。如果闪存仅具有一个活跃块,而一个实体块也只具有一个相映射的活跃块,如上所述,当活跃块已经没有空白实体页或是有别的实体块需要活跃块时,FFS就必须对实体块和活跃块进行合并(Merge)的操作,以将实体块和活跃块合并成一个新的实体块。
请参考图11。图11为本发明合并一实体块32与一活跃块34的操作示意图。图11所揭示的合并方式适用于活跃块34中的实体页的偏差值相同于虚拟页的偏差值的情形。也就是,活跃块34中的实体页与虚拟页刚好具有固定偏差关系的情形。在这种情形下,FFS只须将旧的实体块(上述的目的实体块)上有用的数据复制到活跃块,然后再将该活跃块转换(transform)成为一个新的实体块,再将旧的实体块抹除。换言之,如果之前更新到活跃块34的数据都是依照相同偏差规则(即实体页与虚拟页具有相同的偏差值)写入的,那么只要将旧的实体块内的数据全部复制到活跃块,然后将活跃块转换成为新的实体块,并且抹除旧的实体块中的数据。此时,FFS会去修改第一映射表40,以将新的实体块映射至旧的实体块所映射的虚拟块。
请参考图12。图12为本发明另一合并一实体块32与一活跃块34的操作示意图。图12所揭示的合并方式适用于活跃块34中的实体页的偏差值不相同于虚拟页的偏差值的情形。也就是,活跃块34中的实体页与虚拟页不具有固定偏差关系的情形。在这种情形要进行合并时,FFS会先要求一块新的实体块,然后依照固定偏差以及循序写入的规则将旧的实体块与活跃块中的数据写入至新的实体块中。接着,再将活跃块和旧的实体块内的数据加以抹除。由于活跃块中的数据并没有按照固定偏差规则来写入,因此在进行合并时必须重新索取一块新的实体块,然后再逐一将旧的实体块与活跃块上的数据复制到新的实体块,最后再将活跃块及旧的实体块上的数据抹除,以完成合并的操作。此时,FFS会去修改第一映射表40,以将新的实体块映射至旧的实体块所映射的虚拟块。
请参考图13。图13为本发明的读取数据的流程图。在步骤100中,闪存文件系统(FFS)收到系统上层,如FAT所传来的读取要求。其中读取要求包含一个虚拟页号码。根据虚拟页号码,闪存文件系统(FFS)可以找到相映射的实体块(步骤102)。如上所述,FFS系将虚拟页号码除以每一个块所包含的页的数量(pages per block),以得到一虚拟块地址,接着再利用块映射的方式,即查询第一映射表40,以找到相映射的实体块。
接着,闪存文件系统(FFS)利用第二映射表50,以决定该实体块是否具有一个相映射的活跃块(步骤104)。如果有,执行步骤106。如果没有,执行步骤108。
在步骤106中,闪存文件系统(FFS)根据第三映射表60,搜寻所需的实体页。由于在本实施例中,系统具有第三映射表60以储存虚拟页与活跃块中的实体页之间的映射关系,因此在数据读取的过程中,FFS可以藉由第三映射表60快速找到所需的实体页。然后,技术人员可以轻易了解的是,也可以将系统设计成并不具有第三映射表60。在这种设计下,可以节省内存空间,但是会造成读取效率的降低。因为在没有第三映射表60的情况下,FFS必须在活跃块中,由上而下,一页一页搜寻所需的实体页。
如果可以找到,执行步骤110。如果无法找到,执行步骤108。在步骤110中,FFS会从所找到的实体页(位于活跃块)读取数据,以完成读取操作。
在步骤108中,FFS会根据虚拟页的偏差值,到实体块中寻找具有相同偏差值的实体页。如果可以找到,执行步骤112,如果无法找到,执行步骤114。在步骤112中,FFS会从所找到的实体页(位于实体块)读取数据。在步骤114中,FFS会回报一个读取失败讯息给上层。
尚需说明的是,本发明的读取数据的操作流程也可以设计成无论相映射的实体块是否具有活跃块,FFS都会先到该实体块中,利用虚拟页偏差值来寻找具有相同偏差值的实体页。只有在找不到有效数据的情况下,FFS才会进一步查询该实体块是否有相映射的活跃块,如果有,则到活跃块,根据第三映射表60或循序搜寻的方式(在没有第三映射表60的情况下),寻找所需的实体页。如果没有相映射的活跃块,FFS则会回报一个读取失败讯息给上层。同样的,如果在活跃块中,无法找到所需的实体页,那么FFS也会回报一个读取失败讯息给上层。
在本发明的闪存中,活跃块的数量是可以自由设定的,而为了取得较佳的数据读取效率,可以设计成仅具有少数的活跃块。如此一来,由于闪存中绝大部分为实体块,而实体块内部是按照固定偏差规则来存放数据,因此在搜寻虚拟页所映射的实体页时,FFS只要算出相映射的实体块,便可以直接到该实体块中,直接找寻具有相同偏差值的实体页,以读取数据,而不需要从头搜寻,不但减低了搜寻的复杂度,而且无须占用大量的内存空间。只有当该实体块具有相映射的活跃块时,FFS才需要到活跃块中,一页一页循序搜寻,然而,在活跃块的数量不多的情况下,并不会对读取效率造成太大的影响。此外,也可以藉由第三映射表的建立,来改善读取速率。虽然第三映射表的建立会占用内存空间,但是在活跃块数量不多的情况下,第三映射表所占用的内存空间也是有限的。简言之,活跃块的数量愈多,所需的内存会愈大,但是写入效率(更新效率)会愈高。因此,系统设计者可以根据不同的系统需求,来决定活跃块的数量。
综上所述,利用本发明所提供的闪存及其更新与读取数据的方法,藉由活跃块的设计,当系统欲更新某个实体页中的数据时,FFS无须进行大量的数据搬动以及抹除的操作,因此可以具有良好的数据更新效率。再者,由于活跃块的数量并不多,因此只需使用一小块的内存去记录活跃块上数据的分布即可。如此一来,不但可以使得数据的读取更有效率,也有助于数据的搜寻与管理。
此外,系统设计者可以藉由设定不同数量的活跃块,而提供不同的数据更新效率。当活跃块的数量愈多时,数据更新效率就会愈好。然而,即使只有一个活跃块存在,其更新数据效率还是比已知技术的方法好。
综上所述,虽然本发明已以一较佳实施例披露如上,然其并非用以限定本发明,本领域的技术人员在不脱离本发明的精神和范围的前提下,可作各种的更动与润饰,因此本发明的保护范围以本发明的权利要求为准。

Claims (25)

1.一种可循序写入数据至一闪存中的系统,包含:
至少一虚拟块,其中每一该虚拟块包含多个虚拟页,并且具有一虚拟块地址,而每一该虚拟页具有一虚拟页偏差值;
至少一实体块,包含于该闪存中,其中每一该实体块包含多个实体页,并且具有一实体块地址,而每一该实体页具有一实体页偏差值;以及
至少一活跃块,包含在该闪存中,其中每一该活跃块包含多个实体页,并且具有一活跃块地址,而每一该实体页具有一实体页偏差值;
其中每一该虚拟块映射于一实体块,而每一该活跃块可映射于一实体块;
在该相映射的虚拟块与实体块中,每一该虚拟页映射于每一该实体页,而在该相映射的虚拟页与实体页中,该虚拟页偏差值相同于该实体页偏差值。
2.如权利要求1所述的系统,还包含一第一映射表,包含多笔第一映射数据,而每一第一映射数据包含有一虚拟块地址以及一实体块地址,以将一特定的虚拟块映射于一特定的实体块。
3.如权利要求1所述的系统,还包含一第二映射表,包含多笔第二映射数据,而每一第二映射数据包含有一实体块地址以及一活跃块地址,以将一特定的活跃块映射于一特定的实体块。
4.如权利要求1所述的系统,还包含一第三映射表,包含多笔第三映射数据,而每一该第三映射数据包含有一虚拟页偏差值以及一实体页偏差值,以将一特定的虚拟页映射于一特定活跃块中的一特定实体页。
5.如权利要求1所述的系统,还包含:
一接收模块,用来接收一存取要求,其中该存取要求包含一虚拟页号码,其表示一虚拟页;
一实体块搜寻模块,用来根据该虚拟页号码,找到一特定的实体块;以及
一决定模块,用来决定该特定的实体块是否具有相映射的活跃块。
6.如权利要求1所述的系统,还包含:
一接收模块,用来接收一写入要求,其中该写入要求包含一虚拟页号码,其表示一虚拟页;
一实体块搜寻模块,用来根据该虚拟页号码,取得一虚拟块地址,以寻找一特定的实体块;
一决定模块,用来决定该特定的实体块是否具有相映射的活跃块;
一搜寻模块,用来搜寻该相映射的活跃块,以决定该活跃块是否具有一空白的实体页;
一偏差值搜寻模块,用来根据该虚拟页号码,取得一虚拟页偏差值,以决定该特定的实体块中,具有相同的实体页偏差值的实体页是否为一空白的实体页;以及
一写入模块,用来将数据写入该实体页。
7.如权利要求6所述的系统,还包含:
一合并模块,用来合并一特定的活跃块与其所映射的实体块,以产生一新的实体块。
8.如权利要求7所述的系统,还包含:
一活跃块产生模块,用来产生一新的活跃块,其中该新的活跃块映射于该新的实体块,并且是一个空白的活跃块。
9.如权利要求7所述的系统,还包含:
一活跃块产生模块,用来产生一新的活跃块,其中该新的活跃块映射于该特定的实体块,并且是一个空白的活跃块。
10.如权利要求7所述的系统,还包含:
一选择模块,用来选择特定的活跃块,以合并该特定的活跃块与其所映射的实体块。
11.如权利要求10所述的系统,其中该选择模块根据一随机的方式来选择该特定的活跃块。
12.如权利要求10所述的系统,其中该选择模块根据每一该活跃块所存放数据的多寡,来选择该特定的活跃块。
13.如权利要求7所述的系统,还包含:
一查询模块,用来查询该闪存中是否有一闲置的活跃块。
14.如权利要求13所述的系统,还包含:
一映射模块,用来将该闲置的活跃块映射于该特定的实体块。
15.如权利要求1所述的闪存系统,还包含:
一接收模块,用来接收一读取要求,其中该读取要求包含一虚拟页号码;
一实体块搜寻模块,用来根据该虚拟页号码,取得一虚拟块地址,以寻找一特定的实体块;
一决定模块,用来决定该特定的实体块是否具有相映射的活跃块;
一实体页搜寻模块,用来搜寻该相映射的活跃块,以找到所需的实体页;
一偏差值搜寻模块,用来根据该虚拟页号码,取得一虚拟页偏差值,以找到该特定的实体块中,具有相同的实体页偏差值的实体页;以及
一读取模块,用来将从该实体页读取数据。
16.一种存取数据于一闪存的方法,应用于一电子装置中,该电子装置包含:
至少一虚拟块,其中每一该虚拟块包含多个虚拟页,并且具有一虚拟块地址,而每一该虚拟页具有一虚拟页偏差值;
至少一实体块,包含于该闪存中,其中每一该实体块包含多个实体页,并且具有一实体块地址,而每一该实体页具有一实体页偏差值;以及
至少一活跃块,包含于该闪存中,其中每一该活跃块包含多个实体页,并且具有一活跃块地址,而每一该实体页具有一实体页偏差值;
其中每一该虚拟块映射于一实体块,而每一该活跃块可映射于一实体块;以及
在该相映射的虚拟块与实体块中,每一该虚拟页映射于每一该实体页,而在该相映射的虚拟页与实体页中,该虚拟页偏差值相同于该实体页偏差值;
该方法包含:
接收一存取要求,其中该存取要求包含一虚拟页号码,其表示一特定的虚拟页;
根据该虚拟页号码,找到一特定的实体块;以及
决定该特定的实体块是否具有相映射的活跃块。
17.如权利要求16所述的方法,其中该方法用来写入数据至该闪存中,包含:
步骤1:接收一写入要求,其中该写入要求包含一虚拟页号码,其表示一特定的虚拟页;
步骤2:根据该虚拟页号码,找到一特定的实体块;
步骤3:决定该特定的实体块是否具有相映射的活跃块;若是,执行步骤4,若否,执行步骤5;
步骤4:决定该相映射的活跃块是否具有一空白的实体页;若是,执行步骤6,若否,执行步骤7;
步骤5:利用该虚拟页号码得到一虚拟页偏差值,并且决定该特定的实体块中具有与该虚拟页偏差值相同的偏差值的实体页是否为一空白的实体页;若是,执行步骤8,若否,执行步骤9;
步骤6:将数据写入该空白的实体页;
步骤7:合并该特定的实体块及其所映射的活跃块;
步骤8:将数据写入该实体页;以及
步骤9:合并一实体块及其所映射的活跃块。
18.如权利要求17所述的方法,还包含:
在执行步骤9之前,选择一具有活跃块的实体块。
19.如权利要求17所述的方法,其中在步骤7中,合并该特定的实体块及其所映射的活跃块之后,产生一新的实体块,并且将该新的实体块映射至该特定的实体块所映射的虚拟块。
20.如权利要求19所述的方法,其中在步骤7之后,产生一新的活跃块,该新的活跃块映射于该新的实体块,并且是一个空白的活跃块。
21.如权利要求17所述的方法,其中在步骤9中,合并一实体块及其所映射的活跃块之后,产生一新的实体块,并且将该新的实体块映射至该实体块所映射的虚拟块。
22.如权利要求21所述的方法,其在步骤9之后,产生一新的活跃块,该新的活跃块映射于该特定的实体块,并且是一个空白的活跃块。
23.如权利要求17所述的方法,还包含:
在执行步骤9之前,查询是否有一闲置的活跃块。
24.如权利要求23所述的方法,其中:
若有闲置的活跃块,将该闲置的活跃块映射于该特定的实体块。
25.如权利要求16所述的方法,其中该方法用来从该闪存中读取数据,包含:
步骤1:接收一读取要求,其中该读取要求包含一虚拟页号码,其表示一虚拟页;
步骤2:根据该虚拟页号码,取得一虚拟块地址,以找到一特定的实体块;
步骤3:决定该特定的实体块是否具有相映射的活跃块;如果是,执行步骤4,如果否,执行步骤5;
步骤4:搜寻该相映射的活跃块,以找到所需的实体页;以及
步骤5:根据该虚拟页号码,取得一虚拟页偏差值,以找到该特定的实体块中,具有相同的实体页偏差值的实体页。
CNB200410042088XA 2004-04-30 2004-04-30 可循序写入数据至闪存中的系统及其方法 Expired - Lifetime CN100353341C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB200410042088XA CN100353341C (zh) 2004-04-30 2004-04-30 可循序写入数据至闪存中的系统及其方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB200410042088XA CN100353341C (zh) 2004-04-30 2004-04-30 可循序写入数据至闪存中的系统及其方法

Publications (2)

Publication Number Publication Date
CN1690983A CN1690983A (zh) 2005-11-02
CN100353341C true CN100353341C (zh) 2007-12-05

Family

ID=35346437

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB200410042088XA Expired - Lifetime CN100353341C (zh) 2004-04-30 2004-04-30 可循序写入数据至闪存中的系统及其方法

Country Status (1)

Country Link
CN (1) CN100353341C (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101251788A (zh) * 2008-03-07 2008-08-27 威盛电子股份有限公司 储存单元管理方法及系统
KR101014040B1 (ko) * 2009-03-19 2011-02-14 (주)인디링스 디램 버퍼 관리 장치 및 방법
CN101930345B (zh) * 2010-08-24 2012-05-02 苏州国芯科技有限公司 一种基于块访问的闪存读写方法
CN102819494B (zh) * 2012-07-18 2015-09-02 山东华芯半导体有限公司 一种闪存顺序写入时的优化方法
CN106445832A (zh) * 2016-09-06 2017-02-22 深圳市先天海量信息技术有限公司 闪存存储系统的地址映射方法及装置
US10824554B2 (en) * 2016-12-14 2020-11-03 Via Technologies, Inc. Method and apparatus for efficiently sorting iteration with small sorting set

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5937425A (en) * 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
US6625715B1 (en) * 1999-12-30 2003-09-23 Intel Corporation System and method for translation buffer accommodating multiple page sizes
US6678785B2 (en) * 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5937425A (en) * 1997-10-16 1999-08-10 M-Systems Flash Disk Pioneers Ltd. Flash file system optimized for page-mode flash technologies
CN1281562A (zh) * 1997-10-16 2001-01-24 M-系统快闪盘开拓者公司 改进的闪速文件系统
US6625715B1 (en) * 1999-12-30 2003-09-23 Intel Corporation System and method for translation buffer accommodating multiple page sizes
US6678785B2 (en) * 2001-09-28 2004-01-13 M-Systems Flash Disk Pioneers Ltd. Flash management system using only sequential write

Also Published As

Publication number Publication date
CN1690983A (zh) 2005-11-02

Similar Documents

Publication Publication Date Title
CN100385416C (zh) 资料区块的资料管理方法及其相关资料存取系统
US7516266B2 (en) System and method capable of sequentially writing data to a flash memory
US6587915B1 (en) Flash memory having data blocks, spare blocks, a map block and a header block and a method for controlling the same
JP4773342B2 (ja) 不揮発性記憶装置及びデータ書込み方法
CN101980177B (zh) 一种操作Flash的方法和装置
KR101391270B1 (ko) Mram을 이용하는 비휘발성 메모리 시스템
JP5002201B2 (ja) メモリシステム
CN101632068B (zh) 半导体存储装置
US7814264B2 (en) Memory card, semiconductor device, and method of controlling semiconductor memory
CN101387987B (zh) 存储器装置、存储器控制方法和程序
CN101382918B (zh) 一种基于数据交换区的NAND Flash闪存优化管理方法
US20060224819A1 (en) Host apparatus
CN101169751A (zh) 具有闪存设备的系统及其数据恢复方法
US20070081401A1 (en) Apparatus for controlling flash memory and method thereof
CN101169972A (zh) 管理非易失性存储器的设备和方法
CN101968755B (zh) 一种自适应应用负载变化的快照生成方法
CN101625897B (zh) 用于快闪存储器的数据写入方法、储存系统与控制器
CN108710578A (zh) 基于闪存的数据存储方法和装置
TW201917581A (zh) 管理快閃記憶體模組的方法及相關的快閃記憶體控制器
CN101571832A (zh) 数据写入方法及使用该方法的快闪存储系统与其控制器
CN102981966A (zh) 一种均衡分配Flash存储块的数据存储方法
CN107817945A (zh) 一种混合内存结构的数据读取方法和系统
CN101211314B (zh) 闪存资料读写寿命提升方法
CN100353341C (zh) 可循序写入数据至闪存中的系统及其方法
CN102004697B (zh) 一种Flash的回收方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20071205

CX01 Expiry of patent term