一种基于虚拟块闪存地址映射的数据写入及读出方法
技术领域
本发明涉及一种闪存控制器的数据写入及读出方法,具体涉及一种基于虚拟块闪存地址映射的闪存控制器数据写入及读出方法。
背景技术
SSD是英文solid state disk的缩写,即固态盘,它是一种把Nand flash芯片作为存储介质的存储器。它具有:数据存取速度快、经久耐用防震抗摔、工作时非常安静没有任何噪音产生等优点。
固态盘的核心部件是闪存控制器,它的功能就是控制和管理闪存芯片以及对外提供一个标准的接口。为了提高固体盘的速度,闪存控制器都是同时控制多个闪存芯片即多个通道,每个通道可以有多个芯片,每个通道是可以并行工作的,这样就提高了固体盘的读写速度。
目前公知的利用多通道进行并行读写的方法是一个基于逻辑条带的管理控制方法,这种方法是在每个通道中划分部分存储空间构成一个逻辑条带,用户在此逻辑条带上进行读写操作,这样就把逻辑上连续的数据分配到每个通道中。此方法的缺点是没有利用通道内的并行优势来提高速度,以及在逻辑条带的组织上不够灵活,使在对块进行回收和在回收前对块的利用率不高。
发明内容
本发明的目的在于提供一种基于虚拟块闪存地址映射的数据写入及读出方法,其解决了背景技术中没有利用通道内的并行优势来提高速度的技术问题。
本发明的技术解决方案是:
一种基于虚拟块闪存地址映射的数据写入及读出方法,其特殊之处在于,该方法包括以下步骤:
1)构建虚拟块
虚拟块的构成是由每个通道内每个芯片内的物理块的一部分构成,具体是将每个物理块等分成N块,然后将每个通道内每个芯片内取一个1/n个物理块来构成一个虚拟块;每个虚拟块由一个数据结构组成,该数据结构里记录了该虚拟块由那些物理块的那部分构成;
2)构建一个初始地址映射表
所述初始地址映射表包括逻辑地址页号和物理地址页号;
所述逻辑地址页号是由上位计算机给出一个逻辑地址,通过该逻辑地址对虚拟块包含扇区数求模得到虚拟块号的索引,用虚拟块号的索引作为下标在虚拟块表里找到相应的虚拟块地址,该虚拟块地址以页为单位的映射到一个虚拟块上的逻辑页上,得到一个逻辑地址页号;
所述物理地址页号是每个虚拟块地址以页为单位的映射,每个虚拟块由一个数据结构组成,该数据结构以页为单位的映射得到一个物理地址页号;
3)写入数据
3.1)计算机先写扇区的逻辑地址,通过该逻辑地址对虚拟块包含扇区数求模得到虚拟块号的索引,用虚拟块号的索引作为下标在虚拟块表里找到相应的虚拟块地址,得到逻辑块号在初始地址映射表中找到虚拟块号,再在虚拟块中找到一个空闲的页;
3.2)用上述逻辑地址对虚拟块包含扇区数求余得到该逻辑地址在虚拟块中的偏移地址,再用该偏移地址对通道数求模得到通道号,再用该偏移地址对一个页包含的扇区数求余得到此通道号里对应物理块的扇区偏移量,由此扇区偏移量得到物理地址,得到更新的逻辑地址页号对应的物理地址页号;
3.3)将更新后的逻辑地址页号和物理地址页号存入初始地址映射表中,完成初始地址映射表的更新;
3.4)通过更新后的初始地址映射表中物理地址页号对应的物理地址把数据写入该页,完成数据的写入;
4)读出数据
4.1)计算机先读扇区逻辑地址LBA,在地址映射表里搜索扇区逻辑地址LBA对应的逻辑页号;
4.2)如果找到,则取得该逻辑页号对应的物理地址通过驱动控制器读取扇区数据;
4.3)如果没有找到,则通过LBA计算出逻辑块号在更新后的地址映射表中找到虚拟块号,通过虚拟块数据结构里的物理块部分信息计算出物理地址页号,通过此物理地址页号对应的物理地址读出该页的数据,完成数据的读出。
上述虚拟块具体的构建过程是:
1)初始化nand flash芯片控制器,获取每个芯片的ID信息;
2)通过ID信息扫描每个芯片,并标记出坏块;
3)在内存中建立一个初始的块映射数组、虚拟块数组、物理块信息数组;并用初始值填充;
4)将内存中的这些信息保存到nand flash中的一个特定位置,该特定位置用户根据自身需要自定义,完成虚拟块的构建。
上述虚拟块具体的构建过程还可以包括一个优化记忆过程,该优化记忆过程具体是:
1)在进行读写操作后更新内存中的数据结构,并在断电前保存到nand flash中一个特定位置,该特定位置用户根据自身需要自定义;
2)初始化nand flash控制器;从nand flash中的特定位置读出管理信息到内存中;
3)由空闲内存数量确定扫描数量,再扫描的有效数据页,将映射关系保存到内存中的地址映射表中。
4)在进行读写操作后更新内存中的数据结构,在断电前保存到nand flash中的一个特定位置,该特定位置用户根据自身需要自定义;
上述用户自定义的方式具体是将需要保存到nand flash的信息放在某个芯片的第一个物理块中;如果一个块不能放下,可将其放在其他芯片的第一个物理块中,因为大多数芯片厂商保证每个芯片的第一个物理块是完好的。
本发明的优点在于:在用户数据的逻辑地址连续的情况下能将数据映射到多个通道中的多个芯片中,使通道的并行操作和通道内的并行操作同时进行,提高读写速度。同时在物理块部分空闲的情况下还能够用来构成虚拟块,提高了物理块的利用率,延长闪存芯片的寿命。
附图说明
图1为本发明虚拟块的构建结构示意图;
图2为本发明数据读出流程图;
图3为本发明数据写入流程图。
具体实施方式
参见图1、图2及图3,一种基于虚拟块闪存地址映射的数据写入及读出方法,该方法包括以下步骤:
1)构建虚拟块
虚拟块的构成是由每个通道内每个芯片内的物理块的一部分构成,具体是将每个物理块等分成N块,然后将每个通道内每个芯片内取一个1/n个物理块来构成一个虚拟块;每个虚拟块由一个数据结构组成,该数据结构里记录了该虚拟块由那些物理块的那部分构成;
2)构建一个初始地址映射表
所述初始地址映射表包括逻辑地址页号和物理地址页号;
所述逻辑地址页号是由上位计算机给出一个逻辑地址,通过该逻辑地址对虚拟块包含扇区数求模得到虚拟块号的索引,用虚拟块号的索引作为下标在虚拟块表里找到相应的虚拟块地址,该虚拟块地址以页为单位的映射到一个虚拟块上的逻辑页上,得到一个逻辑地址页号;
所述物理地址页号是每个虚拟块地址以页为单位的映射,每个虚拟块由一个数据结构组成,该数据结构以页为单位的映射得到一个物理地址页号;
3)写入数据
3.1)计算机先写扇区的逻辑地址,通过该逻辑地址对虚拟块包含扇区数求模得到虚拟块号的索引,用虚拟块号的索引作为下标在虚拟块表里找到相应的虚拟块地址,得到逻辑块号在初始地址映射表中找到虚拟块号,再在虚拟块中找到一个空闲的页;
3.2)用上述逻辑地址对虚拟块包含扇区数求余得到该逻辑地址在虚拟块中的偏移地址,再用该偏移地址对通道数求模得到通道号,再用该偏移地址对一个页包含的扇区数求余得到此通道号里对应物理块的扇区偏移量,由此扇区偏移量得到物理地址,得到更新的逻辑地址页号对应的物理地址页号;
3.3)将更新后的逻辑地址页号和物理地址页号存入初始地址映射表中,完成初始地址映射表的更新;
3.4)通过更新后的初始地址映射表中物理地址页号对应的物理地址把数据写入该页,完成数据的写入;
4)读出数据
4.1)计算机先读扇区逻辑地址LBA,在地址映射表里搜索扇区逻辑地址LBA对应的逻辑页号;
4.2)如果找到,则取得该逻辑页号对应的物理地址通过驱动控制器读取扇区数据;
4.3)如果没有找到,则通过LBA计算出逻辑块号在更新后的地址映射表中找到虚拟块号,通过虚拟块数据结构里的物理块部分信息计算出物理地址页号,通过此物理地址页号对应的物理地址读出该页的数据,完成数据的读出。
其中虚拟块具体的构建过程是:
1)初始化nand flash芯片控制器,获取每个芯片的ID信息;
2)通过ID信息扫描每个芯片,并标记出坏块;
3)在内存中建立一个初始的块映射数组、虚拟块数组、物理块信息数组;并用初始值填充;
4)将内存中的这些信息保存到nand flash中的一个特定位置,该特定位置用户根据自身需要自定义,完成虚拟块的构建。
虚拟块具体的构建过程最好还可以包括一个优化记忆过程提高读出数据的速度,该优化记忆过程具体是:
1)在进行读写操作后更新内存中的数据结构,并在断电前保存到nand flash中一个特定位置,该特定位置用户根据自身需要自定义;
2)初始化nand flash控制器;从nand flash中的特定位置读出管理信息到内存中;
3)由空闲内存数量确定扫描数量,再扫描的有效数据页,将映射关系保存到内存中的地址映射表中。
4)在进行读写操作后更新内存中的数据结构,在断电前保存到nand flash中的一个特定位置,该特定位置用户根据自身需要自定义。
其中户自定义的方式具体是将需要保存到nand flash的信息放在某个芯片的第一个物理块中;如果一个块不能放下,可将其放在其他芯片的第一个物理块中,因为大多数芯片厂商保证每个芯片的第一个物理块是完好的。
本方案是以虚拟块的设计为基础来进行的。虚拟块的构成是由每个通道内每个芯片内的物理块的一部分构成,即将每个物理块等分成N块,然后将每个通道内每个芯片内取一个1/n个物理块来够成一个虚拟块。每个虚拟块由一个数据结构组成。结构里记录了该虚拟块由那些物理块的那部分构成。以此来进行从虚拟块上的地址映射到物理块上的地址。而构成虚拟块的物理分块可以是任意通道和任意芯片的内的物理分块。这样就可以在有效的利用所有的空闲物理分块。
本方案在虚拟块上的地址映射是以页为单位的,每一个逻辑地址都映射到一个虚拟块上的逻辑页上,在此方案中除了通过块的方式进行地址映射,还建立了一种快速的地址映射表。它是将逻辑页号和物理页地址对应起来的一个地址映射表,通过它大大加快在读操作时的地址映射速度。通过将系统内存适当的加大能够扩大该地址映射表,以至能够存放更多的从逻辑到物理的映射关系来加快读操作地址的地址映射。这些地址的映射关系通过在进行写操作的时候将其保存到地址映射表中。