闪存存储器件中的动态存储器分配引起的自我逐出的避免的制作方法

文档序号:6594832阅读:169来源:国知局
专利名称:闪存存储器件中的动态存储器分配引起的自我逐出的避免的制作方法
技术领域
本申请涉及闪存,并且更具体地涉及闪存存储器件的固件的管理。
背景技术
闪存海量存储器件、也就是主要用于存储大量用户文件的器件通常利用NAND闪存作为主存储单元,而不是NOR或其他适当执行的存储器。这样的存储器件包括用于存储海量库的照片和音乐等且甚至最近被用作某些膝上型计算机中的主要存储器的数字存储卡和USB盘等。由于在NAND中可用的大量存储器,期望使用NAND来存储固件,尽管其不可从NAND执行。

发明内容
便携闪存存储器件的操作固件被存储在相对大的文件存储存储器中,其是不可执行的。其被逻辑地解析为各个覆盖(overlay)以适合于可执行的存储器。覆盖可以具有不同尺寸,以有效地组织函数调用同时最小化死空间(dead space)和应该在一个或一组频繁访问的覆盖内的函数的不必要的分离。对于具有需要数据分配的函数的覆盖,数据分配可能引起逐出(eviction)。该自我逐出完全或者在初始运行时间后被避免。本发明的一个方面涉及一种方法,包括将要由存储器控制器执行的固件存储在存储器系统的NAND闪存内。该方法还包括逻辑地将该固件排序到各覆盖中,所述各覆盖在大小方面不同;将所需的覆盖加载到RAM存储器中;以及基于覆盖内的函数在RAM存储器内的数据空间需要而在第一次加载覆盖时逐出所加载的覆盖,但是在第一次加载覆盖之后,保留RAM内的空间用于数据空间需要,由此消除逐出覆盖的需要。本发明的另一方面涉及一种在并入NAND闪存和存储器控制器的存储器系统中的方法。该方法包括将要由存储器控制器执行的固件存储在NAND闪存内;逻辑地将该固件排序到具有小于专用于固件执行的覆盖RAM存储器的最大量的大小的覆盖中,所述覆盖在大小方面不同;调用覆盖中存储的函数;将所述覆盖加载到存储器控制器的专用RAM存储器中;保存所选择的覆盖需要在覆盖RAM内的数据的空间分配的指示;以及随后利用该指示来避免所选择的覆盖的自我逐出。本发明的另一方面涉及一种在并入NAND闪存和存储器控制器的存储器系统中的方法。该方法包括将要由存储器控制器执行的固件存储在NAND闪存内;逻辑地将该固件排序到具有小于专用于固件执行的覆盖RAM存储器的最大量的大小的各覆盖中,所述各覆盖在大小方面不同;调用覆盖中存储的函数;将所述覆盖加载到存储器控制器的专用RAM存储器中;保存所选择的覆盖需要在覆盖RAM内的数据的空间分配的指示;以及随后利用该指示来避免所选择的覆盖的自我逐出。


图IA是图示闪存存储器件100的框图。图IB是图示FMSD 100的RAM和闪存空间的一部分的框图。图IC是描述覆盖管理的流程图。图2A是图示初始覆盖加载处理的流程图。图2B是图示随后的覆盖加载处理的流程图。
具体实施例方式软件程序被加载到电子设备可执行的存储器中并被执行。当软件程序大于设备的可执行存储器容量时,则使用软件覆盖(overlays)或虚拟存储器。虚拟存储器是经由通常采用以硬件实现的存储器管理单元的操作系统映射到物理存储器的地址空间。其在个人计算机和其他非受限的计算设备中很普遍。在虚拟存储器系统中,大程序被分解成小段,称为“页”。如需要,页从次级存储器被加载到为该程序预留的机器存储器的部分中。在存储卡和其他闪存存储器件中,虚拟存储器不实用并通常不实施。因此,利用软件覆盖。闪存存储器件的操作软件通常被称为固件。固件覆盖是当覆盖管理器需要时被调用到存储器中的程序段。调用的每个覆盖可以重写存储器中的现有覆盖。必须小心地管理存储器对各覆盖的动态分配。图IA图示了闪存存储器件(“FMSD”)100。FMSD包括闪存阵列108、存储器控制器104和主机接口 102。闪存阵列108是非执行的适当种类的闪存,优选地是NAND构造,并通常是EEPROM形式的。闪存阵列108用于存储海量的用户文件,并且是器件100的主数据存储仓(r印ository)。同样,期望利用大容量并存储固件或者用于具有阵列1089的FMSD 100的操作指令。存储器控制器104本身包括处理器和可执行随机存取存储器(“RAM”) (未示出)。FMSD 100还可以包括在存储器控制器之外的一个或多个RAM存储器。主机接口 102可以被配置为作为诸如安全数字或其他存储卡标准的存储卡的接触(contact),可以是通用串行总线(“USB”)连接器或者IEEE 1394 “火线(firewire) ”连接器等,或者在 FMSD 100被嵌入的情况下,可以是器件专用接口。闪存阵列108经由控制和数据线106耦接到存储器控制器104。运行存储器存储器件的固件被分解成适当大小以适合于要执行的RAM的覆盖。花费无数小时来确定哪些函数(function)调用应该最佳地进入各个覆盖中,来使得有效执行固件的任务,且由不必要地将各覆盖循环入和循环出RAM而导致的等待时间最小。例如, 如果第一覆盖中的函数调用第二覆盖中的另一函数并反之亦然,则系统将花费很多时间在这两个覆盖之间“反复”(thrashing)。尽管具有两个覆盖的此例子过于简化,但是关键点是如果不适当地管理覆盖管理,则可能花费很多时间仅在覆盖之间切换而不执行固件的全部函数。在诸如个人计算机的大的处理器控制的系统中,在通常处理速度比硬件盘或者其他数据存储机制的存储存取时间快得多并且大量RAM可用的情况下,这更不算问题。相对大量的可用RAM与在PC中可用的虚拟存储器管理技术等不是受限的系统环境的特征。并入了 NAND存储器的受限系统环境尤其有问题,因为固件非常大且复杂以至于不能管理NAND构造的存储操作。NAND存储器通常具有在质量上与在多个存储器晶片内或多个存储器晶片之间的其他区域不同的区域。为了节省成本,诸如存储卡的系统采用具有这样的可变质量区域的未检验(unproverONAND。这与可能仅采用测试过的良好NAND的系统不同,该测试过的良好NAND的系统意味着较差性能区域未被利用或者不存在。这种奢侈在必须以最小成本提供的较大容量器件中是不可得或不实际的。在这样的器件中,固件必须积极地管理NAND串的使用,以一直监视各个区域的性能并修改数据的读/写参数和物理 /逻辑映射,使得如果需要的话,绘出(mapout)不可靠的区域,并且将不会威胁或损失用户文件和数据。这导致(比利用测试过的良好NAND)甚至更大和更复杂的固件,这意味着覆盖管理和RAM使用由此至关重要。可以在任何时间调用在覆盖中存储的(固件)函数。不保证当调用该函数时包含该函数的覆盖将在RAM中。固件的自动覆盖管理器(“Α0Μ”)将处理每个调用,以便管理 “错误”情况,在该错误情况下,函数被调用但是却不存在于RAM中。在错误的情况下,AOM 将在定位该函数并调用它之前加载适当的覆盖。图IB图示了 FMSD 100的RAM和闪存空间的一部分。RAM的主代码区120包含具有描述符/项目1对『12虹的覆盖映射表(“0MT”)124。OMT是描述当前被加载在覆盖 RAM( "ORAM")中的覆盖的表。OMT 1 的每个项目12^-χ描述了 ORAM 130中的具体区域,也称为覆盖区130。124 OMT是到RAM中的覆盖的映射,并且总是改变。其定义了多少 RAM被分配给哪个覆盖以及RAM的哪个/哪些部分是空闲的。ORAM 130 包括覆盖偏移量表(“00T”) 131,OOT 131 又包括 ORAM 地址 132a_132x。 00T 131是到闪存中的覆盖的映射。每个ORAM地址指示具体覆盖在闪存内的相应偏移量13^-134x。00T 131是描述作为按需要在某个时间点要被加载的候选的、位于闪存中的所有覆盖140a-140x的表。00T 142本身与覆盖一起被加载到ORAM中。覆盖136a_x 或140a-x的每个包含至少一个函数,如在覆盖140a和140b中表示的。如在图IB中可见,各个覆盖136a_136x(仅示出136a和136b)出现在ORAM 130 中。覆盖的数量取决于各个覆盖以及整个ORAM 130的大小。ORAM 130可以是离散的RAM 或者在被分配给覆盖的在较大RAM内的区域。数据138以及空闲空间139也存在于ORAM 130中。数据138可以是可写的或者是恒定的。可写数据是空间的分配,并且进行分配的调
用者将“某些东西”放在那里......其保持锁定直到调用者将其释放。不能以能够逐出代
码(覆盖)的方式来逐出(evict)数据。恒定的数据是有点不同的......其又是该调用
想要使用的“某些东西”,但是其从闪存加载,然后其优选地被当作只读,尽管其不需要被只读。关于恒定数据,当AOM处于RAM中时,AOM将不写回对恒定数据发生的任何修改。AOM被认为是“自动的”,因为处理覆盖的加载而无需明确规定何时和在何处加载到FMSD固件中的逻辑的主要流程内。何时加载它们的确定留给Α0Μ。也就是说,AOM功能性可以被集成到任何不同数量的FDSM产品或配置中,并且不需要具体地被配置为特定硬件实现。对于每个覆盖函数,编译器(compiler)产生对该函数所属于的覆盖的令牌
6(token)引用以及该函数在覆盖中的偏移。对于覆盖函数的每个调用,编译器产生专用指令集来调用提供专用登记器中的函数令牌的AOM处理机。在调用目标函数之前,AOM确保包含该函数的覆盖被加载到ORAM。关于ORAM中的覆盖地址的信息位于OOT中。可以从覆盖令牌中提取OOT中的覆盖的索引。每个OOT项目包含覆盖ORAM地址字段。这用作捷径(shortcut)并在某些实施例中消除了搜索OMT的需要。如果覆盖还没被加载到ORAM,则字段值等于-1(无效地址)。那意味着覆盖应该从闪存加载到ORAM。AOM使用另一 00T项目字段——偏移量来这样做。偏移量指示在闪存中的覆盖地址。无论目标函数已经在ORAM中还是已被AOM加载,调用它都是安全的。OMT 包含关于存储器分布的信息。其包括描述符,并且每个描述符包括开始地址、大小、标志 (flag)和令牌(覆盖ID)。标志字段指示该项目是指向空闲存储器还是占据了覆盖的存储器或者数据缓存器。进一步的信息请参考可在www. arc. com获得的ARC International 的MetaWare Development Toolkit-Automated Overlay Management SpecificationRev 1. 5,通过全部引用将其合并于此。为了加载覆盖,在RAM中,足够的空闲空间必须可用。通常,通过逐出处理来使得空间可用。逐出指的是选择已经在RAM中的覆盖并将其丢弃以使得空间可用于要加载的新覆盖的处理。如何选择覆盖来逐出是不同的。在2008年2月14日提交的题为“Overlay Management in a Flash Memory Storage Device” 的美国专利申请 No. 12/031384 中公开了最近最少加载(“LRL”)方法,通过全部引用将其合并于此。尽管通常LRL方法是优选的,但是可以利用任何一般的逐出方法,诸如如由以下处理修改/实现/补充以避免自我逐出的最近最少使用(“LRU”)方法。图IC是描述高级的覆盖管理的实施例的流程图。在步骤200,系统检查OMT以查看具有所调用的函数的覆盖是否在ORAM中。如果是,则将从ORAM执行该函数,如在步骤 220中所见。但是,如果不在,则在步骤204中,系统将去往00T以在闪存中定位该覆盖,如由覆盖偏移量所确定的。在步骤208中,如需要,系统将逐出一个或多个覆盖以使空间可用于所需的另一覆盖或者多个覆盖。在步骤212,加载覆盖,并且在步骤216,更新OMT以反映覆盖的加载,通过在存储器中的函数和相关联的覆盖,在步骤220中将从ORAM执行该函数。期望避免其中在覆盖内的函数在被调用时导致包含该函数的覆盖的逐出的情况。图2A图示了包括第一次加载覆盖的处理。在步骤252,系统(固件)调用被存储在覆盖中的函数。在步骤256,包含所调用的函数的、在这些示例图中被称为覆盖01的覆盖在步骤256中被加载在ORAM中。其第一次被加载时,其优选地被加载在ORAM的顶部,尽管其可能被加载在ORAM内的任何地方。在步骤沈0,该函数分配用于数据的存储器空间。在一个实施例中,这诱导AOM调用存储器分配例程(“MALL0C”)。然后在步骤沈4,当分配了用于数据的存储器空间时,A0MMALL0C致使逐出覆盖01。发生这是因为某些函数需要相对大的数据分配,其将导致需要使用加载了覆盖的ORAM空间。在步骤270,更新00T以指示覆盖01需要数据分配。还优选地更新00T 以指示所需分配的大小。在步骤274,系统(的AOM MALL0C)返回到覆盖01的所调用的函数,这导致错误,因为该函数不再存在于ORAM中。在步骤278,覆盖01被重新加载,并在步骤观2,系统返回执行所调用的函数。
图2B图示了包括第二次和其后加载覆盖的处理。在步骤302,调用在覆盖01中存储的函数。然后在步骤306,系统确保覆盖01被加载在覆盖01的一个或更多函数所需的数据分配区域之下的ORAM中的位置处。在一个实施例中,这通过检查先前在步骤270中存储在OOT中的(一个或多个)指示符来进行。在数据分配的大小被存储在OOT中的情况下,数据分配将具有所存储的大小。由于覆盖内的不同函数可能需要不同大小的数据分配,因此在优选实施例中,数据分配的所存储大小是覆盖内的任何函数的最大数据分配。在另一实施例中,覆盖内的每个函数的所需数据分配的大小可以被保存在OOT中。在所需数据分配的大小未被存储的其他实施例中,数据分配可以具有对所有覆盖和其中的函数的最大预期大小。然后在步骤310,系统将覆盖01加载在该数据分配区域以下,并在步骤314中,所调用的函数调用AOM MALL0C。注意,尽管在优选实施例中,用于数据的空间被保留在ORAM的顶部并且该覆盖被加载在保留的空间以下, 但是在其他实施例中,该空间可以被保留在ORAM内的任何位置,并且该覆盖可以被加载在保留的空间以上或以下。在步骤318,AOM MALLOC返回到该函数而不逐出覆盖01。因此,自我逐出仅发生在第一次出现倾向于这样的行为的覆盖时。存储器系统实质上“了解”在运行时间的覆盖的自我逐出趋势并据此调整。作为替换方式,通过覆盖内的函数是否需要数据分配的(一个或多个)指示和数据分配的相关联的大小来预加载每个覆盖的OOT项目。
权利要求
1.一种在并入NAND闪存和存储器控制器的存储器系统中的方法包括 将要由存储器控制器执行的固件存储在NAND闪存内;逻辑地将该固件排序到具有小于专用于固件执行的覆盖RAM存储器的最大量的大小的各覆盖中,所述各覆盖在大小方面不同; 调用覆盖中存储的函数;将所述覆盖加载到存储器控制器的专用RAM存储器中; 保存所选择的覆盖需要在覆盖RAM内的用于数据的空间分配的指示;以及随后利用该指示来避免所选择的覆盖的自我逐出。
2.如权利要求1的方法,其中所述指示在运行时间被保存。
3.如权利要求1和2的任意一项的方法,其中所述指示被保存在覆盖偏移量表中。
4.如权利要求1-3的任意一项的方法,其中所述指示被保存在NAND闪存中。
5.如权利要求1-4的任意一项的方法,其中随后利用数据分配需要指示来避免所选择的覆盖的自我逐出包括在每个实例处,参考所保存的数据分配需要指示,在初始加载所选择的覆盖后调用所选择的覆盖。
6.如权利要求1-5的任意一项的方法,还包括保存在覆盖RAM内所需空间的分配的大小的指示。
7.如权利要求1-6的任意一项的方法,其中随后利用数据分配需要指示来避免所选择的覆盖的自我逐出包括在每个实例处,参考所保存的数据分配需要指示和所需分配的大小的指示,在初始加载所选择的覆盖后调用所选择的覆盖。
8.如权利要求1-7的任意一项的方法,其中随后利用所述指示来避免所选择的覆盖的自我逐出还包括保留足够用于数据分配的覆盖RAM的区域,并将所选择的覆盖加载在保留的区域以下。
9.如权利要求1-8的任意一项的方法,其中保留的区域在覆盖RAM的上边界处。
10.如权利要求1-9的任意一项的方法,其中为数据分配保留的区域等于或大于固件的任何函数的最大所需数据分配。
11.如权利要求1-10的任意一项的方法,其中所述大小指示被保存在覆盖偏移量表中。
12.如权利要求1-11的任意一项的方法,其中所述大小指示被保存在NAND闪存中。
13.一种在并入NAND闪存和存储器控制器的存储器系统中的方法包括 将要由存储器控制器执行的固件存储在NAND闪存内;逻辑地将该固件排序到各覆盖中,所述各覆盖在大小方面不同; 调用覆盖中存储的函数;将所述覆盖第一次加载到存储器控制器的RAM存储器中,所述覆盖在第一次被加载时被加载在覆盖存储器的上边界处;确定所述覆盖是否调用需要在控制器的RAM存储器中的存储器分配的函数; 保存关于所需存储器分配的信息;参考保存的信息,并且如果所述保存的信息指示需要存储器分配,则在第一次之后的每次,将覆盖加载在不同于存储器的上边界处的区域中。
14.如权利要求13的方法,其中所述保存的信息包括对存储器分配的需要或不需要的指示。
15.如权利要求13和14的任意一项的方法,其中确定所述覆盖是否调用需要在控制器的RAM存储器中的存储器分配的函数包括确定是否需要为要写的数据进行分配。
16.如权利要求13-15的任意一项的方法,其中所述保存的信息包括存储器分配的大小的指示。
17.如权利要求13-16的任意一项的方法,其中在第一次之后的每次将覆盖加载在不同于存储器的上边界处的区域中包括将所述覆盖加载在为由被加载的覆盖所写的数据所保留的区域以下。
全文摘要
便携闪存存储器件的操作固件被存储在相对大的文件存储存储器中,其是不可执行的。其被逻辑地解析成各覆盖以适合于可执行的存储器。各覆盖可以具有不同尺寸,以有效地组织函数调用同时最小化死空间或不需要分离应该在一个或一组频繁访问的覆盖中的函数。对于具有需要数据分配的函数的覆盖,数据分配可能引起该覆盖的逐出。该自我逐出完全或者在初始运行时间后被避免,并且逐出的覆盖被重新加载在为数据保留的区域之外的区域处。
文档编号G06F12/06GK102160039SQ200980136952
公开日2011年8月17日 申请日期2009年7月22日 优先权日2008年7月22日
发明者德里尔·斯特金, 瓦德齐姆·斯特拉克 申请人:桑迪士克公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1