嵌入式或无线通信系统中用于存储器分配的系统和方法

文档序号:7733161阅读:257来源:国知局
专利名称:嵌入式或无线通信系统中用于存储器分配的系统和方法
嵌入式或无线通信系统中用于存储器分配的系统和方法相关申请的交叉引用 本申请要求于2008年4月2日提交的题为MEMORY ALLOCATION SCHEME FOR EMBEDDED OR WIRELESS COMMUNICATION SYSTEMS (用于嵌入式或无线通信系统的存储器分 配方案)的美国临时专利申请S/N. 61/041,878的权益。该申请的全部内容通过援引纳入 于此。背景 发明领域本领域一般涉及存储器分配,尤其涉及嵌入式或无线通信系统中的存储器分配。
背景技术
存储器分配服务利用存储器项池。在一些情形中,存储器项基于存储器项的大小 被分序到不同的池中。例如,一个池可能包括许多小存储器项,而另一个池可能包括相对 少的大存储器项。响应于存储器分配请求,可从特定池中选择恰适数据项并将其返回给请 求方实体。该系统导致显著的存储器和处理器资源浪费。例如,在小存储器项的情况下,头 部与有效载荷之比较高,导致低效率的存储器使用。进一步,当整个存储器项被分配时,任 何特定数据项的显著数据部分可能处于未使用。另外,在这些分配服务中,没有统计复用可 用。处理器资源也因多个小存储器项的链接而被消耗。在无线通信系统中,分组常常被分段成较小的固定大小——例如40字节——的 “无线电链路”分组,以确保可靠的无线电传输。为了高效率地使用存储器,一种办法是创建 各保持40字节块的相对小存储器项的大池,这些存储器项最终在较高层上被链接在一起 以形成较大的数据块(例如,1500字节的IP分组)。此服务的一个缺点在于一些空间可能 被浪费,因为这些存储器项可能必须对准高速缓存行(32或64字节),这可能不适合小的无 线电链路分组大小。另外,不同技术可能共享相同的存储器项池以减小整个存储器,在这种 情形中必须将存储器项有效载荷大小选取为适合最大的无线电链路分组大小,其会进一步 增加浪费。发明概述在一个实施例中,提供了一种提供存储器管理的系统。该系统包括处理器和可在 该处理器上执行的存储器管理服务。该存储器管理服务可配置成生成第一存储器项,其中 第一存储器项中的每一者包括头部和有效载荷,有效载荷可配置成存储多个可独立分配的 存储器大块,第一存储器项的头部引用有效载荷中的可分配空间;生成第二存储器项,其中 第二存储器项中的每一者包括引用第一存储器项的有效载荷中的一个或多个存储器大块 的头部;以及响应于存储器分配请求返回来自或者第一或者第二存储器项的头部的引用。在另一个实施例中,提供了一种用于存储器管理的方法。该方法包括分配第一存 储器项,第一存储器项各自包括第一头部和有效载荷,有效载荷包括可独立分配的存储器 大块,第一头部包括对有效载荷中未分配存储器的引用;分配第二存储器项,第二存储器项各自包括第二头部,第二头部包括对第一存储器项的有效载荷中获分配存储器大块的引 用;接收对存储器分配的请求;以及通过返回来自第一或者第二存储器项的头部的引用来 响应对存储器分配的请求在另一个实施例中,提供了一种存储器管理系统。该系统包括用于分配第一存储 器项的装置,第一存储器项各自包括第一头部和有效载荷,有效载荷包括可独立分配的存 储器大块,第一头部包括对有效载荷中未分配存储器的引用;用于分配第二存储器项的装 置,第二存储器项各自包括第二头部,第二头部包括对第一存储器项的有效载荷中获分配 存储器大块的引用;用于接收对存储器分配的请求的装置;以及用于通过返回来自第一或 者第二存储器项的头部的引用来响应对存储器分配的请求的装置。在另一个实施例中,提供了编码有计算机指令的计算机可读介质。这些指令在被 执行时使得处理器分配第一存储器项,第一存储器项各自包括第一头部和有效载荷,有效 载荷包括可独立分配的存储器大块,第一头部包括对有效载荷中未分配存储器的引用;分 配第二存储器项,第二存储器项各自包括第二头部,第二头部包括对第一存储器项的有效 载荷中获分配存储器大块的引用;接收对存储器分配的请求;以及通过返回来自第一或者 第二存储器项的头部的引用来响应对存储器分配的请求。附图简要描述

图1是图解移动设备的示例的框图。图2是图解存储器项的示例的框图。图3是图解存储器项的另一个示例的框图。图4A和4B是图解用于分配存储器的方法的示例的框图。图5是图解存储器分配服务的执行的各种示例的框图。图6是图解用于分配存储器的方法的另一个示例的框图。优选实施例的详细描述以下详细描述涉及本发明的某些具体实施例。然而,本发明可用众多不同方式来 体现。应显然的是,本文中的各方面可用各种各样的形式来体现并且本文中所公开的任何 具体结构、功能或这两者仅仅是代表性的。基于本文中的教示,本领域技术人员应领会,本 文中所公开的一方面可独立于任何其他方面来实现,以及这些方面中的两个或多个可按各 种方式被组合。例如,使用本文中阐述的任何数目的方面,可实现装置或可实践方法。此外, 可使用其他结构、功能性或使用除本文中所阐述的方面中的一个或多个之外的或与之不同 的结构、功能性来实现这样的装置或实践这样的方法。移动设备典型地利用存储器分配服务来进行操作。本文中描述用以降低移动设备 中各种子系统所需的存储器的总量以及用以减少移动设备所消耗的处理资源的方法和设 备。以下阐述的是可联合所描述的方法和设备使用的一些架构。图1是图解移动设备102的示例的框图。设备102包括与存储器204通信的处理 器202以及用于经由无线链路106通信的网络接口 206。可任选地,设备102还可以包括 以下各项中的一者或多者显示器210 ;诸如按键、触摸屏、或其他合适的触觉型输入设备 之类的用户输入设备212 ;包括适于基于在无线链路106上接收到的信号提供音频输出的 换能器的扩音器214 ;和/或包括适于提供可在无线链路106上传送的信号的音频输入的 换能器的话筒216。例如,电话可包括适于提供图形用户界面(GUI)的视觉输出的显示器210。网络接口 206可包括任何合适的天线(未图示)、接收机220、和发射机222,以使 得示例性设备102可在无线链路106上与一个或多个设备通信。可任选地,网络接口 206 还可以具有用以减少处理器202的处理需求的处理能力。可任选地,设备102可包括经由链路108在网络110上通信的第二网络接口 208。 例如,设备102可经由有线或无线通信链路来提供与其他网络110(例如,诸如因特网之类 的广域网)的 连通性。因此,设备102可使得其他设备102(例如,Wi-Fi站)能接入其他网络 110。此外应领会,设备102中的一个或多个可以是便携式的,或者在一些情形中为相对非 便携式的。第二网络接口 208可传送和接收根据IEEE 802. 11标准(包括IEEE 802.11(a)、 (b)、或(g))、蓝牙标准的RF信号、和/或CDMA、GSM、AMPS信号或用于在无线蜂窝电话网络 中通信的其他已知信号。此外,第二网络接口 208可包括任何合适的有线网络接口,诸如以 太网(IEEE802. 3)、USB、或 MDDI。设备102可包括用以向设备102的一个或多个组件供电的电池231。设备102可 包括电话、智能电话、个人数字助理(PDA)、超级移动个人计算机(UMPC)、移动因特网设备 (MID)、或任何其他移动设备中的至少之一。具体而言,本文中的教示可被纳入多种设备102 中(例如,实现在其中或由其执行)。本文中所描述的组件可用多种方式来实现。参考图1,设备或装置102被表示为一 系列互相关的功能性块,这些功能性块可代表由例如处理器202、软件、其某种组合、或以如 本文中教示的其他某种方式来实现的功能。例如,处理器202可便于用户经由输入设备212 输入。进一步,发射机222可包括用于传送的处理器,该处理器提供与向另一个设备102传 送信息有关的各种功能性。接收机220可包括用于接收的处理器,该处理器提供与如本文 中所教示地接收来自另一个设备102的信息有关的各种功能性。处理器202还与存储器分配服务203通信。在一个实施例中,存储器分配服务203 在处理器202上运行。存储器分配服务203响应于来自在设备102中操作的一个或多个子 系统的对存储器的请求。存储器分配服务203的方法和操作将在以下更详细地描述。如以上所注意到的,图1图解了在一些方面中,这些组件可经由恰适的处理器组 件来实现。这些处理器组件在一些方面中可至少部分地使用如本文中所教示的结构来实 现。在一些方面中,处理器可适于实现这些组件中的一个或多个的功能性的一部分或全部。 在一些方面中,由虚线框所表示的组件中的一个或多个是可任选的。在一个或多个示例性实施例中,所描述的功能可以在硬件、软件、固件、或其任何 组合中实现。如果在软件中实现,则这些功能可以作为一条或多条指令或代码存储在计算 机可读介质上或在其上传送。计算机可读介质包括计算机存储介质和通信介质两者,后者 包括便于将计算机程序从一处转移到另一处的任何介质。存储介质可以是可被通用或专用 计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括RAM、R0M、 EEPR0M、CD_R0M或其它光盘存储、磁盘存储或其它磁存储设备、或可用来携带或存储指令或 数据结构形式的合需程序代码手段且能可通用或专用计算机、或者通用或专用处理器访问 的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件使用同轴电 缆、光纤电缆、双绞线、数字订户线(DSL)、或诸如红外、无线电、以及微波之类的无线技术从 web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、DSL、或诸如红夕卜、无线电、以及微波之类的无线技术就被包括在介质的定义之中。本文中所使用的盘和碟 包括压缩碟(CD)、激光碟、光碟、数字多用碟(DVD)、软盘和蓝光碟,其中盘通常磁性地再现 数据,而碟用激光来光学地再现数据。以上的组合也应被包括在计算机可读介质的范围之 内。根据存储器分配服务的一方面,小存储器块被包装成较大的固定大小的单元(称 为“DSM项”)。使用“DUP”(复制)项来保持对这些较小块中的每一者的跟踪,DUP项指向 DSM内的有效载荷。由于DSM项的大小有限,并且可假定DSM内的所有块具有近似的有限寿 命,因此没有必要处理每一个DSM内的自由存储器的碎片。这样的益处在于存储器利用率 可被极大地减少,因为每个DSM内 仅很少的存储器被浪费掉,但复杂度却是具有高包装效 率的其他存储器分配技术的分数。考虑这方面的另一种途径是这是固定大小和灵活大小分 配服务的混合,其中整个存储器按固定大小块被分配,但在这些块内允许灵活大小分配,因 为预期这些灵活分配具有较短的寿命。在一方面,基础存储器块被称为DSM项。其包括头部和有效载荷部分。当有数据 块必须被存储在存储器中时,分配新的DSM项并且该数据被复制到DSM的有效载荷部分中。 因此,头部被更新以反映该数据的开始和长度。如果该数据的长度超过有效载荷部分的大 小,则多个DSM项可被链接在一起成为链表。进一步,定义了特殊类型的DSM项,记为DUP (“复制”)。DUP使用与常规DSM相同 的头部结构,但没有其自己的有效载荷部分。作为代替,其可指向其它地方的数据部分,例 如正常DSM内部的数据部分。为了跟踪有多少DUP指向同一 DSM项中的数据,存在被记为 "ref_count (引用_计数)”的头部字段,其计数对该DSM项的引用的数目并且在原始DSM 首次被分配时被设为1。每次创建指向该DSM项内部的新DUP时,该DSM项的ref_COunt递 增。同样,当DUP被释放时,原始DSM项的ref_COimt递减。这样,分配算法可知晓该DSM 项何时可实际被释放,这仅在没有其他DUP指向该分组的有效载荷部分时发生,即在ref_ count已变回0时发生。DUP可被用于拆分分组、重新排序数据、移除头部等,而不必触及原始数据。所有这 些仅通过操纵DSM和DUP头部就能达成。根据另一方面,允许将数据包装成相同的DSM项以提高存储器效率的技术可解决 先前所提及的缺点中的一些。根据这方面,定义了较大DSM项的池。大DSM大小将允许来 自多个无线电链路分组的数据被级联到同一 DSM项中。图2是图解用于存储器分配服务的存储器项的框图。存储器分配服务可包括应用 编程接口(“API”)。此API可供诸如设备102中存在的子系统之类的子系统访问用。此 存储器分配服务可整体或部分地由处理器202或其他类似处理设备来执行。进一步,API可 构成诸如设备102之类的移动或无线设备的操作系统的一部分。或者,API可构成软件库 的一部分。在图2中,示出第一类存储器项610。此第一类存储器项610可被称为数据服务 管理(“DSM”)项。或者,它可被称为容器项。这些容器类存储器项610被组织成存储器项 池605。虽然图解了单个池605,但是应领会也可以使用多个DSM项池。每个池可由诸如项 大小或该池所服务的子系统之类的一个或多个公共特性来表征。图2中还提供了存储器项610的展开图。如该展开图中可见,这些容器类项610 包括多个部分。存储器项的第一部分可被称为头部615。头部615既可包含关于存储器项610的其余部分的信息,也可包含其他信息。存储器项610的第二部分可被称为有效载荷。 有效载荷自身可具有若干获分配存储器部分或块620。此外,有效载荷可具有未分配或未 使用空间625。在一个实施例中,有效载荷包括大致1500字节,约为存储IP分组所需的大存储器项610的头部615可包括诸如对存储器项610中未分配空间625的引用之 类的信息。在一个示例中,此引用采取指针的形式来指示存储器项610中未分配空间625 的开始地址。对数据项610中未分配空间625的此引用也可被称为“data_ptr (数据_指 针)”。头部还可以包含指示已分配存储器620的大小的字段。此已分配空间的量可被称为 有效载荷中的“已使用”空间。头部还可以包含指示标识与存储器项610相关联的存储器 池605的标识符的字段。此标识符可被称为“pool_id (池_id)”。头部还可以包含指示对 存储器项610的引用的数目的字段。例如,如以下所描述的,存储器项610可被其他存储器 项引用。例如,有效载荷的已分配大块620中的每一个被不同的存储器项引用。进一步,存 储器项610的头部615引用有效载荷的未分配部分625。这些引用的计数尤其可用于确定 存储器项610何时可被释放完并返回池605中以供后续再分配。此引用计数可被称为“引 用”。头部615还可以包含对其他存储器项的一个或多个引用。例如,如果所请求的存储器 大块太大而不适合单个存储器项610,则头部中的引用可被用于指示可被链接在一起以满 足该请求的一个或多个附加存储器项。取决于被引用的存储器项的类型,这些引用可被称 为“pkt_ptr (分组_指针)”或“dup_ptr”。例如,pkt_ptr可引用0个或多个DSM或容器 项,而dup_ptr可引用0个或多个DUP项。除所标识出的字段以外,头部615可包括诸如用 户定义字段或用于测试目的的字段之类的附加字段。此外,头部615可省略所标识出的字 段中的一个或多个。图2还图解了第二类存储器项630。此第二类存储器项可被称为复制或“DUP”存 储器项。这些DUP项630包括与容器存储器项610的头部615相类似的头部。例如,DUP 项可具有与DSM项头部615相同的字段。或者,DUP项可具有更多或更少字段。然而,这些 DUP项不具有其自己的有效载荷。相反,DUP项头部630包含对容器存储器项的引用。在一 个特定示例中,DUP项630包含指示存储器项610的已分配部分620中的第一个分配存储 器块的指针。这些DUP项630也可以被安排成一个或多个池640。像容器项的池605那样, 可以使用多个DUP项池。例如,图2图解了两个DUP项池640和650。在一个示例中,嵌入 式设备或无线通信设备中的每个子系统具有其自己的DUP项池。在本实施例中,池640可 对应于一个特定子系统,而池650可对应于另一个子系统。如图2中可见的,一个实施例提 供了来自分开的诸池的DUP项可引用单个DSM项610中的存储器块620。图3示出了图2中所图解的存储器项的替换实施例。像之前的那样,可使用单个 DSM项池715。然而这次,每个DUP项池730和735分别引用不同DSM项725和720的已分 配部分。如上所述,一旦对该有效载荷的全部引用都已被释放,DSM项就可返回DSM池715 中以供再分配。然而,当允许多个子系统使DUP引用到同一 DSM项中时,可能出现碎片。例 如,特定DSM中被分配给第一子系统的所有存储器可能已被释放。然而,如果有小块仍被来 自另一个子系统的DUP引用,则该有效载荷中的其余存储器可能在第二子系统释放其小存 储器块之前都必须等待被释放。为使此问题最小化,每个子系统可使其自己的DUP引用到 其自己的DSM中。这样,特定DSM中已分配存储器部分的寿命更可能相同。寿命的近似性导致碎片减少。图4A和4B图解用于分配存储器的方法780的实施例。此方法780可作为在诸如 处理器202之类的处理器上运行的服务来执行。方法780便于接收存储器分配请求以及返 回对已分配存储器的引用。如以下所描述的,所指派的特定引用可以是请求方子系统的当 前存储器分配境况和所请求存储器块的大小的函数。注意,这些步骤中的一些可被省略以 满足特定应用的要求或规范。还应注意,本文中所描述的这些步骤中的一些是优化且由此 可按照系统设计者的决定被选择性地使用或省略。方法780在存储器分配服务在步骤785处接收到存储器请求时开始。作为存储器 请求的一部分,请求方子系统可指定所请求的存储器大小。请求方子系统还可以提供子系 统ID以使得存储器分配服务可为该子系统选择恰适的DSM项。在接收到存储器请求之后, 存储器分配服务如判定步骤790中所示地确定所请求大小是否小于当前DSM容器项中未分 配存储器的大小。如参照图2和3所讨论的,DSM项在有效载荷部分中可具有未分配空间。 判定步骤790可通过将未分配部分的大小与所请求大小作比较来执行。或者,由于有效载 荷的总大小是已知的,因此可以将所请求量与有效载荷的已分配部分的大小作比较。在另 一个实施例中,并非使用所请求的存储器大小来作比较,而是存储器分配系统可增大请求 的大小以使得扩增后的请求与高速缓存边界对准。例如,可增大实际请求以使得结果所得 请求是诸如16、32、64、或128字节之类的特定高速缓存行大小的倍数。无论是所请求的存 储器大小还是扩增后的对准版本适合未分配部分,该方法都前进至步骤800。继续到判定步骤800,存储器分配系统确定所请求大小加上当前DSM项的先前已 分配部分的大小是否大于第一阈值。例如,如果DSM有效载荷是大致1500字节长,则阈值 可为1200字节。因此,存储器分配系统将确定已分配存储器的大小加上所请求存储器的大 小是否超过1200字节极限。在一个实施例中,阈值可被选为DSM项的有效载荷大小的特定 百分比。例如,阈值可为有效载荷大小的大致70%-80%。在另一个实施例中,阈值大小可 被选取成反映诸如对用以存储IP分组的存储器的请求之类的公共请求的大小特性。在另 一个实施例中,并非将已分配存储器的大小与阈值作比较,而是可将剩余未分配存储器的 大小与阈值作比较。在本实施例中,如果分配了所请求或经调整的存储器大小,则该服务将 计算有效载荷中将保持未分配的部分。剩余未分配存储器与此阈值的比较随后将以与先前 所讨论的已分配存储器与阈值的比较类似的方式来使用。通过执行判定步骤800,如果标识出的总和大于阈值,则该方法前进至步骤805。 在步骤805处继续,存储器分配系统向请求方子系统返回引用。在一个实施例中,所返回的 引用是来自当前DSM项的头部的data_ptr。有利地,通过返回来自DSM项的头部的引用,存 储器分配系统节省了在创建DUP项和返回来自DUP头部的引用时所涉及的开销和资源。进 一步,分配DSM有效载荷的剩余部分而非仅仅所请求的大小使得存储器分配服务能避免在 有效载荷的尾部的小块,否则这些小块若被使用将会导致链接。返回到判定步骤800,如果所请求存储器大小加上已分配存储器大小并未大于阈 值,则该方法前进至步骤810。在步骤810中,存储器分配服务创建DUP项,分配所请求的存 储器,并且向请求方子系统返回DUP中的引用。有利地,在多次迭代下,本方法允许存储器 分配服务能将多个分配包装成单个DSM项。此包装允许存储器资源的高效率使用并且在存 储器使用和处理使用两者中皆提供增益。
返回到步骤790,若所请求的存储器大小大于当前DSM项中的未分配空间,则该方 法继续到图4B的判定步骤845。在判定步骤845中,存储器分配服务确定所请求大小是否 大于第二阈值。此第二阈值像第一阈值一样可被设为固定数目的字节。例如,如果DSM项 有效载荷的大小为1600字节,则第二阈值可为1200字节。或者,第二阈值也可为被确定为 有效载荷大小的百分比。例如,第二阈值可为有效载荷大小的65%-75%。在另一实施例 中,该阈值可被动态地确定。例如,该阈值可被设为等于DSM项中已分配存储器的总量。在 本实施例中,当所请求大小超过DSM中的已分配空间时,所请求大小将超过该阈值。不管如 何确定该阈值,如果所请求大小大于此阈值,则存储器分配服务就将如步骤850中所示地 分配新DSM项并且向请求方子系统返回来自新DSM项头部的data_ptr。类似于步骤805, 返回来自新DSM项的头部的引用的此过程节省了创建新DUP项的开销。请求方子系统被给 予多于其要求的——即整个DSM项,并且此分配允许后续分配请求能用当前DSM项中剩余 的未分配存储器来满足。返回到步骤845,如果所请求大小小于此第二阈值,则该方法前进至步骤855。在 步骤855中,删除对DSM有效载荷的未分配部分的DSM项头部引用。实际上,这释放完DSM 项中的剩余部分。此外,创建新DSM项。分配该新DSM项中的存储器块并且创建相应的DUP。 新DUP中对新DSM项的引用随后被返回给请求方子系统。出于解释目的,在图5中图解了前述方法的示例。在情形1中,图解了当前DSM项 910。当前DSM具有已分配部分915和未分配部分920。所请求分组大小925被示为在第一 阈值930中。如图所示,已分配部分915的大小加上所请求部分925的大小小于第一阈值 930。因此,如图所示,DSM项935的大块被分配,以及新DUP项被创建且其引用被返回给调 用方子系统。该新DUP项包括指向新分配数据的开始的对DSM 935中的引用。在情形2中,联合另一个所请求分组960示出当前DSM 955。如图所示,DSM955 的已分配部分的大小加上所请求分组的大小超过第一阈值,但总和并未超过总有效载荷长 度。因此,对DSM项965的未分配部分的引用被返回给请求方子系统。结果是除了获得所 请求存储器大小或甚至是稍大的经调整行分配之外,请求方子系统将获得DSM 965中的所 有剩余未分配空间980。再次,返回来自DSM项头部的引用节省了创建DUP的开销并且消除 了否则将会留下的残端980所创建的链接可能性。在情形3中,与另一个所请求存储器块990 —起示出当前DSM 985。如图所示,所 请求分组太大而不适合当前DSM的未分配部分。此外,所请求大小小于第二阈值995。因 此,删除当前DSM 1000的头部中对有效载荷的未分配部分的引用。创建新DSM 1005。分配 来自该DSM的存储器块并且创建引用该新DSM中获分配块的新DUP项。来自该新DUP项的 引用随后被返回给请求方子系统。再次将领会,虽然第二阈值995被示为静态的,但该阈值 可诸如通过将其设为等于初始已分配存储器的大小来动态地确定。在情形4中,连同所请求存储器块1015—起示出当前DSM 1010。如同情形3那 样,所请求大小太大而不适合当前DSM项1010的未分配部分。此外,所请求块大小1015大 于第二阈值995。结果是当前DSM 1020被保留在其当前状态。同时,创建新DSM 1025并且 返回该新DSM头部中对有效载荷的未分配部分的引用。图6类似于图4A和4B中所图解的方法。然而,图6提供相对于用于分配存储器 的服务的一个实施例中所使用的特定参数的变型。图6中所图解的方法1080为存储器分配请求提供API。在一个特定实施例中,方法1080为子系统提供可用于请求存储器分配的 函数调用。如图所示,该函数可以采取所请求的存储器分配大小作为参数。此外,该函数可 采取诸如标识请求方子系统的子系统ID之类的其他参数。图6所代表的服务可被配置成 在诸如设备102的处理器202之类的处理器上运行。响应于分配请求,该服务如以下所讨 论地准备指向大小大于或等于所请求大小的获分配存储器块的指针。因此,使用该服务的 API的子系统被返回指向获分配存储器的指针。在一个特定实施例中,图6中所图解的方法 在其操作期间使用以下值中的一些或全部current_dsm_item_ptr[](当前_(1細_项_指针[])这是每个子系统的指向当前 DSM项的指针集。aligned_pkt_size (经对准_分组_大小)这是所请求的存储器块的大小,其被 调整成与诸如16、32、64、或128之类的大小的高速缓存行对准。pkt_ptr (分组_指针)即将被返回的指向获分配存储器的指针。DSMI_MEM_THRESHOLD_TO_FREE_DSM (DSMI_ 存储器 _ 阈值 _ 用以-释放 _DSM)用 于确定应返回DUP还是DSM引用的第一阈值。如果在分配存储器块之后,剩余未分配存储 器将小于此阈值,则返回DSM引用,从而有效地分配该DSM项中的所有剩余未分配存储器。DSMI_THRESH0LD_F0R_C0MPLETE_ITEM_ALL0CATI0N (DSMI_ 阈值 _ 用以-完整 _ 项 _分配)用于确定应返回DUP还是DSM引用的第二阈值。如果所请求分组大小大于此阈 值,则创建新DSM项并返回来自新DSM的头部的引用。当前DSM被保留。图6中所图解的方法始于1085处所示的函数调用。作为该请求的参数,分配服务 接收所请求的分组大小“pkt_size”。此外,在一些实施例中,还将向函数调用传递另一个参 数,即子系统ID。前进至步骤1100,该方法锁定特定DSM项池以避免并发访问问题。在锁 定池之后,该方法前进到判定步骤1105。在判定步骤1105处,该服务确定pkt_ptr是否为 空。如果针对该请求尚未分配存储器,则该指针可为空。然而,如果该指针具有非空值,则 服务前进至解锁池(1140)并返回指针(1145)。然而,如果指针为空,则服务前进至判定步 骤 1110。在判定步骤1110处继续,服务确定Current_dSm_item_ptr是否为空。如果先前 迭代已导致不存在当前DSM项,则服务前进至创建一个DSM项(1115),并且若这样的创建失 败则退出(1120、1140、1145)。一旦确认存在或创建了有效的当前DSM,该方法前进至判定 步骤1125。在判定步骤1125处,服务确定经对准的所请求大小是否小于当前DSM中未分配 空间的大小。如果是,则服务随后在步骤1130处确定DSM中在分配所请求存储器之后将剩 余的未分配空间是否小于第一阈值。若如此,则服务创建DUP并且在当前DSM中分配经对 准的所请求存储器(1135),解锁池(1140),并返回DUP指针(1145)。若否,则服务创建全新 的DSM(1150),解锁池(1140),并返回来自该新DSM的头部的指针(1145)返回到步骤1125,如果所请求大小大于剩余未分配空间,则该方法前进至判定步 骤1155。在步骤1155处,该服务确定所请求大小是否大于或等于第二阈值。若如此,则服 务创建全新的DSM(1165),解锁池(1140),并返回来自该新DSM的头部的指针(1145)若否, 则该服务释放当前DSM中的剩余存储器并前进至在步骤1105处再次开始该方法。结果是 新DSM被创建,引用该新DSM的主体的DUP被创建,并且DUP指针被返回给请求方子系统。本存储器分配服务的附加特征和实施例也在本文中呈现
用于不同用户的多DSM指针为了处置其中期望数据块的寿命对于不同用户实质地不同的情形,该算法可维护 多个DSM指针,并且仅将具有近似寿命的数据块包装成相同的DSM。例如,用户专用ID可连 同分配请求一起被传递,以使得仅来自此用户的数据将会被包装成相同的DSM项。来自其 他用户的请求将会被包装成其他DSM。此处,“用户”可以是用以将一组用户简档与其他的 区别开来的一组任务或子任务或层或函数,或这些的任何其他组合。支持在DSM的前部(或后部)添加数据为了高效率地处置在现有DSM或DUP项的前部中添加数据(即,添加协议头部) 而不必分配新DSM项和执行链接,建议允许分配在前部中具有自由空间的DSM。通过“偏移 量”头部来保持对该自由空间的跟踪。这样,DUP或DSM可被分配给定偏移量,并且以后若 有更多数据需要被插入DSM的前部中,这可以不进行新DSM分配及随后的链接就能完成。可 允许用于在DSM的尾部中添加数据的类似服务。多个池该服务允许多个DSM池,从而允许为特定用户预留给定数目的项。这样,该用户将 不必担忧因为另一个用户已分配到全部DSM项而突然没有更多自由DSM项。另外,这提供 了更好的存储器超支问题(其中一个用户超驰分配的边界)的调试能力,因为该问题被局 限在仅此用户的代码库中。作为多个池的替换方案的配额服务达成相同目的的另一种途径是具有一个池,但每个用户具有他可分配的DSM项的 最大配额(字节)。一旦他已达到其配额,他为了分配新项就必须释放一些项,以避免其他 用户的存储器匮乏。其胜于多池办法的一项益处在于仍可达成共享。例如,如果有4个用 户,其自己的池为X项,则可能需要存储器有4X项。然而由于极不可能所有4个用户将同 时分配所有项,因此配额服务可允许将总存储器减少到比方说3X,假定如果一个用户取得 其所有存储器=X,则其余3个用户将能够共享剩余存储器=2X。用于不同大小的多DSM指针在这方面,可基于所请求的存储器空间来划分DSM分配(与使用以上的子系统ID 相反)。本提议并非使用跨多个层/子系统共享的多种大小的池的常规途径来满足所有任 务/侧面的需要,而是可存在支持多个DSM指针的规定,根据该规定每个DSM指针可分配仅 特定大小的块。例如,我们可具有用于128、256、512、768、1024、1536字节块大小等的05皿 指针。每当任何层/模块请求特定大小的存储器时,算法可确定最合适的DSM指针并在 所请求的大小可用的情况下提供dup。如果所请求大小不可用,则释放该大小的DSM指针 (若非空)并分配来自较大项的全局池的较大项(例如,大于预定字节数目的项,在一个示 例中为大于或等于768字节的项),以及随后复制(DUP)该最合适块大小并将该DUP返回给
调用者。本分配还具有胜于现有技术的若干截然不同的优点。本服务的实施例减少了存储 器占用量。较少池的使用允许更好的统计复用。该服务助益更好的包装效率。DSM项即使 带有用于DUP的增添开销也具有更少的开销。CPU处理开销(MIPS)因较少的链接而被减 少。该服务允许使用较大的DSM项来避免长分组链(尤其是有较大分组大小时),从而减少DSM分配/释放操作的次数。各实施例简化了与涉及多个存储器池的更常规办法相关联的 维护。该服务可被实现为具有用于进行处置的中央API,这避免了每子系统必须实现这样的 功能性,从而避免了复制代码。避免了每目标对单独的池大小和项大小的需要。在没有本 文中所勾勒的技术的情况下,任何人可能需要在许多地方(例如,诸如分组服务模块(PS)、 高速USB(HS-USB)模块等堆栈中的各种或多个层)分开实现代码,这更倾向于出错等。可 例如通过在低等待时间存储器(例如,内部随机存取存储器(IRAM))中定义DUP池来在高 速存储器中定义DUP池以进一步改进性能(例如,有益于高速缓存)。若此应用编程接口 (API)仅使用一个池,则可获得DSM检查的减少。当前DSM基于作为参数来传递的池ID (标 识)执行一些检查。
权利要求
一种存储器管理系统,包括处理器;以及可在所述处理器上执行的存储器管理服务,所述存储器管理服务可配置成生成第一存储器项,其中所述第一存储器项中的每一者包括头部和有效载荷,所述有效载荷可配置成存储多个可独立分配的存储器大块,所述第一存储器项的所述头部引用所述有效载荷中的可分配空间;生成第二存储器项,其中所述第二存储器项中的每一者包括引用所述第一存储器项的所述有效载荷中的一个或多个存储器大块的头部;以及响应于存储器分配请求返回来自或者第一或者第二存储器项的所述头部的引用。
2.如权利要求1所述的存储器管理系统,其特征在于,所述第一存储器项的所述头部 维持对所述第一存储器项的引用的计数。
3.如权利要求1所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成为多个子系统中的每一个生成单独的第一存储器项。
4.如权利要求1所述的存储器管理系统,其特征在于,所述存储器分配请求包括所请 求存储器大小。
5.如权利要求4所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成确定特定第一存储器项的有效载荷中已分配存储器的大小与所述所请求存储器大 小的总和,并且将所述总和与阈值作比较。
6.如权利要求5所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成当所述总和小于所述阈值时生成特定第二存储器项并返回来自所述特定第二存储 器项的头部的引用。
7.如权利要求6所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成在所述总和大于所述阈值时返回来自所述特定第一存储器项的所述头部的引用。
8.如权利要求4所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成确定特定第一存储器项的有效载荷中已分配存储器的大小与所述所请求存储器大 小的总和,将所述总和与所述特定第一存储器项的所述有效载荷的大小作比较,以及将所 述所请求存储器大小与阈值作比较。
9.如权利要求8所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成在所述总和大于所述特定第一存储器项的所述有效载荷的所述大小并且所述所请 求存储器大小小于所述阈值时生成另一个特定第一存储器项,生成引用所述另一个特定第 一存储器项的有效载荷的特定第二存储器项,并返回来自所述特定第二存储器项的头部的 引用。
10.如权利要求8所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步 配置成在所述总和大于所述特定第一存储器项的所述有效载荷的所述大小并且所述所请 求存储器大小大于所述阈值时生成另一个特定第一存储器项,并返回来自所述另一个特定 第一存储器项的头部的引用。
11.如权利要求8所述的存储器管理系统,其特征在于,所述阈值是所述特定第一存储 器项中已分配存储器的大小。
12.如权利要求4所述的存储器管理系统,其特征在于,所述存储器管理服务可进一步配置成增大所述所请求存储器大小以使所述所请求存储器大小与高速缓存线边界对准。
13.一种存储器管理方法,所述方法包括分配第一存储器项,所述第一存储器项各自包括第一头部和有效载荷,所述有效载荷 包括可独立分配的存储器大块,所述第一头部包括对所述有效载荷中未分配存储器的引 用;分配第二存储器项,所述第二存储器项各自包括第二头部,所述第二头部包括对第一 存储器项的所述有效载荷中获分配存储器大块的引用; 接收对存储器分配的请求;以及通过返回来自第一或者第二存储器项的所述头部的引用来响应对存储器分配的请求。
14.如权利要求13所述的方法,其特征在于,所述第一头部还包括对所述第一存储器 项的引用的计数。
15.如权利要求13所述的方法,其特征在于,所述分配第一存储器项进一步包括为多 个子系统中的每一个分配单独的第一存储器项。
16.如权利要求13所述的方法,其特征在于,所述存储器分配请求包括所请求存储器大小。
17.如权利要求16所述的方法,其特征在于,还包括确定特定第一存储器项的有效载 荷中已分配存储器的大小与所述所请求存储器大小的总和,并且将所述总和与阈值作比较。
18.如权利要求17所述的方法,其特征在于,还包括在所述总和小于所述阈值时分配 特定第二存储器项并返回来自所述特定第二存储器项的头部的引用。
19.如权利要求18所述的方法,其特征在于,还包括在所述总和大于所述阈值时返回 来自所述特定第一存储器项的所述头部的引用。
20.如权利要求16所述的方法,其特征在于,还包括确定特定第一存储器项的有效载荷中已分配存储器的大小与所述所请求存储器大小 的总和;将所述总和与所述特定第一存储器项的所述有效载荷的大小作比较;以及 将所述所请求存储器大小与阈值作比较。
21.如权利要求20所述的方法,其特征在于,还包括 生成另一个特定第一存储器项;生成引用所述另一个特定第一存储器项的有效载荷的特定第二存储器项;以及 当所述总和大于所述特定第一存储器项的所述有效载荷的所述大小并且所述所请求 存储器大小小于所述阈值时返回来自所述特定第二存储器项的头部的引用。
22.如权利要求20所述的方法,其特征在于,还包括 生成另一个特定第一存储器项;以及当所述总和大于所述特定第一存储器项的所述有效载荷的所述大小并且所述所请求 存储器大小大于所述阈值时返回来自所述另一个特定第一存储器项的头部的引用。
23.如权利要求20所述的方法,其特征在于,所述阈值是所述特定第一存储器项中已 分配存储器的大小。
24.如权利要求16所述的方法,其特征在于,还包括增大所述所请求存储器大小以使所述所请求存储器大小与高速缓存线边界对准。
25.一种存储器管理系统,包括用于分配第一存储器项的装置,所述第一存储器项各自包括第一头部和有效载荷,所 述有效载荷包括可独立分配的存储器大块,所述第一头部包括对所述有效载荷中未分配存 储器的引用;用于分配第二存储器项的装置,所述第二存储器项各自包括第二头部,所述第二头部 包括对第一存储器项的所述有效载荷中获分配存储器大块的引用;用于接收对存储器分配的请求的装置;以及 用于通过返回来自第一或者第二存储器项的所述头部的引用来响应对存储器分配的 请求的装置。
26.—种编码有计算机指令的计算机可读介质,所述指令在被执行时使得处理器分配第一存储器项,所述第一存储器项各自包括第一头部和有效载荷,所述有效载荷 包括可独立分配的存储器大块,所述第一头部包括对所述有效载荷中未分配存储器的引 用;分配第二存储器项,所述第二存储器项各自包括第二头部,所述第二头部包括对第一 存储器项的所述有效载荷中获分配存储器大块的引用;接收对存储器分配的请求;以及通过返回来自第一或者第二存储器项的所述头部的引用来响应对存储器分配的请求。
全文摘要
嵌入式或无线设备中用于改进的存储器分配服务的系统和方法。使用容器存储器项的组合并引用存储器项来分配存储器。
文档编号H04L12/56GK101971581SQ200980109315
公开日2011年2月9日 申请日期2009年4月2日 优先权日2008年4月2日
发明者S·马赫施瓦瑞, T·克林根伯恩, V·A·库玛 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1