固态储存装置及其数据编程方法与流程

文档序号:12550590阅读:288来源:国知局
固态储存装置及其数据编程方法与流程

本发明涉及一种固态储存装置及其数据编程方法,且特别是涉及一种可执行无用单元收集(garbage collection)动作的固态储存装置及其包含无用单元收集动作的数据编程方法。



背景技术:

众所周知,固态储存装置(Solid State Device,SSD)使用与非门闪存(NAND flash memory)为主要储存元件,而闪存为一种非易失性(non-volatile)存储器。也就是说,当数据编程(program)至闪存后,即使系统电源关闭,数据仍保存在闪存中。

请参照图1,其所示为已知固态储存装置的示意图。固态储存装置10中包括一控制器101、一缓冲元件(buffering element)107与一闪存105。控制器101连接至缓冲元件107与闪存105。再者,控制器101利用一外部总线20与主机(host)12之间进行指令与数据的传递。

当主机12输出写入数据(write data)欲编程至闪存105时,控制器101会先将写入数据进行ECC编码程序,之后再将写入数据暂存于缓冲元件107。而控制器101会适时的进行编程动作,将缓冲元件107中的写入数据编程至闪存105。

其中,缓冲元件107为高速缓存存储器(cache memory),可利用SRAM或者DRAM来实现。另外,外部总线20可为USB总线、IEEE 1394总线、PCIe总线或SATA总线等等。

一般来说,闪存中105包括多个区块(block),而每个区块中又包括多个页(page)。例如,闪存中105中有1024个区块,而每个区块中有64页,每个页的容量为4K bytes。再者,由于闪存105的特性,数据编程是以页为基本单位来进行编程动作(program action),而数据擦除(erase)则是以区块为单位进行区块擦除动作(block erase action)。

再者,主机12是以逻辑区块地址(logical block address,简称LBA)来存 取闪存105。而一个LBA可对应至512字节(512bytes)的数据。换言之,当主机12欲将写入数据编程至闪存时,主机12会先产生写入命令(write command)及LBA至控制器101。之后,主机12再将对应的写入数据输出至控制器101。而控制器101会将写入数据暂存于缓冲元件107中。

假设闪存105中一个页的数据量为4Kbytes,则8个LBA的数据量等于一个页的数据量。由于闪存105是以页为基本单位来进行编程,所以当缓冲元件107中暂存的数据量达到或超过一页的数据量时,控制器101即可启动编程动作,并且以页为基本单位将数据编程至闪存中105。

另外,控制器101会于闪存105中选定一个空白区块来进行数据编程,称为开启区块(open block)。当控制器101进行编程动作时,会将缓冲元件107中暂存的数据编程至开启区块。当开启区块填满数据后,控制器101会再选定另一空白区块为开启区块,并继续将缓冲元件107中的数据编程至开启区块。

由于闪存105是以区块为擦除单位,每个页内的数据无法单独被擦除并更新(update),因此当闪存105接收到更新数据时,会将更新数据储存在新页(空白页)内,而原来旧页中的原始数据则被视为无效数据。如此,闪存105在经过长时间的存取之后,许多区块中都会包含有效数据以及无效数据,且闪存105的可编程空间会逐渐减少。

请参照图2A至图2C,其所示为已知闪存进行数据更新的示意图。以下是以闪存105中有五个区块(Block_1~Block_5),每个区块中有四页(Page_1~Page_4)为例来进行说明。

如图2A所示,假设区块1(Block_1)与区块2(Block_2)中所有的页内已分别储存有Data1~Data8的数据。

假设主机12输出写入数据Data8′、Data2′、Data9、Data10、Data11、Data7′、Data12、Data13欲编程至闪存105中。其中,Data2′、Data7′、Data8′是Data2、Data7、Data8的更新数据,而Data9~Data13是新数据。

如图2B所示,控制器101先选定区块3(Block_3)为开启区块,并将Data8′、Data2′、Data9、Data10编程至区块3(Block_3)。之后,控制器101再选定区块4(Block_4)为开启区块,并将Data11、Data7′、Data12、Data13编程至区块4(Block_4)中。其中,旧的Data2、Data7、Data8则被视为无效数据(以斜线来表示)。

接着,假设主机12输出写入数据Data14、Data3′、Data7″、Data12′欲编程至闪存105中。其中,Data3′、Data7″、Data12′是Data3、Data7′、Data12的更新数据,而Data14是新数据。

如图2C所示,控制器101选定区块5(Block_5)为开启区块,将Data14、Data3′、Data7"、Data12′编程至区块5(Block_5)。其中,旧的Data3、Data7′、Data12′则被视为无效数据(以斜线来表示)。

由以上的说明可知,经过多次的编程之后,闪存105中会出现许多的无效数据,且闪存105的可编程空间会逐渐减少。由于闪存105的擦除最小单位为区块,而图2C所示的闪存105中虽然有部分区块中具有无效数据,但是这些区块中仍有部份的有效数据,因此控制器101无法直接擦除上述区块。

由于闪存105中已经没有足够的储存空间,所以为了将储存无效数据的空间释放出来,固态储存装置10的控制器101会进行无用单元收集(garbage collection)动作,以释放储存无效数据的空间,增加可编程空间。

一般来说,主机12可针对闪存105进行随机写入(random write)或者连续写入(sequential write)。于主机12输出的写入命令中,如果逻辑区块地址(LBA)不是连续地址即为随机写入。反之,如果写入指令中的LBA为连续地址,即为连续写入。其中,当主机12进行连续写入时,主机12会输出连续的写入数据储存至闪存105,例如连续数据重写(overwrite)或连续数据更新。以下延续图2C来说明已知闪存包含无用单元收集动作的编程流程。

请参照图3A至图3F,其所绘示为已知固态储存装置中闪存包含无用单元收集动作的编程流程示意图。假设,控制器101欲将区块1(Block_1)及区块2(Block_2)中储存无效数据的空间清出,以便于编程新数据。首先,如图3A所示,控制器101将区块1(Block_1)及区块2(Block_2)中的有效数据Data1、Data4、Data5、Data6搬移(move)至缓冲元件107。搬移完成后,再将区块1(Block_1)及区块2(Block_2)中Data1、Data4、Data5、Data6视为无效数据(以斜线来表示)。

基本上,控制器101在搬移欲清除的区块中的有效数据时,缓冲元件107仍可继续接收主机12输出的写入数据。换句话说,控制器101可同时执行无用单元收集动作以及接收主机12输出的写入数据。因此,如图3A所示,缓冲元件107中包括欲清除的区块(区块1(Block_1)及区块2(Block_2)) 中的有效数据Data1、Data4、Data5、Data6,以及主机12输出的写入数据Data15、Data16、Data17、Data18。其中,写入数据Data15、Data16、Data17、Data18是连续写入数据。

接着,于确认区块1(Block_1)及区块2(Block_2)中已无任何有效数据后,如图3B所示,控制器101即可对区块1(Block_1)及区块2(Block_2)进行区块擦除动作,使区块1(Block_1)及区块2(Block_2)成为空白区块。

接着,如图3C所示,控制器101即可进行编程动作并将缓冲元件107中的数据编程至闪存105中,并且完成一次包含无用单元收集动作的编程流程。其中,控制器101先选定区块1(Block_1)为开启区块,将Data1、Data15、Data4、Data16编程至区块1(Block_1)。接着,控制器101选定区块2(Block_2)为开启区块,将Data17、Data5、Data6、Data18编程至区块2(Block_2)。

由以上的说明可知,当控制器101进行包含无用单元收集动作的编程流程时,若欲清除的区块中同时储存有有效数据及无效数据时,控制器101需要将欲清除的区块中的有效数据搬移至缓冲元件107,同时也需要接收主机12所输出的写入数据,并将写入数据暂存至缓冲元件107。换言之,已知固态储存装置10在进行包含无用单元收集动作的编程流程时,缓冲元件107内会交错地暂存无用单元收集动作所搬移的有效数据以及主机12所输出的写入数据。因此,当控制器101将缓冲元件107中的数据编程至闪存105中的开启区块(open block)后,该区块中也会交错地储存无用单元收集动作中所搬移的有效数据以及主机12所输出的写入数据,如图3C中的区块1(Block_1)及区块2(Block_2)所示。

再者,如图3C所示,由于闪存105又再次没有足够的储存空间,所以控制器101需要再次执行无用单元收集动作,以便于编程新数据。

假设,主机12输出写入数据Data15′、Data16′、Data17′、Data18′欲编程至闪存105中,其中,写入数据Data15′、Data16′、Data17′、Data18′是连续写入数据,且为Data15、Data16、Data17、Data18的更新数据。如图3C所示,虽然区块1(Block_1)及区块2(Block_2)中旧的Data15、Data16、Data17、Data18将因数据更新而被视为无效数据,但由于区块1(Block_1)及区块2(Block_2)仍储存有先前无用单元收集动作所搬移的有效数据,因此控制器101需要再次进行无用单元收集动作,并再次将这些有效数据搬移至缓冲元件107,以便对区块1(Block_1)及区块2(Block_2)进行区块擦除动作。

请参照图3D至图3F,其所绘示为已知固态储存装置执行另一次包含无用单元收集动作的编程流程示意图。首先,如图3D所示,控制器101将区块1(Block_1)及区块2(Block_2)中的有效数据Data1、Data4、Data5、Data6搬移(move)至缓冲元件107。搬移完成后,再将区块1(Block_1)及区块2(Block_2)中Data1、Data4、Data5、Data6视为无效数据(以斜线来表示)。

同理,控制器101在搬移欲清除的区块中的有效数据时,缓冲元件107仍可接收主机12输出的写入数据。因此,如图3D所示,缓冲元件107中包括欲清除的区块(区块1(Block_1)及区块2(Block_2))中的有效数据Data1、Data4、Data5、Data6、以及主机12输出的写入数据Data15′、Data16′、Data17′、Data18′。其中,区块1(Block_1)及区块2(Block_2)中旧的Data15、Data16、Data17、Data18因数据更新而被视为无效数据。

接着,于确认区块1(Block_1)及区块2(Block_2)中已无任何有效数据后,如图3E所示,控制器101即可对区块1(Block_1)及区块2(Block_2)进行区块擦除动作,使区块1(Block_1)及区块2(Block_2)成为空白区块。

接着,如图3F所示,控制器101即可进行编程动作并将缓冲元件107中的数据编程至闪存105中,并且完成一次包含无用单元收集动作的编程流程。其中,控制器101先选定区块1(Block_1)为开启区块,将Data1、Data15′、Data16′、Data4编程至区块1(Block_1)。接着,控制器101选定区块2(Block_2)为开启区块,将Data17′、Data18′、Data5、Data6编程至区块2(Block_2)。

同理,当控制器101将缓冲元件107中的数据编程至闪存105中的开启区块(open block)后,该区块中也会交错地储存无用单元收集动作中所搬移的有效数据以及主机12所输出的写入数据,如图3F中的区块1(Block_1)及区块2(Block_2)所示。

再者,于图3F的状况,由于闪存105又再次没有足够的储存空间,此时,若主机12欲再次更新或重写连续写入数据Data15′、Data16′、Data17′、Data18′时,控制器101需要再次执行无用单元收集动作,并再次重复搬移在先前无用单元收集动作所搬移的有效数据。其运作情况不再赘述。

请参阅图4,其绘示为已知固态储存装置中闪存的数据储存示意图。根据已知固态储存装置10的数据编程方法,当闪存105没有足够的空间,并进行多次的包含无用单元收集动作的编程流程之后,每个区块(Block_1~Block_n)中会包括无用单元收集动作中所搬移的有效数据(GC)以 及主机12所输出的写入数据(H)。

根据已知固态储存装置10的数据编程方法。当固态储存装置10中的闪存105的储存状况如图4所示且主机12进行连续数据写入时,控制器101必须持续的进行无用单元收集动作,并重复地搬移在先前无用单元收集动作中所搬移的有效数据以产生空白区块,而开启区块中还是储存无用单元收集动作中所搬移的有效数据(GC)以及主机12所输出的写入数据(H)。如此,将导致固态储存装置10的写入速度(write speed)下降并且无法有效地提升。

由以上的说明可知,由于根据已知固态储存装置10的数据处理方法,闪存105中的区块会交错地储存有无用单元收集动作中所搬移的有效数据(GC)及主机12的写入数据(H)。所以在主机10以连续写入的方式进行的连续数据重写或连续数据更新的过程,控制器101需持续进行无用单元收集动作,并重复地搬移在先前无用单元收集动作中所搬移的有效数据。再者,控制器101需先进行将欲清除的区块中的有效数据搬移至缓冲元件107后,才能进行区块擦除动作,并将数据编程至闪存105中。再者,由于缓冲元件107中仍包括有效数据(GC)以及写入数据(H),所以有效数据(GC)与写入数据(H)仍会交错地被编程至开启区块中。

由于连续写入的过程,控制器101需要同时不断地进行无用单元收集动作,并重复地搬移在先前无用单元收集动作中所搬移的有效数据,因此固态储存装置10的写入速度会高低变化,并且无法到达较高的写入速度。



技术实现要素:

本发明涉及一种固态储存装置,经由一外部总线连接至一主机,该固态储存装置包括:一控制器;以及一闪存,连接至该控制器,且包括多个区块;其中,该控制器用以决定是否启动一无用单元收集动作;并于决定启动该无用单元收集动作时,于该闪存中的这些区块中选定一第一开启区块,用以储存执行该无用单元收集动作时所搬移的一有效数据;以及编程该无用单元收集动作时所搬移的该有效数据至该第一开启区块;其中,该闪存中的这些区块具有另一被选定的一第二开启区块,用以储存由该主机输出的一写入数据。

本发明有关于一种固态储存装置的数据编程方法,该固态储存装置具有一闪存,该闪存包括多个区块,该数据编程方法包括下列步骤:决定是否启 动一无用单元收集动作;于决定启动该无用单元收集动作时,于该闪存中的这些区块中选定一第一开启区块,用以储存执行该无用单元收集动作时所搬移的一有效数据;以及编程该无用单元收集动作时所搬移的该有效数据至该第一开启区块;其中,该闪存中的这些区块具有另一被选定的一第二开启区块,用以储存由该主机输出的一写入数据。

为了对本发明上述及其他方面有更佳的了解,下文特举较佳实施例,并结合附图详细说明。

附图说明

图1所绘示为已知固态储存装置的示意图。

图2A至图2C所绘示为闪存进行数据更新的示意图。

图3A至图3F所绘示为已知固态储存装置中闪存包含无用单元收集动作的编程流程示意图。

图4所绘示为已知固态储存装置中闪存的储存数据示意图。

图5所绘示为本发明实施例固态储存装置的示意图。

图6A至图6F所绘示为本发明实施例固态储存装置中闪存包含无用单元收集动作的编程流程示意图。

图7所绘示为本发明实施例固态储存装置中闪存的储存数据示意图。

具体实施方式

请参考图5,其所绘示为本发明固态储存装置的示意图。固态储存装置50中包括一控制器501、一缓冲元件(buffering element)510与一闪存505。控制器501连接至缓冲元件510与闪存505。再者,控制器501利用一外部总线55与主机(host)52之间进行指令与数据的传递。

根据本发明的实施例,缓冲元件510中还划分为第一储存区512与第二储存区514。其中,无用单元收集动作中搬移的有效数据(GC)暂存于第一储存区512,而主机52所输出的写入数据(H)暂存于第二储存区514。

再者,本发明的固态储存装置50中,控制器501还可于闪存505中选定二个空白区块,并定义为第一开启区块与第二开启区块。其中,第一开启区块用以储存无用单元收集动作中搬移的有效数据(GC),而第二开启区块用以储存主机52所输出的写入数据(H)。换句话说,控制器501进行编程时, 将第一储存区512中的有效数据(GC)与第二储存区514中的写入数据(H),分别储存于第一开启区块与第二开启区块。当第一开启区块被编程且填满之后,控制器501再由闪存505中选定另一第一开启区块,用以储存无用单元收集动作中搬移的有效数据(GC)。同理,当第二开启区块被编程且填满之后,控制器501再由闪存505中选定另一第二开启区块,用以储存主机52所输出的写入数据(H)。

换言之,控制器501可将无用单元收集动作中搬移的有效数据(GC)与主机52所输出的写入数据(H)分别编程于不同的开启区块,以避免发生一个区块中同时包括无用单元收集动作中搬移的有效数据(GC)以及主机52所输出的写入数据(H),并可有效地提升固态储存装置10的写入速度。

请参照图6A至图6F,其所绘示为本发明固态储存装置中闪存包含无用单元收集动作的编程流程示意图。此流程是延续图2C中闪存105来进一步说明本发明所揭示的方法。在图2C中,闪存105已没有足够的可编程空间来储存新数据,因此控制器501需进行无用单元收集动作。

首先,如图6A所示,控制器501先将区块1(Block_1)与区块2(Block_2)中的有效数据Data1、Data4、Data5、Data6搬移至缓冲元件510中的第一储存区512。搬移完成后,再将区块1(Block_1)与区块2(Block_2)中的Data1、Data4、Data5、Data6视为无效数据(以斜线来表示)。

相同地,控制器501在搬移闪存505中的有效数据时,缓冲元件510仍可继续接收主机52输出的写入数据。换句话说,控制器501可同时执行无用单元收集动作以及接收主机52输出的数据。因此,如图6A所示,缓冲元件510中的第一储存区512中储存无用单元收集动作中搬移的有效数据Data1、Data4、Data5、Data6,而主机52输出的写入数据Data15、Data16、Data17、Data18则储存于第二储存区514。其中,Data15、Data16、Data17、Data18为新数据且为连续写入数据。

接着,于确认区块1(Block_1)与区块2(Block_2)中已无任何有效数据后,如图6B所示,控制器501即可对区块1(Block_1)与区块2(Block_2)进行区块擦除动作,使区块1(Block_1)与区块2(Block_2)成为空白区块。

接着,如图6C所示,控制器501即可进行编程动作并将缓冲元件510中的数据编程至闪存505中,并且完成一次包含无用单元收集动作的编程流程。其中,控制器501选定区块1(Block_1)为第一开启区块,将Data1、Data4、 Data5、Data6编程至第一开启区块,亦即区块1(Block_1);再者,控制器501选定区块2(Block_2)为第二开启区块,将Data15、Data16、Data17、Data18编程至第二开启区块,亦即区块2(Block_2)。

明显地,区块1(Block_1)中的所有数据皆为无用单元收集动作中搬移的有效数据(GC),并且区块2(Block_2)中的所有数据皆为主机52所输出的写入数据(H)。

再者,由于图6C中,闪存505又再次没有足够的储存空间,所以控制器501需要再次执行无用单元收集动作,以便于编程数据至闪存505。假设,主机52输出写入数据Data15′、Data16′、Data17′、Data18′欲编程至闪存505中,其中,写入数据Data15′、Data16′、Data17′、Data18′是连续写入数据Data15、Data16、Data17、Data18的更新数据。由于在前次的包含无用单元收集动作的编程流程中,无用单元收集动作中搬移的有效数据皆是储存于第一开启区块,亦即区块1(Block_1),因此第二开启区块,亦即区块2(Block_2),仅储存主机52输出的写入数据Data15、Data16、Data17、Data18,而未储存无用单元收集动作中搬移的有效数据。因此,当储存于区块2(Block_2)中旧的Data15、Data16、Data17、Data18因数据更新而被视为无效数据时,控制器501可直接对区块2(Block_2)进行区块擦除动作来取得储存空间以编程数据,而无须进行有效数据的搬移动作。

请参照图6D至图6F,其所绘示为固态储存装置执行另一次包含无用单元收集动作的编程流程示意图。如图6D所示,主机52输出的写入数据Data15′、Data16′、Data17′、Data18′暂储存于第二储存区514,而储存于区块2(Block_2)中旧的Data15、Data16、Data17、Data18因数据更新而被视为无效数据(以斜线来表示)。接着,于确认区块2(Block_2)中已无任何有效数据后,如图6E所示,控制器501即可对区块2(Block_2)进行区块擦除动作,使区块2(Block_2)成为空白区块。

接着,如图6F所示,控制器501即可进行编程动作并将缓冲元件510中的数据编程至闪存505中,并且完成另一次包含无用单元收集动作的编程流程。其中,控制器501选定区块2(Block_2)为第二开启区块,将Data15′、Data16′、Data17′、Data18′编程至第二开启区块,亦即区块2(Block_2)。须注意的是,在此次包含无用单元收集动作的编程流程中,无用单元收集动作并不需要重复进行有效数据的搬移及编程动作,仅需直接进行区块擦除动作。 如此,将可有效地避免固态储存装置50的写入速度下降。

由以上的说明可知,根据本发明提出的固态储存装置,控制器501可选择二个空白区块作为第一开启区块及第二开启区块,并用以分别储存无用单元收集动作中搬移的有效数据(GC),以及主机输出的写入数据(H)。在本发明实施例中,缓冲元件510中更划分为第一储存区与第二储存区,并用以分别暂储存无用单元收集动作中搬移的有效数据(GC),以及主机所输出的写入数据(H)。

因此,如图7所示,闪存505中的所有区块(Block~1~Block_n)不是被编程无用单元收集动作中搬移的有效数据(GC),就是被编程主机所输出的写入数据(H)。不会有任何区块同时包括无用单元收集动作中搬移的有效数据(GC)以及主机所输出的写入数据(H)。

再者,当闪存505被编程且填满后,当主机52进行连续数据更新或重写(overwrite)时,由于闪存505中储存写入数据(H)的区块中完全没有任何无用单元收集动作所搬移的有效数据(GC)。因此,于进行连续数据更新或重写时,闪存505中储存写入数据(H)的区块有很高的机率会因数据被更新而使区块内的数据皆为无效数据,因此控制器501不需要重复进行有效数据的搬移及编程动作。控制器501仅需将数据皆为无效数据的区块进行擦除后,便可设定该被擦除的空白区块为第二开启区块,并直接将写入数据编程于第二开启区块。

根据本发明的实施例,由于控制器501不再需要重复进行有效数据的搬移及编程动作,因此控制器501可以维持在较高的写入速度将主机52输出的写入数据编程于闪存505中。

此外,在本发明实施例中,控制器501可根据闪存505的可编成空间的大小来决定是否启动无用单元收集动作。其中,若闪存505具有足够的可编成空间,则控制器501可决定无须启动无用单元收集动作,并选定一第一开启区块用来储存主机输出的写入数据。反之,若闪存505的可编程空间不足时,则控制器501可决定启动无用单元收集动作,并选定一第二开启区块用来储存无用单元收集动作中所搬移的有效数据。其中,若在启动无用单元收集动作的过程中,主机亦输出写入数据欲编程至闪存505时,控制器501会选定一第一开启区块用来储存主机输出的写入数据,以及一第二开启区块用来储存无用单元收集动作中所搬移的有效数据。

由以上的说明可知,本发明提出一种固态储存装置及其数据编程方法。通过将无用单元收集动作中搬移的有效数据(GC),以及主机输出的写入数据(H)分别储存在不同的区块中,使固态储存装置50可以维持用较高的写入速度来编程闪存505,提高固态储存装置50的整体效能(performance)。

综上所述,虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明。本发明本领域技术人员,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书界定者为准。

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