王志刚, 夏汉铸
(中山火炬职业技术学院,广东 中山 528436)
近年来,随着半导体工艺和电子科学技术的不断进步,闪速存储器的存储容量和读写速度得到了飞速的发展。闪存按其内部结构的不同分为NOR和NAND两种。NOR闪存(Flash)技术是由Intel于1988年首先开发出的,其彻底改变了原先由EPROM和EEPROM一统天下的局面,日立公司在1989年发表了NAND Flash结构,这种结构强调降低每比特的成本、更高的存储性能,并且能像磁盘一样可以通过接口轻松升级,特别适合大容量文件和数据的存储。相比NOR Flash而言NAND Flash以其高密度、大容量、高数据存储速率以及更多擦除次数等优势,在消费类电子产品、数据采集系统和工业控制中得到了广泛的应用[1-3]。
由于NAND Flash的操作特点是一次只能擦除操作整个物理块,这就导致会频繁的对NAND Flash进行读写操作。频繁地读写NAND Flash势必造成一定量的坏块,坏块是不可擦除或进行写操作的,从而影响整个系统的性能和NAND Flash的使用寿命[4]。为了更有效的进行读写操作进而尽量减少坏块的产生,文中提出了一种访问NAND数据的方法,该方法可以有效提高访问NAND的速度,从而延长NAND的使用寿命。
在用户端和 NAND之间建立一个缓存,用于NAND读写过程中数据的缓存,缓存大小是NAND块大小的整数倍,并以块大小为单位进行管理,当缓存块都被使用后,缓存块申请采用基于“缓存块使用率”高低来决定哪个缓存块被替换,其数据缓存机制机构图见图1。
图1 数据缓存机制结构
缓存机制包括以下几个部分:
1)用户端:指需要从 NAND读数据的接口程序。对用户端来说,NAND就是一段连续的存储空间,使用线性地址对NAND进行访问。
2)NAND逻辑块:逻辑块在地址上连续,物理块指的是NAND实际的块,逻辑块和物理块有一一对应的关系。
3)NAND Buffer数据缓存:NAND数据缓存部分根据NAND的擦除特点(擦除以块为单位)设计,缓存大小是块的整数倍,以块大小为单位对缓存进行管理。
用户需要从 NAND读出数据或者将数据写入NAND,缓存用于暂时存储读写过程中的数据[7]。
碳纳米管提升复合材料力学性能的两个主要性质包括高模量和高强度.碳纳米管对于复合材料的力学增强主要是改变其本身的长径比以及管径尺寸,碳纳米管与基体材料的界面结合情况也是影响复合材料力学强度的因素之一.故复合材料中碳纳米管往往是决定其力学性能的关键.现有研究表明碳纳米管能够明显改善复合材料的拉伸强度,同时温度也是影响复合材料力学性能的重要因素,但并没有对复合材料的其它性能造成明显的影响.含碳纳米管复合材料具有高模量、高强度、低密度和尺寸稳定等优良力学性能,可以广泛应用于航天航空、能源交通和体育器材等领域.
本访问NAND闪存数据的方法为,创建NAND缓存,在访问NAND闪存数据时,先根据要访问的NAND闪存的线性地址,计算出要访问的NAND闪存的逻辑块号(WriteBlockNum),再根据逻辑块号判断(逻辑块)是否在NAND缓存中命中。如果命中,则对命中的缓存块进行访问;如果未命中,访问为写操作时,申请一个缓存块,并将逻辑块号记录到缓存块对应的信息中,再对此缓存块进行写操作;访问为读操作时,直接从NAND闪存中读取数据;当缓存块都已使用时,采用基于“缓存块使用率”的缓存替换机制[8]。
具体实现包括写操作、读操作、同步操作、缓存块替换操作。下面对各个过程作详细的描述。
NANDBuf由n个(n>=1)BlockBuf组成,每个BlockBuf的大小是NAND块大小,所以需要申请n个Block大小的内存。NAND Buffer需要创建一个计数器BufAccessCnt,用于记录NANDBuf的访问次数。
每个缓存块又包含以下几个信息:
status:缓存块状态。包含unused、clean、dirty这3种状态;unused表示缓存块未申请;clean表示缓存块已申请,且缓存数据和NAND中的数据一致;dirty表示已经申请且缓存的数据相对NAND的数据有修改;
HitBlockNum:命中的逻辑块号。表示本缓存块命中的逻辑块号,如果没有命中值为“-1”;
HitCntStart:逻辑块数据刚缓存到缓存块时,BufAccessCnt的值;
HitAccessTimes:逻辑块命中周期内,对缓存块读写的次数。这个值和 BufAccessCnt、HitCntStart一起用于计算缓存块的使用率;
WriteBlockNum:用户往NAND线性地址写数据时,根据线性地址计算出来的NAND的逻辑块号。计算方法:WriteBlockNum =(线性地址)/(块大小)。
写操作流程如图2所示。首先计算WriteBlock Num,判断WriteBlockNum是否在缓存中命中。
图2 写操作流程
如果未命中,从缓存中申请一个缓存块(申请方法见3.5节),将WriteBlockNum对应的物理块数据读到缓存块中,并将待写数据写入缓存块中;同时更新对应缓存块的管理信息:HitBlockNum为WriteBlockNum,status为 dirty,BufAccessCnt加“1”,HitCntStart等于 BufAccessCnt,HitAccessTimes加“1”。
如果命中,将数据写入缓存块中,同时更新缓存的管理信息,status为 dirty,BufAccessCnt、HitAccessTimes各加“1”。
读操作流程如图3所示。首先计算WriteBlock Num,判断WriteBlockNum号是否在缓存中命中。
如果命中,则从缓存中读取数据,并更新缓存相关信息:BufAccessCnt加 1,HitAccessTimes加 1。
如果未命中,则直接从NAND中读取数据。
图3 读操作流程
同步是将缓存中的dirty数据回写到NAND中,具体操作是遍历整个缓存,看是否有dirty状态的缓存块,如果有则将将数据回写到NAND中,并更新相应的状态信息:status为unused, HitCntStart为-1,HitAccessTimes为0。其中同步的时机如下:
1)NANDBuf中所有缓存块都已经被使用,而此时又有新的数据需要缓存,此时需要将使用率低的缓存块取消命中,用作新的逻辑块缓存,这种情况需要将缓存块数据同步到NAND中。
2)设备要卸载,需要将缓存中的数据同步到NAND中。
3)系统需要重启时,需要将缓存中的数据同步到NAND中。
此外,用于定时同步数据。创建一个定时器,设置一个时间值,如果在设定的时间内,用户端没有对缓存进行读/写操作,则执行同步操作其同步操作流程图见图4。
图4 同步操作流程
如果缓存块未申请完,则申请一个未使用的缓存块,如果缓存块都已经被申请完,则会出现替换操作。替换就是把某一缓存块数据回写到NAND,使之处于未命中状态,然后将这个缓存块用作其他逻辑块的缓存。这里的替换采用基于“缓存块使用率”的方法。使用率是指缓存块被操作的概率,概率最低的,最先被替换。缓存块使用率的计算方法是:(HitAccess Times)/( BufAccessCnt -HitCntStart) 。
缓存块的申请流程流程图见图5。
图5 缓存块的申请流程
大量对NAND的读写操作,实际上只要通过操作缓存就可以实现,而缓存的读写速度又远远高于NAND设备的读写速度。因此文中提出基于内存的数据缓存机制访问NAND的方法和基于“缓存块使用率”的缓存替换机制,该方法不仅大大提高了缓存的有效命中率,而且大大提高NAND的读写速度;采用文中的数据缓存机制,对于NAND的写操作,由于不需要每次都写入NAND,因此减少了NAND的擦写次数,降低了坏块产生的几率,从而延长了NAND的使用寿命。
[1] LIN Chuan-sheng, DUNG Lan-rong.A NAND Flash Memory Controller for SD/MMC Flash Memory Card[J]. IEEE Trans on Magnetics, 2007,43(02):78-84.
[2] HOYOUNG J, HYOKI S, SUNGMIN P. LRU-WSR: Integration of LRU and Writes Sequence Recording for Flash Memory[J]. Consumer Electronics, IEEE Trans on,2008(54):1215-1223.
[3] 韩勇豪,王少云.一种 NAND Flash动态坏块管理算法的设计与实现[J].信息化研究,2011,37(03):23-26.
[4] ZHANG X M, PARHI K K.High-speed Architectures for Parallel Long BCH Encodes[J]. IEEE Trans on Very Large Scale Integration(VLSI)systems,2005,13(07):872-877.
[5] 侯建,帅仁俊,侯文.基于云计算的海量数据存储模型[J].通信技术,2011,44(05):163-165.
[6] 祖研,帅仁俊,陈平.基于分布式文件系统的图片存储服务的研究[J].通信技术,2011,44(04):138-139.
[7] 杨金孝,赵强,杨百平,等.一种改进型SUSAN算法的FPGA实现[J].信息安全与通信保密,2010(03):57-59.
[8] 李岩,邱卫东,卢致旭,等.计算机取证中磁盘快速搜索算法研究[J].信息安全与通信保密,2010(04):78-80.