一种NandFlash缓冲管理方法技术

技术编号:2916966 阅读:241 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种NandFlash缓冲管理方法通过采用多个缓存提高了读写效率,引入链表数组并且采用双链表嵌套,提高了对缓存单元的访问效率,在数据链表中采用最近最少使用的方法,提高了数据链表的访问效率。

【技术实现步骤摘要】

本专利技术涉及一种NandFlash缓冲管理方法,特别是一种利用散列链表数组和多个缓存单元配合管理NandFlash缓冲的方法。
技术介绍
NandFlash作为一种常用的非易失性闪存已被广泛地应用在各种数码产品中。系统对NandFlash的访问速度是影响整个产品性能的重要因素,NandFlash的结构是以块为单位的,每个块包含固定大小的页,每个页包括固定大小的比特值。系统对NandFlash访问的常用方法有两种:直接访问,即没有系统缓存单元,直接的驱动NandFlash进行读写。这种做法虽然简单,易于实现,但缺点明显。由于NandFlash修改某个比特时,只能从1修改为0,即便是对一个比特的修改也需要将该比特所在整个块擦除,再重新写入。所以在这种方式中,往块A中写入数据的流程如图1所示,先申请一个块大小的连续内存空间缓存,将要写入到块A中的数据对应的写入到缓存中,对块A执行块擦除操作,然后将缓存写回到块A。不难看出这种方法效率很低。另一个方法是系统申请一个块大小的连续内存空间缓存,并保留与缓存中数据对应的块号A,执行读出写入块B的某些数据的操作。具体来说,系统首先判断待读出或写入的块B的块号与缓存中的块号A是否相同,如果相同则直接在缓存中读出数据,如果A与B不相同,则将块缓存中的数据写回到块号A所对应的物理块上,并将块B中的数据读出写入到缓存中,此过程分别如图2、图3所示。在此种方法中,无论读写操作,系统都先访问缓存,判断缓存内容是否为需要的数据,如果是则直接使用缓存中的数据,如果不是则将缓存中的数据写回其对应的物理块中再将块B的内容写入缓存。-->这样的操作虽然减少了反复擦除NandFlash块的操作,但是如果遇到系统频繁访问NandFlash,并且访问区域分布于不同的块上,这样简单的读写方法不能满足需求。
技术实现思路
有鉴于此,本专利技术的目的在于提供一种NandFlash缓冲管理方法,能较好的提高缓存的访问效率,加快系统对NandFlash的访问速度,提高系统的整体性能。为了达到上述目的,本专利技术一种Nan dFlash缓冲管理方法,包括:在内存中建立一个与NandFlash物理块地址一一对应的链表数组;在内存中开辟多个缓存单元用于缓存NandFlash中的数据;和根据所述链表数组与多个缓存单元配合对NandFlash进行读写操作。进一步地,所述多个缓存单元由一个链表头采用双向链表的形式链接成数据链表;所述链表数组包括链表索引数组,用于在链表数组中定位对应的NandFlash物理地址,链表数组中的数据所对应的NandFlash物理地址与同一个NandFlash物理地址在链表数组中相应的元素对应。进一步地,在读写操作中,将写入数据的缓存单元通过指针链入NandFlash物理地址对应的链表数组中,修改该写入数据的缓存单元的单元修改标记,所述单元修改标记用于标识该缓存单元是否被修改过。进一步地,根据最近最少使用原则将写入数据的缓存单元移动到链表头后面紧挨链表头的位置。进一步地,在读写过程中,将缓存单元内的数据与该数据在NandFlansh上对应的物理块关联,当缓存单元内数据被修改且有新的数据需要写入该缓存单元中的时候,将该缓存单元中的旧有数据写回其对应的物理块中。进一步地,所述方法在读NandFlash操作的过程包括:步骤101,计算出待读出NandFlash数据所在物理块的物理地址在链表数组中链表索引数组的位置;步骤102,根据链表索引数组的位置查找判断链表数组中是否包含所述待读出数据,如果不包含则执行步骤103;步骤103,判断数据链表是否包括空闲缓存单元,如果不包含则执行步骤-->104;步骤104,取链表头前面一个缓存单元为目标缓存单元,执行步骤105;步骤105,判断所述目标缓存单元的单元修改标记是否为修改过,如果修改过将该缓存单元中的旧有数据写回其对应的NandFlash物理块中,执行步骤106,否则直接执行步骤106;步骤106,从所述物理块中将待读出数据读入到所述目标缓存单元中,同时修改目标缓存单元的单元修改标记为没有修改过并执行步骤107;步骤107,将所述目标缓存单元链接到数据链表头的后紧邻链表头的位置,执行步骤108;步骤108,计算出待读出NandFlash数据所对应的物理块在链表数组中的链表索引数组的位置,将目标缓存单元链入到计算出的链表索引数组所对应的链表的末尾并执行步骤110;步骤110,从目标缓存单元中读出数据到指定的位置。进一步地,在步骤102中,如果包含所述待读出数据,则执行步骤109;步骤109,将该缓冲区在双向数据链表中的位置移动到链表头的后一个。进一步地,在步骤103中,如果包括空闲缓存单元,则将空闲缓存单元设为目标缓存单元并执行步骤107。进一步地,所述方法在写NandFlash操作的过程包括:步骤201,计算出待写入NandFlash数据所在物理块的物理地址在链表数组中链表索引数组的位置;步骤202,根据链表索引数组的位置查找判断链表数组中是否包含所述待读出数据,如果不包含则执行步骤203;步骤203,判断数据链表是否包括空闲缓存单元,如果不包含则执行步骤204;步骤204,取链表头前面一个缓存单元为目标缓存单元,执行步骤205;步骤205,判断所述目标缓存单元的单元修改标记是否为修改过,如果修改过将该缓存单元中的旧有数据写回其对应的NandFlash物理块中,执行步骤206,否则直接执行步骤206;步骤206,从所述物理块中将待写入数据读入到所述目标缓存单元中,同-->时修改目标缓存单元的单元修改标记为没有修改过并执行步骤207;步骤207,将所述目标缓存单元链接到数据链表头的后紧邻链表头的位置,执行步骤208;步骤208,计算出待写入NandFlash数据所对应的物理块在链表数组中的链表索引数组的位置,将目标缓存单元链入到计算出的链表索引数组所对应的链表的末尾并执行步骤210;步骤210,将待写入数据写入目标缓存单元中,修改目标缓存单元的单元修改标记为修改过。进一步地,在步骤202中,如果包含所述待读出数据,则执行步骤209;步骤209,将该缓冲区在双向数据链表中的位置移动到链表头的后一个。进一步地,在步骤203中,如果包括空闲缓存单元,则将空闲缓存单元设为目标缓存单元并执行步骤207。进一步地,所述链表索引数组位置的计算采用哈希算法,所述链表数组为散列链表数组。进一步地,所述方法在系统的初始化阶段包括以下步骤:分配若干缓存单元;对每个缓存单元分配管理结构体并初始化另其指向各自的缓存单元;分配链表索引数组并初始化,令其指向NULL;和分配数据链表头,将所有缓存单元链入到双向数据链表中。进一步地,所述内存中开辟缓存单元的大小为NandFlash一个或多个块的大小,或者一个或多个页的的大小,或者一个或多个字节的大小。进一步地,所述存储单元的大小和数量根据需要随时调整。本专利技术通过采用多个缓存提高了读写效率,同时引入链表数组并且采用双链表嵌套,提高了对缓存单元的访问效率。在数据链表中采用最近最少使用的方法,提高了数据链表的访问效率。同时缓存单元采用更小的页或者字节长度作为缓存单元的大小,使读写更加灵活。附图说明图1是现有技术中简单的块写入操作流程图;图2本文档来自技高网
...

【技术保护点】
一种NandFlash缓冲管理方法,包括: 在内存中建立一个与NandFlash物理块地址一一对应的链表数组; 在内存中开辟多个缓存单元用于缓存NandFlash中的数据;和 根据所述链表数组与多个缓存单元配合对NandFlash进行读写操作。

【技术特征摘要】
1.一种NandFlash缓冲管理方法,包括:在内存中建立一个与NandFlash物理块地址一一对应的链表数组;在内存中开辟多个缓存单元用于缓存NandFlash中的数据;和根据所述链表数组与多个缓存单元配合对NandFlash进行读写操作。2.根据权利要求1所述的方法,其特征在于,所述多个缓存单元由一个链表头采用双向链表的形式链接成数据链表;所述链表数组包括链表索引数组,用于在链表数组中定位对应的NandFlash物理地址,链表数组中的数据所对应的NandFlash物理地址与同一个NandFlash物理地址在链表数组中相应的元素对应。3.根据权利要求2所述的方法,其特征在于,在读写操作中,将写入数据的缓存单元通过指针链入NandFlash物理地址对应的链表数组中,修改该写入数据的缓存单元的单元修改标记,所述单元修改标记用于标识该缓存单元是否被修改过。4.根据权利要求3所述的方法,其特征在于,根据最近最少使用原则将写入数据的缓存单元移动到链表头后面紧挨链表头的位置。5.根据权利要求3所述的方法,其特征在于,在读写过程中,将缓存单元内的数据与该数据在NandFlansh上对应的物理块关联,当缓存单元内数据被修改且有新的数据需要写入该缓存单元中的时候,将该缓存单元中的旧有数据写回其对应的物理块中。6.根据权利要求3所述的方法,其特征在于,所述方法在读NandFlash操作的过程包括:步骤101,计算出待读出NandFlash数据所在物理块的物理地址在链表数组中链表索引数组的位置;步骤102,根据链表索引数组的位置查找判断链表数组中是否包含所述待读出数据,如果不包含则执行步骤103;步骤103,判断数据链表是否包括空闲缓存单元,如果不包含则执行步骤104;步骤104,取链表头前面一个缓存单元为目标缓存单元,执行步骤105;步骤105,判断所述目标缓存单元的单元修改标记是否为修改过,如果修改过将该缓存单元中的旧有数据写回其对应的NandFlash物理块中,执行步骤106,否则直接执行步骤106;步骤106,从所述物理块中将待读出数据读入到所述目标缓存单元中,同时修改目标缓存单元的单元修改标记为没有修改过并执行步骤107;步骤107,将所述目标缓存单元链接到数据链表头的后紧邻链表头的位置,执行步骤108;步骤108,计算出待读出Nan dFlash数据所对应的物理块在链表数组中的链表索引数组的位置,将目标缓存单元链入到计算出的链表索引数组所对应的链表的末尾并执行步骤110;步骤110,从目标缓存单元中读出数据到指定的位置。7.根据权利要求6所述的方法,其特征在于,在步骤102中,如果包含所述待...

【专利技术属性】
技术研发人员:李栋梁艾国游明琦
申请(专利权)人:北京中星微电子有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1