CN104094239A - 有限随机存取存储器/闪存设备架构的闪存压缩指令缓存方法 - Google Patents
有限随机存取存储器/闪存设备架构的闪存压缩指令缓存方法 Download PDFInfo
- Publication number
- CN104094239A CN104094239A CN201280068407.7A CN201280068407A CN104094239A CN 104094239 A CN104094239 A CN 104094239A CN 201280068407 A CN201280068407 A CN 201280068407A CN 104094239 A CN104094239 A CN 104094239A
- Authority
- CN
- China
- Prior art keywords
- code
- dram
- flash
- memory
- flash memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4403—Processor initialisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
描述了通过使用未压缩的分页指令缓存故障方法在RAM中压缩和缓存解压缩的代码以在闪存存储器中保持所有代码为压缩的。该方法只在DRAM存储器中解压缩和缓存在特定的时间实例运行的部分代码(即,DRAM窗口),这基于静态窗口闪存维持预取的部分代码。
Description
技术领域
提出的构思涉及存储器管理。更具体地说,涉及一种用于无缝切换(闪存)的快速低延迟访问具有有限的随机存取存储器(RAM)/闪存存储器能力的设备中的缓存的方法。
背景技术
在很多比较旧的机顶盒(STB)中,RAM和闪存存储器往往是非常有限的。传统产品的典型STB存储器资源可用性的示例具有达到4MB存储量的闪存组件和达到16MB存储量的RAM组件,这些存储器通常是共享的,并且可以划分在视频存储器和应用程序(如中间件、驱动程序、控制访问和图形用户界面)之间的不同的总线接口上。
目前缓存和存储器管理的方法通常是基于设备中不同组件进行的不同级别的RAM存取来优化代码指令存取次数的硬件或软件方法。
STB缺少存储器,因为容纳较大的程序指令集时会出现问题,此时增加更多的RAM或闪存存储器的物理选项可能比较困难,并且对传统的STB来说比较昂贵。为较大的程序指令集提供更多的存储器的要求,无论是当要求为旧的STB添加存储器,还是当要求完全用新设备替换这样的STB时,都会限制网络提供商(例如,服务提供商)投资的回报。另一方面,如果STB中的软件由于服务提供商对于新的STB引起的成本不能升级,那么服务提供商很可能会失去客户,这些客户会选择有更好的STB和软件的其他的服务提供商。
发明内容
所提出的构思的实施方式允许具有有限的NOR闪存和动态随机存取存储器(DRAM)存储器功能的传统的STB或其他的设备处理在该STB的有限的存储器中缓存和从其中取出的操作。
根据本发明的实施例实现本构思的这个和其他方面,其中用于设备中的存储器管理的方法包括以下步骤:将来自该设备中的闪存存储器的未压缩的代码缓存到设备中的DRAM,在闪存存储器中维持代码为压缩的,并在设备启动期间的预定的时间窗口期间在DRAM中缓存解压缩的代码。
根据一个示例性的实施例,将未压缩的代码缓存在设备中可以包括:为未压缩的代码确定DRAM存储器区域的规模,以及在编译时应用遍扫描(pass)操作以从设备的DRAM缓存生成可执行代码。应用遍扫描操作包括:通过嵌入一个或多个跳转操作到设备的运行时支持(runtime support)以重建可执行代码,将驻留在闪存存储器的特定区域中的代码的页面吸收(assimilate)到闪存存储器的闪存块,构建运行时支持表,以及构建压缩的代码和可预取的页面。
根据一个示例性的实施例,具有存储器管理系统的装置包括:处理器、耦接到该处理器的闪存存储器和耦接到该处理器的DRAM存储器。该处理器被配置为将来自闪存存储器的解压缩的代码缓存到DRAM存储器中,并在闪存存储器中维持压缩的代码,使得在预定的时间窗口期间执行在DRAM中缓存解压缩的代码。
结合附图阅读下面对示例性实施例的详细描述,本原理的这些和其他方面、特征和优点将变得显而易见。
附图说明
图1是根据本发明的实施方式的用于具有有限的存储器的设备中的存储器缓存的方法的高级流程图;
图2是根据本发明的实施方式的用于具有有限的存储器的设备中的存储器缓存的方法的更详细的流程图;
图3是根据本发明的实施方式的用于具有有限的存储器的设备中的存储器缓存的方法的另一更详细的流程图;
图4是根据本发明的实施方式的用于具有有限的存储器的设备中的存储器缓存的方法的分析算法方面的流程图;
图5是表示示出用于将来自闪存的未压缩的代码缓存到RAM的方法的图1的第一步骤的示例性实施方式的图;
图6是表示用于在闪存中维持代码为压缩的以及在DRAM窗口中缓存未压缩的代码的方法的示例的图;
图7是可以应用所提出的构思的机顶盒(STB)架构的框图;
图8是可以应用所提出的构思的替代性机顶盒(STB)架构的框图。
具体实施例
本说明书中的本原理主要涉及闪存/RAM环境中的存储器管理,更具体地涉及具有有限数量的可用闪存/RAM的STB。因此,应该理解的是,本领域中的技术人员能够设计出尽管未在本说明书中明确描述或示出但能实施本原理并被包括在所描述的布置的范围内的各种布置。
而且,本说明书中引用本原理的原理、方面和实施例以及其具体示例的所有陈述都旨在包括其结构和功能等价物。另外,这些等价物旨在包括当前已知的等价物和将在未来开发出来的等价物,即任何被开发出来执行相同功能而不论其结构如何的元件。
因此,例如,本领域的技术人员应该理解的是,本说明书中出现的框图表示实施本发明原理的示例性电路系统的概念图。类似地,应该理解的是,任何流程表、流程图、状态转换图、伪码等表示可以在计算机可读介质中被实质性表示并因此由计算机或处理器执行的各种过程,不论这些计算机或处理器是否明确显示出来。
图中所示的各种元件的功能可以通过使用专用硬件和能够联合合适的软件执行软件的硬件提供。当由处理器提供时,该功能可以由单个专用的处理器或单个共用的处理器或其中有一些可以共用的多个单独的处理器提供。并且,术语“处理器”或“控制器”的明确使用不应该被解读为排他性地专指能够执行软件的硬件,而是可以没有限制地、隐含地包括数字信号处理器(DSP)硬件、用于存储软件的只读存储器(ROM)、随机存取存储器(RAM)和非易失性存储器。
还可以包括其他传统和/或定制的硬件。相似地,附图中示出的任何开关都只是概念性的。它们的功能可以通过操作程序逻辑、通过专用逻辑、通过程序控制和专用逻辑交互或者甚至手动地进行,实施者可以选择的特定技术可以根据上下文更加详细地理解。
在本说明书的权利要求中,任何被表达为执行特定功能的部件的元件都旨在包括执行该功能的任何方式,包括例如a)执行该功能的电路元件的组合或b)包括与合适的用于执行软件以完成该功能的电路组合在一起的固件、微码等的任何形式的软件。这些权利要求限定的本发明原理在于下列事实:各个被列举部件提供的功能以权利要求要求保护的方式组合并放置在一起。因此,任何可以提供这些功能的部件都被视为与那些在本说明书中示出的部件是等价的。
本说明书中引用的本发明原理的“一个实施例”或“实施例”以及其他变型是指结合实施例描述的特定特征、结构或特性等被包括在本发明原理的至少一个实施例内。因此,出现在说明书中各个位置的词语“在一个实施例中”或“在实施例中”以及其他变型并不一定都是指同一个实施例。
一些提出的实施例帮助压缩和将解压缩的代码缓存在RAM中。也就是说,一些提出的构思是基于软件的(没有任何硬件支持),其中未压缩的分页指令缓存故障被用来在闪存中保持代码为压缩的,其中在特定的时间实例(即,DRAM窗口/预定的时间段)将部分代码解压缩并缓存在DRAM中。
更多的实施例说明如何在闪存存储器中维持压缩的代码以及在DRAM中复制并维持少量的未压缩指令缓存,这样不在RAM中复制代码,占用/存取率保持稳定和最优化。
参考图1,第一步骤(12)是描述用于将闪存中的未压缩代码从STB闪存存储器缓存到RAM中的方法。执行该操作的目的是为了在执行STB操作系统和应用程序期间节省DRAM存储器。
第二步骤(14)在闪存存储器中维持为代码压缩的,并在DRAM中直接解压缩代码,借此缓存这些解压缩的代码。因此,通过根据第一步骤(12)的建议修改STB处理存储器管理的方式,第二步骤(14)提供一种用于在闪存上维持指令代码为压缩的方法,以也适应闪存存储器中更多的STB代码。
如在本说明书中提到的,新的方法被称为MICP-闪存(“软件”/闪存的存储器指令压缩分页)。通过示例的方式,在STB解码器架构的背景中描述本说明书的构思;然而,本领域的技术人员应该意识到,所提出的示例性构思可以适用于其他的硬件架构。
在传统的STB中,如图7所示的示例性的STB 400,作为存储器的示例性的形式,闪存组件是NOR闪存406。NOR闪存406允许以读取模式随机存取,并用于基本作为解码器处理器402的存储器总线上的较慢的DRAM存储器404来运行代码。
闪存中的代码压缩和RAM中的复制执行已经越来越多地作为节省闪存存储器的策略使用,然而,由于设备不能运行压缩的代码,因此失去随机可存取性。也就是说,代码需要在RAM中解压缩,并作为指令单片阵列在RAM外部执行。
如果有足够多可用的DRAM来获取解压缩程序的整个副本,同时不损失性能,那么对闪存特性的限制使用不会是这么大的问题,但由于这种存储器的成本,DRAM通常是有限的。
解码器的主要组件是402处理器核。更老一代的STB解码器架构(例如,ST55XX)基于两个原理。第一,架构提供将要并行使用的资源,如解码器、I/O和核。第二,披露架构的细节以允许使用这些资源的方式的灵活性。
STB处理器402的模型包括简单的流水线精简指令集计算(RISC)或超长指令字(VLlW)核(例如MIPS32或ST5517)、单独的数据和指令存储器以及与DRAM、闪存、电可擦除可编程只读存储器(EEPROM)存储器模型接口连接的可编程总线。在现代微处理器中找到的许多复杂的功能,如存储器管理单元(MMU)和分割/分页都未在传统的STB系统的硬件中实现。这需要编译器根据具体程序所需和具体需求来实现和定制这些功能,因此,没有自动的、现成的解决方案可用。
由于新的STB中间件和应用程序要求比所设计的硬件(包括本地处理器缓存器、闪存和RAM)允许的更多的存储量,因此需要一些机制来将新的数据从外部闪存加载到DRAM存储器,而不使用未压缩数据的完整副本浪费DRAM,而是使大部分的闪存数据处于压缩形式。实际上,某些DRAM存储器404可以用作在更慢且架构不同的NOR闪存存储器存储空间406中的压缩代码的块的缓存器。
一种用于解析该缓存行为的方法是在静态代码分析步骤之后的编译时添加运行时支持,它管理DRAM中压缩页面的缓冲。然后,这些页面可以从压缩的缓存缓冲器中解压缩到分配的DRAM的缓存缓冲器。然后,该解压缩的代码可以用于代码执行,借此这些代码留在闪存中,直到下一次从闪存中加载。注意,使用与DRAM中的缓存支持用来在运行时运行代码的相同的缓存缓冲器来管理压缩的缓存缓冲器的解压缩。
在本发明的示例性实施方式中,逻辑硬件提取模块包括闪存图像(在传统STB上通常是2.5-3.5MB)的代码部分,当基于当前的压缩算法,1个DRAM缓冲器用于预定义块的就地解压和代码执行,STB核处理器的平面存储器模型不支持硬件缓存,对该图像进行压缩时,推测可能是原始编码大小的50%的阶。
示例性的软件组件和利用具有当前软件功能的MPEG2解码器上的典型闪存使用的硬件要求1.5MB用于中间件代码、200KB的变量、256KB用于引导装载程序、940KB用于存储在闪存中的UI应用程序(例如,640KB指南+消息应用程序100KB+VOD应用程序200KB)、256KB用于中间件使用的闪存文件系统;以及1.2MB用于驱动程序代码。
对于RAM使用,典型值是4MB用于视频和OSD存储器(以标准分辨率和MPEG2压缩要求),5MB用于指南的事件数据以及5.5MB用于OS、中间件和其他驱动程序的要求。
本领域的普通技术人员应该意识到,上面的数据很容易显示出对闪存中代码压缩的要求,但在RAM中缓冲整个解压缩的代码库是不可行的,除非专门(on an ad-hoc bases)对数据缓存进行修剪。然而,这样的方面会损害用户体验,尤其是对于由于数据采集速度很慢需要从流在RAM中缓存的指南和其他的UI数据。
根据示例性实施例,用于应用于传统STB架构的MICP-闪存的步骤分为两部分:
1)第一步骤是描述用于将闪存中的未压缩代码从STB闪存缓存到RAM的方法,包括确定用于未压缩页面集的存储区域的规模(步骤12,图1);以及
2)第二步骤是解决在闪存中维持代码为压缩的和在DRAM窗口中缓存未压缩的代码的问题(步骤14,图1)。
本领域的技术人员应该意识到,MICP闪存可以为STB的用户体验提供可接受的响应时间是基本要求,尤其是在缓存未命中期间。
现有文献中找到的所有的方法都适用于具有用于缓存的非常小的第一阶段SRAM存储器(几个10KB)和网络DRAM的并行机器,或通用计算机中的两级RAM之间(但不适用于闪存-DRAM耦接和压缩),来解决具有用于TV观看性能可持续性的定制的STB架构上的空间问题。
参考图2,在编译时应用遍扫描操作(例如,软件遍扫描),以从在STB的NOR闪存中保持压缩的STB的DRAM缓存生成可执行代码(20)。对代码应用压缩以节省闪存空间,并可以应用算法到STB硬件和软件架构(包括中间件、驱动程序和解释的代码)的映射/定制。一旦执行遍扫描操作,就可以在编译时添加用于闪存缓存的运行时支持(22)。
图3示出了组成图1中用于在闪存中维持代码为压缩的步骤14的步骤的高级流程图。步骤14包括在需要时基于预定义的固定数量的预取页面将驻留在被吸收的页面中的代码从闪存加载到DRAM中的预定义的缓存(步骤40)。加载操作(40)可以由更多的步骤组成,其中第一步骤将这些页面从压缩的缓存缓冲器解压缩到分配用于代码执行的DRAM的解压缩的缓存缓冲器(26)。一旦执行,就执行来自DRAM解压缩的缓存缓冲器的代码,直到下一次从闪存加载(28)。如前所述,缓冲器从闪存解压缩指令到DRAM是DRAM缓存器池中所取的执行其中特定的指令页面的相同的DRAM缓冲器。
在STB中,指令缓存器可以定义为静态的、固定大小的、对编译的闪存指令流分页。在标准的STB架构中,将会驻留在NOR闪存的特定区域中的代码的页面可以被吸收到闪存组件的闪存块中(即,通常是128KB或256KB)。然后,当需要时,从原始编译且未压缩的指令流压缩得到的驻留在这些页面中的代码基于预定义的固定数量的预取页面将被从闪存加载到STB的DRAM中的预定义的缓存区域。主要问题是代码在闪存和DRAM中占用的空间,需要定义用于压缩的页面集和用于缓存的DRAM的具体规模。
根据本公开,对于未压缩的页面集的存储区域的确定规模R提供如下:
·DRAM指令缓存区域取决于闪存的多个页面大小z,z表示一定的大小(例如,128K字节),因此取决于所选择的闪存组件;
·可缓存程序的总规模Y,Y表示总规模的大小(例如,3.5MB,上述每个示例最多考虑为5.2MB未压缩的代码的大小的总大小的2/3);
·s是被指定用于计算的m个闪存页面和n个RAM页面的数量之间的比率
·如果没有足够多的RAM可用,那么指令页面的RAM缓存可以放置在闪存中;
因此,s·n·z=m·z=Y,R=n·z,其中z通过所选择的闪存芯片确定,可以找到R的最优规模(从速度vs用户响应的角度来说最优),基于具体的STB程序运行,n在[1…m]变化。
例如,对于总大小3.5MB的代码,最多例如1MB DRAM的R可以专用于保存未压缩的指令缓存页面。假设在STB软件堆栈中,当指令的局部性较高时,将不止一次地需要页面,允许在第一次使用后从DRAM缓存中获取这些页面以多次命中。
在STB中,软件缓存代码、用于选择需要将哪个页面加载到DRAM中的静态和运行时支持、解压缩代码,以及将指令重新映射到DRAM缓存将在链接STB程序的最后阶段之后通过MICP闪存分析算法被集成在程序之中。
MICP闪存分析算法添加运行时支持功能用于闪存缓存(步骤22,图2和4),借此操作检查/看特定页面是否驻留在缓存器中。如果该页面在DRAM缓存器中未命中,那么加载并解压缩代码,然后执行解压缩的代码。尽管可能看起来与片上指令硬件缓存器执行的标签检查、数据获取和预取相似,但假设在正在被操作的传统的STB上,不存在其他情况下允许节省存储空间(例如,NOR闪存和/或DRAM)的适用的硬件缓存支持。
MICP闪存分析算法可以当即将到来的代码未驻留在DRAM缓存器中时在特定的计算得到的点将跳转操作插入指令解压缩器和缓存的运行时支持。在分析算法计算代码的位置处,这些代码被预测为已经驻留在缓存器中,并且程序可以简单地继续,而不跳转到运行时支持。
缓存器的运行时支持始终驻留在DRAM缓存器的单独的区域中,并且不加载它(或者,可以驻留在它从其中执行的闪存的单独的区域中)。只要STB解码器核处理器执行页面内的代码,STB程序就不需要检查看下面的代码是否存在。当指令流到特定的闪存页面的外部时,STB程序将明确地需要将操作跳转到运行时支持。
参考图4,示出了用于MICP闪存分析算法的示例性方法。该示例性方法重建映射到示例性STB架构的链接的可执行代码(在步骤30中)。该示例性的方法定义如下:
·在特定的点将跳转操作嵌入运行时支持,其中跳转指令改变STB程序控制的顺序流程(步骤32);
·当MICP闪存分析算法执行完上述步骤之后,可以通过吸收驻留在闪存的特定区域中的代码的页面将已经放置在DRAM或闪存中的到运行时支持的跳转指令添加到闪存组件中的闪存块(步骤33);
·构建运行时支持表,用于映射原始基址定址(Original Basic addressing)、块大小(页面大小)和压缩的块大小(步骤34);以及
·构建压缩的代码和可预取页面(通常多于一个)(步骤36);
·当运行完整的可执行文件时(步骤上14-参见图3),在需要时基于预定义的固定数量的预取页面将驻留在被吸收页面中的代码从闪存加载(40)到DRAM中预定义的缓存区域。该步骤实际上由运行时支持本身执行,如在图3(步骤14)中所示,其包括步骤26和28。
本领域的技术人员应该理解的是,MICP闪存分析算法可以使用STB解码器的处理器代码的实际机器指令集工作。遍扫描1(Pass 1)以及可能地接下来的遍扫描应该实现为修改用于所使用的特定处理器的编译器驱动程序,并用作新编译器最终编译遍扫描的最终遍扫描。最终的新的遍扫描应该适用于STB汇编语言,其中已经进行所有可能的优化和宏扩展。
遍扫描1:(图4-步骤20)
遍扫描1处理原始机器指令生成的代码中的所有的现有跳转和条件分支指令,必要时(即当原始地址是页面大小的当前以外的跳转时)修改代码库、插入到MICP运行时支持例程的跳转,根据跳转的类型遍扫描参数,说明如下:
·遍扫描1/跳转替代过程取决于所考虑的STB核处理器的具体的汇编语言,然而,对于基本的跳转指令,MICP闪存遍扫描1的基本操作是:
·如果原始代码库找到到指令位置的跳转命令:使用到遍扫描指令位置作为参数的的MICP闪存运行时支持的跳转操作修改跳转指令。
·如果原始代码库找到基于寄存器值跳转到指令位置的操作,以及从子例程支持的跳转操作:使用到遍扫描寄存器内容作为参数的MICP闪存运行时支持的跳转操作修改跳转指令。
·遍扫描1分支指令替换过程:如果原始代码库找到分支操作,那么遍扫描用分支命令和到遍扫描MICP闪存要跳转到的两个不同的目标位置的MICP闪存运行时支持的跳转操作替换分支。
遍扫描2:(图4-步骤33)
·遍扫描2过程:遍扫描1后(即在步骤30、32后)编译器生成的STB解码器的整个程序被逻辑划分为页面大小规模(如上所述计算得到)的多个页面,当对其进行遍扫描时,对代码进行修改,用在之前已经放置MICP运行时支持的闪存位置的地址处的处理器跳转指令替换每个页面的最后的指令(该步骤与遍扫描1类似,但只在代码页面限制时执行)。实际地址(下一个虚拟程序计数器)被传递给MICP运行时支持例程以供其找到在运行时加载的下一个页面。
第3遍扫描:(图4-步骤34和36)
·遍扫描3过程:该过程处理压缩和将压缩的代码存储到原始代码一半大小的闪存页面中,经由遍扫描1和2修改页面大小。除了使用的压缩过程的速度以外,唯一的要求是遍扫描3一定不能使用附加的DRAM用于解压缩(Lempel-Ziv-Oberhumer(LZO)过程可以用于该压缩遍扫描,也可以由MIPC闪存运行时支持从闪存解压缩页面到DRAM缓存器)。然后,遍扫描3逐个页面压缩所有的页面(页面大小z),构建页面大小z的压缩页面的闪存表。
在执行时,STB代码从开始地址加载到DRAM中,这意味着至少由遍扫描3得到的压缩页面表的第一页需要被加载、解压缩、存储在DRAM中,并需要执行跳转到第一条原始指令。我们说至少是因为,只看页面的最后一条指令并且还加载下一个顺序页面(或者多个,只看多个页面)到缓存器的运行时支持可以容易实现预取多个页面。这通过将开始地址传递给MIPC运行时支持例程实现。例程获取第一页面,对其进行解压缩,并将其存储在缓存器的第一位置。缓存器作为哈希表(哈希函数)存取,因此,页面的第一条指令的原始地址、传递给MIPC运行时支持的地址也存储在缓存器中以检查是否加载真实的代码页面。
然后,MIPC运行时支持跳转到DRAM,并从第一位置开始执行代码。第一地址位置应该选择为不同于零以最小化命中哈希(地址)=0。
执行代码,直到下一次跳转到下一个地址的MIPC运行时支持。MIPC运行时支持负责计算哈希(地址),并检查在DRAM代码缓存中是否存在从传递给例程的原始开始地址(例如,不考虑地址的前i位的最高有效位(2i=z,其中z是页面大小))开始的页面(地址/m个页面,其中m是闪存中压缩的页面的数量)。如果存储的原始地址(页面地址的开始或页面基址)等于传递给MIPC运行时支持例程的在取出地址最高的32i位后的地址(地址Mod m,其中m是闪存中压缩页面的数量),那么页面将存在在缓存中。
如果地址匹配,那么运行时例程跳转到该页面的缓存地址的开始+被传递给例程的地址的最低i位最低有效位。
如果地址不匹配,那么运行时例程需要加载位于位置地址/m的表中的闪存外面的压缩的页面,尽管块是原始未压缩的块的一半大小。
然后,例程解压缩块,并将结果存储在位置哈希(页面基址)的DRAM缓存器中,在此处还存储页面基址本身。如果位置被占用,那么用新的内容覆盖该位置(这管理用过的哈希函数的多次命中)。由于在遍扫描1和2期间可以收集所有的地址,并可以在编译时已知,因此假设DRAM中的n个页面是已知的,并在编译时是确定的,那么可以找到一个完美的哈希函数以避免多次命中。
图5示出了根据本发明的示例性实施方式的从闪存缓存未压缩的代码到RAM的过程的示例。在未压缩情形的示例中,遍扫描1的代码从DRAM运行,一条跳转指令跳转到内部地址(基址地址+2x+4)的页面3。MICP-RS从寄存器加载地址,并使用分区(Division)和哈希(基址地址+2z)找到DRAM中的基址地址+2z。如果页面不在那里,那么MICP-RS将其加载到DRAM中,并跳转到对的地址,继续STB代码运行。
在压缩情形的示例中(即,代码压缩在闪存中),加载操作涉及页面的本地解压缩。
图6示出了在具有<DRAM中未压缩代码的50%的规模的闪存中维持代码压缩的示例。代码的解压缩发生在可以运行任何代码并且可以使用MICP-RS支持执行任何跳转命令之前在解压缩结束时最终的代码页面驻留于其中的同一DRAM缓冲器中。
一个示例性的实施例增加了STB架构的细节、NOR闪存的特性和闪存中的代码压缩,并适用于传统解码器的任何指令集STB程序编译。
通常说来,这是软件指令缓存和压缩的应用,它适用于所有的机顶盒架构或,其中NOR闪存和DRAM成为升级新功能的瓶颈的小型传统的设备。
除了NOR闪存传统STB应用之外,描述的原理还适用于使用不具有被映射为直接存取以进行读取/写入操作而需要通过NAND-闪存文件系统接口连接的存储器的NAND-闪存设备的STB架构。图8示出了NAND-闪存文件系统408不是被映射为用于直接存取的存储器的示例。在此情形中,用于从闪存中读出和写入到DRAM的MICP运行时支持需要修改为与NAND-闪存文件系统应用程序接口(API)相关的设备接口连接。本领域的普通技术人员应该意识到,该与NAND-闪存文件系统的API接口连接根据该实施例的要求可以采取许多不同的形式。对本发明的这种修改使得其适用于新的STB架构,因此不仅限于本申请应用于传统STB。
基于本说明书中的教导,相关领域中普通的技术人员可以容易地确定本发明原理的这些和其他的特征和优点。应该理解的是,本发明原理的教导可以被实施成硬件、软件、固件、专用处理器或其组合的各种形式。
最优选地,本发明的原理的教导被实施为硬件和软件的组合。此外,软件被实施为有形地实施在程序存储单元上的应用程序。应用程序可以被上载到包括任何合适的体系结构的机器或者由包括任何合适的体系结构的机器执行。优选地,机器可以被实施在具有诸如一个或多个中央处理单元(CPU)、随机存取存储器(RAM)和输入/输出(I/O)接口的硬件的计算机平台上。计算机平台还包括操作系统和微指令代码。本说明书中描述的各个过程和功能可以要么是微指令代码的一部分,要么是应用程序(或它们的组合)的一部分或者是它们的任何组合,它们可以使用CPU执行。另外,可以将各种其他的外围单元连接到计算机平台上,诸如附加的数据存储单元和打印单元。
还应该理解的是,由于附图中描述的一些组成系统的组件和方法优选地被实施为软件,因此系统组件或过程功能块之间的实际连接可能根据本发明原理被编程的方式的不同而有所不同。考虑本说明书中的教导,相关领域中的普通技术人员能够设想出本发明的原理的这些以及类似的实施方式或配置。
尽管在本说明书中已经参照附图描述了本发明的示例性实施例,但是应该理解的是,本发明的原理并不限于这些精确的实施例,相关技术领域的普通的技术人员之一可以在不偏离本发明原理的范围的情况下对其做出各种变化和修改。所有这些变化和修改都旨在被包括在所附权利要求书陈述的本发明原理的范围内。
Claims (16)
1.一种用于设备中存储器管理的方法,所述方法包括以下步骤:
将未压缩的代码从设备中的闪存存储器缓存到设备中的动态随机存取存储器(DRAM)(12);
在所述闪存中维持压缩的代码(14);以及
在启动所述设备同时,在一时间段期间在DRAM中缓存所述未压缩的代码(14)。
2.如权利要求1所述的方法,其中所述缓存未压缩的代码(12)包括:
确定用于未压缩的代码的DRAM存储区域的规模(20);以及
在编译时应用遍扫描操作以从DRAM缓存生成可执行代码。
3.如权利要求2所述的方法,其中应用遍扫描操作(20)重建可执行代码,所述遍扫描操作进一步包括:
嵌入一个或多个跳转操作到运行时支持(32);
将驻留在闪存的特定区域中的代码的页面吸收到闪存组件的闪存块(33);
构建运行时支持表(34);以及
构建压缩的代码和可预取的页面(36)。
4.如权利要求3所述的方法,其中所述在闪存中维持代码为压缩的步骤(14)进一步包括:
基于预定义的固定数量的预取页面将驻留在被吸收的页面中的代码从所述闪存加载到所述DRAM中的预定义的缓存区域(40)。
5.如权利要求4所述的方法,其中所述加载(40)进一步包括:
从压缩的缓存缓冲器解压缩页面到分配用于代码执行的DRAM的解压缩的缓存缓冲器(26);以及
执行包含在DRAM解压缩的缓存缓冲器中的代码,直到下一次执行从闪存加载代码(28)。
6.如权利要求2所述的方法,其中所述在DRAM中缓存解压缩的代码(12)进一步包括:
在编译时添加用于闪存缓存的运行时支持(22)。
7.如权利要求2所述的方法,其中所述在DRAM中缓存解压缩的代码(12)进一步包括:
在编译时添加用于闪存缓存的运行时支持,其中所述添加的运行时支持包括与NAND-闪存文件系统应用程序接口连接的步骤。
8.一种具有存储器管理功能的装置,所述装置包括:
处理器(402);
闪存存储器(406),与处理器耦接;以及
DRAM存储器(404),与处理器耦接,
其中所述处理器被配置为在预定的时间窗口期间将来自闪存存储器的未压缩的代码缓存到DRAM存储器中,并在其他情况下在闪存存储器中维持压缩的代码。
9.如权利要求8所述的装置,其中所述闪存存储器包括NOR闪存。
10.如权利要求8所述的装置,其中所述预定的时间窗口在装置的编译阶段期间。
11.一种具有存储器管理能力的装置,所述装置包括:
用于将未压缩的代码从设备中的闪存存储器缓存到设备中的DRAM的部件;
用于在闪存中维持代码为压缩的部件;以及
用于在设备启动期间的预定的时间窗口期间在DRAM中缓存解压缩的代码的部件。
12.如权利要求11所述的装置,其中所述用于缓存未压缩的代码的部件进一步包括:
用于确定用于未压缩的代码的DRAM存储器区域的规模的部件(20);以及
用于在编译时应用遍扫描以从DRAM缓存生成可执行代码的部件。
13.如权利要求11所述的装置,其中所述用于应用遍扫描的部件进一步包括:
用于重建可执行代码的部件,所述用于重建的部件进一步包括,
用于嵌入一个或多个跳转到运行时支持的部件;
用于将驻留在闪存的特定区域中的代码的页面吸收到闪存组件的闪存块的部件;
用于构建运行时支持表的部件;以及
用于构建压缩的代码和可预取页面的部件。
14.如权利要求12所述的装置,其中所述用于在闪存中维持代码为压缩的部件(14)进一步包括用于基于预定义的固定数量的预取页面将驻留在被吸收的页面中的代码从闪存加载到DRAM中的预定义的缓存区域的部件。
15.如权利要求14所述的装置,其中所述用于加载的部件进一步包括:
用于从压缩的缓存缓冲器解压缩页面到分配用于代码执行的DRAM的解压缩的缓存缓冲器的部件;以及
用于执行包含在DRAM解压缩的缓存缓冲器中的代码,直到下一次从闪存加载的部件。
16.如权利要求11所述的装置,其中所述用于在DRAM中缓存解压缩的代码的部件进一步包括用于在编译时添加用于闪存缓存的运行时支持的部件。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2012/070731 WO2013110216A1 (en) | 2012-01-29 | 2012-01-29 | Method for flash compressed instruction caching for limited ram/flash device architectures |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104094239A true CN104094239A (zh) | 2014-10-08 |
Family
ID=48872875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280068407.7A Pending CN104094239A (zh) | 2012-01-29 | 2012-01-29 | 有限随机存取存储器/闪存设备架构的闪存压缩指令缓存方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150032945A1 (zh) |
EP (1) | EP2807565A4 (zh) |
CN (1) | CN104094239A (zh) |
WO (1) | WO2013110216A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106990911A (zh) * | 2016-01-19 | 2017-07-28 | 爱思开海力士有限公司 | Os和应用程序的透明存储器压缩技术 |
CN111209044A (zh) * | 2018-11-21 | 2020-05-29 | 展讯通信(上海)有限公司 | 指令压缩方法及装置 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10565099B2 (en) * | 2012-12-28 | 2020-02-18 | Apple Inc. | Methods and apparatus for compressed and compacted virtual memory |
US9875180B2 (en) | 2014-02-24 | 2018-01-23 | Sandisk Technologies Llc | Systems and methods for managing storage compression operations |
JP6195028B1 (ja) * | 2017-02-02 | 2017-09-13 | セントラル硝子株式会社 | α,α−ジフルオロアセトアルデヒドアルキルヘミアセタールの保存方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1997961A (zh) * | 2004-06-15 | 2007-07-11 | T1科技有限公司 | 用于引导计算机系统的方法和装置 |
US20080072211A1 (en) * | 2006-09-20 | 2008-03-20 | Rothman Michael A | Method and system for firmware image size reduction |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4769767A (en) * | 1984-01-03 | 1988-09-06 | Ncr Corporation | Memory patching system |
US6484228B2 (en) * | 2000-04-19 | 2002-11-19 | Motorola, Inc. | Method and apparatus for data compression and decompression for a data processor system |
US6990612B2 (en) * | 2002-07-18 | 2006-01-24 | Hewlett-Packard Development Company, L.P. | System and method for preventing software errors |
US20050010811A1 (en) * | 2003-06-16 | 2005-01-13 | Zimmer Vincent J. | Method and system to support network port authentication from out-of-band firmware |
US7433994B2 (en) * | 2004-12-07 | 2008-10-07 | Ocz Technology Group, Inc. | On-device data compression to increase speed and capacity of flash memory-based mass storage devices |
KR100695071B1 (ko) * | 2005-06-29 | 2007-03-14 | 삼성전자주식회사 | 칼라 레지스트레이션 보정 방법 및 보정 장치 |
US7932693B2 (en) * | 2005-07-07 | 2011-04-26 | Eaton Corporation | System and method of controlling power to a non-motor load |
US7703088B2 (en) * | 2005-09-30 | 2010-04-20 | Intel Corporation | Compressing “warm” code in a dynamic binary translation environment |
FI120422B (fi) * | 2007-07-02 | 2009-10-15 | Tellabs Oy | Menetelmä ja laitteita muutoslokin kompressoimiseksi käyttäen flash-transaktioita |
JP5046763B2 (ja) * | 2007-07-06 | 2012-10-10 | 株式会社パイオラックス | ハンドル装置 |
CN101398752B (zh) * | 2007-09-29 | 2011-08-31 | 国际商业机器公司 | 重叠指令存取单元和重叠指令存取方法 |
CN101930387A (zh) * | 2009-06-19 | 2010-12-29 | 上海惠普有限公司 | 用于更新压缩只读文件系统的改进的容错方法及装置 |
JP5296630B2 (ja) * | 2009-08-06 | 2013-09-25 | 富士通株式会社 | 無線タグおよび無線タグ製造方法 |
US9134918B2 (en) * | 2009-12-31 | 2015-09-15 | Sandisk Technologies Inc. | Physical compression of data with flat or systematic pattern |
US8522225B2 (en) * | 2010-06-25 | 2013-08-27 | International Business Machines Corporation | Rewriting branch instructions using branch stubs |
US20120047322A1 (en) * | 2010-08-20 | 2012-02-23 | Chung Shine C | Method and System of Using One-Time Programmable Memory as Multi-Time Programmable in Code Memory of Processors |
US8869546B2 (en) * | 2010-11-03 | 2014-10-28 | General Electric Company | Refrigeration demand response recovery |
US9378008B2 (en) * | 2010-12-20 | 2016-06-28 | Oracle International Corporation | Method and system for creating, applying, and removing a software fix |
US9355023B2 (en) * | 2011-03-15 | 2016-05-31 | Anirudh Badam | Virtual address pager and method for use with a bulk erase memory |
-
2012
- 2012-01-29 WO PCT/CN2012/070731 patent/WO2013110216A1/en active Application Filing
- 2012-01-29 CN CN201280068407.7A patent/CN104094239A/zh active Pending
- 2012-01-29 EP EP12866829.0A patent/EP2807565A4/en not_active Withdrawn
- 2012-01-29 US US14/367,191 patent/US20150032945A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1997961A (zh) * | 2004-06-15 | 2007-07-11 | T1科技有限公司 | 用于引导计算机系统的方法和装置 |
US20080072211A1 (en) * | 2006-09-20 | 2008-03-20 | Rothman Michael A | Method and system for firmware image size reduction |
Non-Patent Citations (2)
Title |
---|
CHANIK PARK等人: "Compiler-Assisted Demand Paging for Embedded Systems with Flash Memory", 《ACM INTERNATIONAL CONFERENCE ON EMBEDDED SOFTWARE》 * |
TONY BENAVIDES等人: "The Implementation of a Hybrid-Execute-In-Place Architecture to Reduce the Embedded System Memory Footprint and Minimize Boot Time", 《IEEE INTERNATIONAL CONFERENCE ON INFORMATION REUSE AND INTEGRATION》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106990911A (zh) * | 2016-01-19 | 2017-07-28 | 爱思开海力士有限公司 | Os和应用程序的透明存储器压缩技术 |
CN111209044A (zh) * | 2018-11-21 | 2020-05-29 | 展讯通信(上海)有限公司 | 指令压缩方法及装置 |
CN111209044B (zh) * | 2018-11-21 | 2022-11-25 | 展讯通信(上海)有限公司 | 指令压缩方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20150032945A1 (en) | 2015-01-29 |
WO2013110216A1 (en) | 2013-08-01 |
EP2807565A1 (en) | 2014-12-03 |
EP2807565A4 (en) | 2015-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7124275B2 (en) | Apparatus and method for determining a physical address from a virtual address by using a hierarchical mapping regulation with compressed nodes | |
CN105027090B (zh) | 用于固态驱动器中的物理到逻辑映射的方法、设备和系统 | |
CN101356509B (zh) | 用于在请求式页面调度系统中支持虚拟存储器管理的数据压缩方法 | |
CN104094239A (zh) | 有限随机存取存储器/闪存设备架构的闪存压缩指令缓存方法 | |
US8880836B2 (en) | Memory management device and method | |
CN101849222B (zh) | 使用别名寻址的可变长度指令编码的实现 | |
US8566372B2 (en) | Method and device for dynamically loading relocatable file | |
JP5182814B2 (ja) | プログラムコード変換中の実行制御 | |
TWI377502B (en) | Method and apparatus for performing interpreter optimizations during program code conversion | |
US20120072658A1 (en) | Program, control method, and control device | |
CN102792285A (zh) | 层级转换表控制 | |
US20160117257A1 (en) | Hardware-based array compression | |
CN102289380B (zh) | firefox启动加速方法 | |
US20060259681A1 (en) | Method and apparatus for storing compressed code without an index table | |
CN103748550A (zh) | 用于存储熵编码指令序列及将其翻译成可执行形式的方法和设备 | |
KR20010080525A (ko) | 가상 머신 명령들의 최적화된 바이트코드 인터프리터 | |
CN101707881B (zh) | 微码仿真存储器的高速缓存 | |
US20120254499A1 (en) | Program, control method, and control device | |
CN104216682A (zh) | 微处理器以及选择性解压缩微程序码的相关方法 | |
CN102792296B (zh) | 移动终端中请求页面调度方法、控制器以及移动终端 | |
CN101833519B (zh) | 一种减少存储技术设备中地址映射表常驻内存的方法 | |
CN115640078B (zh) | 基于虚拟文件系统数据智能预取的安卓应用加载优化方法 | |
CN111240765A (zh) | 一种linux压缩应用程序的加载方法 | |
JPH08161169A (ja) | Vliw方式の計算機システム及びvliwの解釈・実行方法 | |
CN114637499A (zh) | 可视化组件处理方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141008 |