管理闪存模块的方法及相关的闪存控制器与流程

文档序号:17493728发布日期:2019-04-23 20:58阅读:164来源:国知局
管理闪存模块的方法及相关的闪存控制器与流程

本发明有关于闪存,尤指一种管理闪存模块的方法及相关的闪存控制器。



背景技术:

在闪存控制器中会具有一闪存转换层(flashtranslationlayer,ftl),以将文件系统中的逻辑地址转换为闪存模块中的物理地址,并藉此管理及控制闪存模块中的块使用状况。闪存转换层通常会具有两个问题,其中第一个问题是如何增加逻辑地址及物理地址的查询/转换速度,以加速数据存取;而第二个问题是如何降低闪存模块中的块擦除次数,以延长闪存模块的寿命。具体来说,由于目前闪存模块的容量越来越大,故用来记录逻辑地址及物理地址关系的区段(sector)地址映射表的容量也越来越大,因此会导致逻辑/物理地址的搜寻速度变慢;另一方面,由于区段地址映射表会储存在闪存模块中,再加上区段地址映射表中的内容会因为闪存模块中所储存的数据的变动而需要频繁地更新,因此在区段地址映射表的容量变大的情形下更会造成闪存模块中的块擦除次数大幅增加,而影响到闪存模块的寿命。



技术实现要素:

有鉴于此,本发明提供一种管理闪存模块的方法及相关的闪存控制器。

在本发明的一个实施例中,揭露了一种管理一闪存模块的方法,其包括:依序建立多个区段之多笔区段地址映射数据,其中该多笔区段地址映射数据包括了每一个区段之逻辑地址及相对应的物理地址;将该多个区段中具有连续逻辑地址的一部分区段合并为一簇,并将该部分区段的数据搬移至该闪存模块中具有连续物理地址的多个数据页;以及建立该簇的簇地址映射数据,并擦除先前所建立之对应于该部分区段之区段地址映射数据。

在本发明的另一个实施例中,揭露了一种闪存控制器,其中该闪存控制器用来存取一闪存模块,且该闪存控制器包括有存储器以及微处理器,其中该存储器用来储存程序代码,且该微处理器用来执行该程序代码以控制对该闪存模块的存取。在该闪存控制器的操作中,该微处理器依序建立多个区段的多笔区段地址映射数据,其中该多笔区段地址映射数据包括了每一个区段的逻辑地址及相对应的物理地址;且该微处理器将该多个区段中具有连续逻辑地址的一部分区段合并为一簇,并将该部分区段的数据搬移至该闪存模块中具有连续物理地址的多个数据页,以及建立该簇的簇地址映射关系,并擦除先前所建立之对应于该部分区段之区段地址映射数据。

在本发明的另一个实施例中,揭露了一种管理闪存模块的方法,其包括:建立地址映射表,其中该地址映射表包括了多个区段之逻辑地址及相对应的物理地址;以及将该地址映射表连同其他数据一并写入至该闪存模块中的同一个数据页中,其中该其他数据无关于任何有关于逻辑地址及物理地址的映射数据。

在本发明的另一个实施例中,揭露了一种管理闪存模块的方法,其包括:读取第一块中所储存的擦除序号,其中该擦除序号用来表示该第一块在上一次进行擦除操作是该闪存模块中整体所进行的第几次擦除操作;根据该擦除序号来判断该第一块中的数据为热数据或是冷数据;当该第一块中的数据被判断为冷数据时,将该第一块使用中的数据复制到第二块中;以及擦除该第一块中的数据。然后以同样的方式将其他块的冷数据集中到第二块,之后第二块的冷数据就不太会移动,可减少不必要的搬移。

本发明所提供的管理闪存模块的方法及相关的闪存控制器,可以大幅降低地址映射表的容量,以加速逻辑/物理地址的搜寻速度,并延长闪存模块的寿命。

对于已经阅读后续由各附图及内容所显示的较佳实施方式的本领域的技术人员来说,本发明的各目的是明显的。

附图说明

图1为存取闪存模块的架构图。

图2为根据本发明一实施例的存储装置的示意图。

图3为根据本发明一实施例的多个映射地址表的示意图。

图4为根据本发明一实施例的使用图3所示的多个映射地址表以从闪存模块中读取数据的流程图。

图5为如何产生簇(cluster)地址映射数据的示意图。

图6为图5所示的管理闪存模块的方法的流程图。

图7为根据本发明一实施例的将地址映射表写入到闪存模块的示意图。

图8为根据本发明另一实施例的管理闪存模块的方法的流程图。

具体实施方式

图1为存取一闪存模块120的架构图,其绘示了文件系统112通过闪存转换层(ftl)114来将数据写入至闪存模块120,或是通过闪存转换层114从闪存模块120中读取数据。在一般的闪存装置中,由于闪存模块120与主装置(例如,电脑或处理器)的文件系统112并不相同,因此需要使用闪存转换层114来将主装置的文件系统112中的逻辑地址转换为闪存模块120中所使用的物理地址,以顺利地对闪存模块120进行存取操作。此外,除了进行逻辑地址与物理地址之间的转换之外,闪存转换层114另可以此管理及控制闪存模块120中的块使用状况。

图2为根据本发明一实施例的存储装置100的示意图。存储装置100包括闪存控制器110以及闪存模块120,其中闪存控制器110包括接口电路211、微处理器212、只读存储器213、缓冲存储器215以及控制逻辑216。只读存储器213用来储存程序代码214,而微处理器212则用来执行程序代码214以控制对闪存模块120的存取,即,图1所示的闪存转换层114可以通过微处理器212执行程序代码214来实现。此外,闪存控制器110通过接口电路322连接至主装置(例如,电脑或处理器),且该主装置可以通过闪存控制器110来存取闪存模块120。

闪存模块120包括多个闪存芯片,每一个闪存芯片包括多个块(block),而每一个块又包括多个数据页(page)。在闪存模块120的规范中,闪存控制器110对闪存模块120进行擦除操作是以块为单位来进行,即块是一个最小的擦除单位;此外,闪存控制器110对闪存模块120进行写入操作是以数据页为单位来进行,即数据页是一个最小的写入单位。

在本实施例中,当主装置需要将数据写入到闪存模块120时,是依序地将多笔数据循序地传送至闪存控制器110中,其中每一笔数据具有固定的大小。在目前常用的文件系统中,每一笔数据对应到区段(sector),且其大小为4kb。在每一个区段的数据(即,上述的每一笔数据)写入到闪存模块120的过程中,微处理器212也会同时建立该区段的一笔区段地址映射数据,其中该笔区段地址映射数据包括该区段的逻辑地址及相对应的物理地址。该笔区段地址映射数据会先暂时储存在缓冲存储器215中,并等待后续适合的时间点再储存至闪存模块120中。如上所述,由于每一个区段的数据在写入至闪存模块120都会需要建立一笔区段地址映射数据,因此,当闪存模块120的容量越来越大时(例如8gb、16gb以上),区段地址映射数据的数据量也会相当庞大,因而造成缓冲存储器215的负担且也浪费了闪存模块120中的空间。此外,在区段地址映射数据的数据量过大的情形下,也有可能会降低逻辑地址及物理地址的查询/转换速度。

因此,为了解决上述区段地址映射数据的数据量过大的问题,本实施例提出了一种可以缩减区段地址映射数据的方法,其通过将具有连续逻辑地址的多个区段合并为一个簇(cluster),并将原本的多个区段地址映射数据缩减为单一的簇地址映射数据,以降低地址映射数据的数量。

具体来说,参考图3,其为根据本发明一实施例的多个映射地址表的示意图。在图3的实施例中,其主要设计了三层的映射地址表,其中第一层是ftl组态,其记录了多个簇地址映射表群组cmt_g0、cmt_g1、cmt_g2…等等在闪存模块120中的地址;第二层是每一个簇地址映射表群组所包括的多个项目,图3是以簇地址映射表群组cmt_g0为例,其包括多个项目c1~c3,且每一个项目均对应至多个区段;而第三层则是区段地址映射表,其包括多笔区段地址映射数据s1~s15。在本实施例中,项目c1对应到128个具有连续逻辑地址及连续物理地址的区段,故此128个区段被整合为一个簇,且项目c1仅包括一个簇地址映射数据,而该簇地址映射数据可以是上述128个区段的第一个逻辑地址以及第一个物理地址的信息;而由于项目c3中具有连续逻辑地址及连续物理地址的区段的数量不足,故其对应的区段并未被整合为一个簇,因此项目c3包括一个连结至区段地址映射表的信息。

关于图3所示多个映射地址表操作,请参考图4,其为根据本发明一实施例的使用图3所示的多个映射地址表以从闪存模块120中读取数据的流程图。在步骤400中,流程开始。在步骤402中,微处理器212从主装置接收读取命令,以要求读取特定区段的数据。在步骤404中,微处理器212根据该特定区段的逻辑地址以从ftl组态中找寻所对应的簇地址映射表群组,在本实施例中,该特定区段对应到簇地址映射表群组cmt_g0。在步骤406中,微处理器212根据该特定区段的逻辑地址以判断所需的信息是位于簇地址映射表群组cmt_g0中的那一个项目,在本实施例中,若是该特定区段的逻辑地址对应到项目c1,则流程进入步骤408;而若是该特定区段的逻辑地址对应到项目c3,则流程进入步骤412。在步骤408中,由于项目c1仅记录了一笔簇地址映射数据,因此,微处理器212便直接取得这一笔簇地址映射数据,并在步骤410中根据该笔簇地址映射数据中所记录的物理地址以从闪存模块120中依序读取128个区段的内容,并由此128个区段的内容得到该特定区段的数据(该特定区段是该128个区段的其中之一)。另一方面,在步骤412中,由于项目c3包括一个连结至一区段地址映射表的信息,故微处理器212连结至该区段地址映射表;接着在步骤414中,微处理器212根据该特定区段的逻辑地址来取得一区段地址映射数据,例如s2,并在步骤416中根据该区段地址映射数据中所记录的物理地址以从闪存模块120中依序读取该特定区段的内容。

在以上的实施例中,由于项目c1中仅记录了一笔簇地址映射数据来表示128个区段的物理地址,因此可以大幅减少映射地址表的数据量。此外,由于映射地址表的数据量减少了,故通过第3~4图所示的映射地址表的使用过程也可以快速地找寻到所需要的物理地址,以增进存取速度及效能。

图5绘示了如何产生簇地址映射数据的示意图。如图5所示,首先,微处理器212接收来自主装置的多个写入指令以要求将具有连续逻辑地址la0~la127的128个区段的数据d_s0~d_s127写入至闪存模块120中,此时,微处理器212依序地将128个区段的数据d_s0~d_s127写入到块510中,并同时建立区段地址映射表以记录逻辑地址la0~la127及其对应的物理地址pa0~pa127。需注意的是,数据d_s0~d_s127所写入到的块510中的地址不一定是连续的,即物理地址pa0~pa127不一定是连续的物理地址。接着,当区段地址映射表中所记录的区段数量到达预定数量(本实施例为128个区段)的时候,微处理器212便准备将此128个具有连续逻辑地址的区段合并为一个簇,并将数据d_s0~d_s127从块510中搬移到块520中具有连续物理地址的多个数据页中。如上所述,由于数据d_s0~d_s127在搬移过后会具有连续的逻辑地址以及连续的物理地址,因此,微处理器212便可以据此建立数据d_s0~d_s127的簇地址映射数据,其中该簇地址映射数据仅包括连续逻辑地址la0~la127中的第一个逻辑地址la0,以及上述块520中连续的物理地址的第一个物理地址pa0’。

在建立了簇地址映射数据之后,原本的区段地址映射表便不再被需要,因此可以直接删除以节省储存空间。此外,图5所建立的簇地址映射数据可以被设置于图3所示的簇地址映射表群组中,例如cmt_g0的项目c1。

需注意的是,上述将128个具有连续逻辑地址的区段合并为一个簇以及将数据d_s0~d_s127从块510搬移或复制到块520的过程并非是立即进行,而是可以在闪存控制器110有空闲的时候,或是闪存控制器110需要进行块合并或是垃圾数据收集(garbagecollection)的时候再行处理。

在本实施例中,块510可以是具有较快存取速度的单层式储存(single-levelcell,slc)块,且块520可以是具有较高储存密度的三层式储存(triple-levelcell,tlc)块,其中单层式储存块表示其中的一个浮闸晶体管仅用来储存一个位,而三层式储存块表示其中的一个浮闸晶体管可以用来储存三个位。

图6为图5所示的管理闪存模块120的方法的流程图。参考第5、6图及以上所揭露的内容,流程如下所述。

步骤600:流程开始。

步骤602:依序将多个区段的多笔数据写入到闪存模块的第一块中,并依序建立该多个区段的多笔区段地址映射数据。

步骤604:将该多个区段中具有连续逻辑地址的一部分区段合并为一簇,并将该部分区段的数据搬移至该闪存模块的第二块中具有连续物理地址的多个数据页。

步骤606:建立该簇的簇地址映射数据,并擦除先前所建立的对应于该部分区段的区段地址映射数据。

另一方面,在现有技术中,若是缓冲存储器215中的空间不足而需要将目前不需要使用的地址映射表(例如上述的区段地址映射表)所占用的空间释放时,微处理器212会将地址映射表储存至闪存模块120中,并将此地址映射表从缓冲存储器215中移除。然而,地址映射表所储存的区域通常不同于一般区段数据,即,区段地址映射表需要单独地根据一个写入命令来写入至闪存模块120,因而增加了系统负担。为了解决此问题,本实施例另外提出了一种可以将地址映射表连同区段数据一并写入同一个数据页的方法,以增进系统效能。

参考图7,其为根据本发明一实施例的将地址映射表写入到闪存模块120的示意图,其中此地址映射表可以是图3所示的簇地址映射表群组及/或区段地址映射表。如图7所示,块710位于闪存模块120中,且包括多个数据页(仅绘出数据页712作为代表),且在本实施例中数据页712包括数据区(dataarea)以及备用区(sparearea),其中数据区的大小为16kb,且可用来储存4笔区段数据(每笔区段数据为4kb);而备用区则是用来储存元数据(metadata)。在本实施例中,当缓冲存储器215中的地址映射表需要被储存至闪存模块120时,微处理器212会使用同一个写入命令,以将地址映射表连同其他的区段数据一并写入到数据页712中,以节省读写次数。通过将地址映射表连同区段数据写入到同一个数据页712中,可以再减少写入次数的情形下储存较多数据,且由于区段数据与相对应的地址映射表有较高的机率会储存在同一个数据页中,故可以节省读取地址映射表的次数。

另一方面,数据在块间的移动是非常没有效率的事情,为了减少数据移动的次数,闪存控制器110会去判断块中所储存的数据是热数据或是冷数据,再据以决定垃圾数据搜集时的处理方式,其中前述的热数据指的是写入时间不久的数据,即经常性使用的数据;而冷数据指的是存放在块内的时间已经很久的数据,即很久没有使用/更新的数据。由于冷数据被视为不常使用的数据,故当闪存判断块中所储存的块是冷数据时,便会将其中的数据(有效数据)集中至另一块,而原本的块便释放出来以供后续使用。而冷数据所处的块需要被清出的机率就会很小,可减少移动的次数。在上述揭露内容中也提到闪存模块120中的块包括单层式块以及三层式块,一般来说,单层式块具有较快的存取速度且允许较多的擦除次数。上述冷热数据的方法,可以应用在决定如何将单层式块的数据移动到三层式块,以达到单层式块的最佳使用效率,或是决定三层式块与三层式块间的移动,以避免三层式块之间无谓的搬移。

然而,在现有技术中闪存控制器110需要许多信息来判断块中所储存的数据是否为冷数据,因此会需要额外的空间储存相关信息,且也会造成其运作负担,因此,在本发明一实施例中,闪存控制器110可以直接根据每一个块中本身所储存的擦除序号(erasesequencenumber)来判断该块中的数据是热数据或是冷数据,以避免需要额外搜集储存其他信息。具体来说,当闪存模块120中有一块需要被擦除的时候,闪存控制器110会更新闪存模块120中所进行的块擦除操作的总次数(即,次数加上1),并在后续该块进行数据写入的时候一并将此更新的总次数作为该擦除序号来写入到该块之中。换句话说,该擦除序号用来表示该块在上一次进行擦除操作是闪存模块120中整体所进行的第几次擦除操作。之后,在后续需要释放该块的空间或是闪存控制器110空闲的时候,闪存控制器110便可以从该块中读取擦除序号,并根据该擦除序号与闪存控制器110目前所记录的闪存模块120中所进行的块擦除操作的总次数之间的差距来判断该块中的数据为热数据或是冷数据。如上所述,由于本实施例在判断冷/热数据的过程中仅仅需要使用本来就储存在块内的信息,故可以避免现有技术中需要储存额外信息而造成系统负担的问题。

上述块的擦除序号与闪存控制器110目前所记录的闪存模块120中所进行的块擦除操作的总次数之间的差距可以用来表示数据的冷热状态,差距越大代表数据越可以被视为是冷数据,而差距越小则代表数据写入时间不久故可以被视为是热数据。举例来说,假设闪存控制器110目前所记录的闪存模块120中所进行的块擦除操作的总次数为20000次,第一块中所记录的擦除序号为17000,第二块所记录的擦除序号为19500,则第一块中的数据可以被视为是冷数据,而第二块中的数据则可以被视为是热数据。

在本实施例中,闪存控制器110可以先计算出块的擦除序号与闪存控制器110目前所记录的闪存模块120中所进行的块擦除操作的总次数之间的差距,并根据此差距来进行一些数学运算或判断(例如,该差距是否大于一临界值)来决定该块中的数据为热数据或是冷数据。

图8为根据本发明另一实施例的管理闪存模块120的方法的流程图。参考图8及以上有关于判断冷数据及热数据的揭露内容,流程如下所述。

步骤800:流程开始。

步骤802:读取块中所储存的擦除序号。

步骤804:根据该擦除序号来判断该块中的数据为热数据或是冷数据。

步骤806:当该块中的数据被判断为冷数据时,将该块中的数据复制到另一块中。

步骤808:擦除该块中的数据。

简要归纳本发明,在本发明的管理闪存模块的方法中,首先提供了一种地址映射表的设计与管理方法,其可以将具有连续逻辑地址的区段合并为一个簇,并据此将多个区段地址映射数据缩减为单一笔的簇地址映射数据,以大幅降低地址映射表的容量,如此一来,可以加速逻辑/物理地址的搜寻速度,并延长闪存模块的寿命。在一实施例中,地址映射表是连同其他的区段数据写入至同一个数据页,以降低写入次数。此外,本发明另外提出了一种可以根据块中本身所储存的擦除序号来判断块中的数据为冷数据或是热数据的方法,以避免现有技术中需要储存额外信息而造成系统负担的问题与块之间无谓的数据搬移。

以上所述仅为本发明的较佳实施方式,凡依本发明权利要求所做的均等变化和修饰,均应属本发明的涵盖范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1