堆栈管理的制作方法

文档序号:26841103发布日期:2021-10-08 22:46阅读:190来源:国知局
堆栈管理的制作方法
堆栈管理
1.优先权声明
2.本技术要求于2019年2月27日提交的共同拥有的美国临时专利申请第62/811,403号、和于2020年2月26日提交的美国非临时专利申请第16/801,776号的优先权,其中每个申请的内容明确地通过整体引用并入本文。
技术领域
3.本公开总体上涉及堆栈管理。


背景技术:

4.技术的进步导致了更小和更强大的计算设备。例如,目前存在多种便携式个人计算设备,包括诸如移动和智能电话等无线电话、平板电脑和膝上型计算机,它们体积小、重量轻且易于用户携带。这些设备可以通过无线网络传送语音和数据分组。此外,很多这样的设备合并附加功能,诸如数码相机、数码摄像机、数码录音机和音频文件播放器。此外,这样的设备可以处理可执行指令,包括可以用于访问互联网的软件应用,诸如网络浏览器应用。因此,这些设备可以包括重要的计算能力。
5.计算设备包括处理器,诸如数字信号处理器(dsp)。在dsp中,每个任务通常具有被称为堆栈的存储器的相关联区域。在某些dsp中,与任务相关联的堆栈的平均大小为8kb(kb),但在某些情况下,与任务相关联的堆栈可能高达128kb。为了保护软件完整性,如果任务尝试使用超过分配堆栈的空间,则会生成异常。堆栈的大小通常被调整为处理特定任务的最坏情况。因此,在正常(例如,非最坏情况)情况下,所分配的堆栈空间的大部分仍未使用。


技术实现要素:

6.在特定方面,一种管理堆栈的方法,包括由处理器的堆栈管理器检测待被分配的帧的大小超过第一堆栈的可用空间。第一堆栈由在处理器处执行的特定任务使用。该方法还包括指定供特定任务使用的第二堆栈。该方法还包括将与第一堆栈相关联的元数据复制到第二堆栈。元数据使得堆栈管理器能够在检测到第二堆栈不再由特定任务使用时,从第二堆栈转变到第一堆栈。该方法还包括在第二堆栈中分配帧。
7.在另一特定方面,一种设备包括第一存储器、第二存储器和处理器的堆栈管理器。第一存储器被配置为包括第一堆栈。第二存储器被配置为包括第二堆栈。堆栈管理器被配置为检测待被分配的帧的大小超过第一堆栈的可用空间。第一堆栈由在处理器处执行的特定任务使用。堆栈管理器还被配置为指定第二堆栈以供特定任务使用。堆栈管理器还被配置为将与第一堆栈相关联的元数据复制到第二堆栈。元数据使得堆栈管理器能够在检测到第二堆栈不再由特定任务使用时,从第二堆栈转变到第一堆栈。堆栈管理器还被配置为在第二堆栈中分配帧。
8.在另一特定方面,一种计算机可读存储设备存储指令,该指令在由处理器执行时
使处理器执行操作,该操作包括检测待被分配的帧的大小超过第一堆栈的可用空间。第一堆栈由在处理器处执行的特定任务使用。该操作还包括指定供特定任务使用的第二堆栈。该操作还包括将与第一堆栈相关联的元数据复制到第二堆栈。元数据使得堆栈管理器能够在检测到第二堆栈不再由特定任务使用时,从第二堆栈转变到第一堆栈。该操作还包括在第二堆栈中分配帧。
9.本公开的其他方面、优点和特征在阅读整个申请(包括以下部分:附图说明、具体实施方式和权利要求)之后将变得清楚。
附图说明
10.图1是可操作以执行堆栈管理的系统的特定说明性方面的框图;
11.图2是堆栈管理的特定说明性示例的图;
12.图3是堆栈管理的特定说明性示例的图;
13.图4是堆栈管理的特定说明性示例的图;
14.图5是堆栈管理的特定说明性示例的图;
15.图6是堆栈管理方法的特定说明性示例的图;以及
16.图7是可操作以执行堆栈管理的设备的特定说明性示例的框图。
具体实施方式
17.参考图1,公开了可操作以执行堆栈管理的系统的特定说明性方面,该系统总体上指定为100。系统100包括一个或多个处理器102,在本文中统称为“处理器102”。处理器102包括核心106,诸如数字信号处理器(dsp)核心、中央处理单元(cpu)核心或这两者。处理器102包括存储器管理单元(mmu)110、堆栈管理器112或这两者。在图1中,mmu 110和堆栈管理器112被示出为在核心106外部。在一些实现中,核心106包括mmu 110、堆栈管理器112或这两者。处理器102包括紧密耦合存储器(tcm)104、高速缓存108(例如,2级(l2)高速缓存)或这两者。
18.处理器102耦合到存储器114(例如,双倍数据速率(ddr)同步动态随机存取存储器(sdram)。在特定方面,存储器114被配置为包括固件(fw)堆栈120(例如,开始堆栈)、fw堆栈124(例如,结束堆栈)或这两者。在特定方面,tcm 104包括fw堆栈122。在特定方面,fw堆栈122具有与fw堆栈120的第二延迟时间、fw堆栈124的第三延迟时间或这两者相比减少(例如,较低)的第一延迟时间(例如,读取延迟时间、写入延迟时间、访问延迟时间或其组合)。在一个示例中,减少的延迟时间是由于在tcm 104处与在存储器114相比,更快的数据访问。
19.在特定方面,fw堆栈用于固件任务,诸如由固件执行以初始化cpu核心、存储器、外围设备、图形等的任务。在特定方面,软件(sw)堆栈用于软件任务,诸如由cpu执行的软件应用。在特定实现中,与软件任务相比,固件任务可以具有更高优先级并且可以在更低延迟存储器中接收堆栈空间。在特定方面,存储器114包括软件(sw)堆栈126和一个或多个共享堆栈128。例如,共享堆栈128包括可用存储器空间池,可用存储器空间池可以被动态分配以作为堆栈供处理器102处的任务使用。如图所示,共享堆栈128包括堆栈130、堆栈132和堆栈134。虽然示出了三个堆栈(堆栈130、堆栈132和堆栈134),在其他实现中,共享堆栈128可以包括任何数目的堆栈。在特定方面,共享堆栈128中的每个被分配存储器114的相等大小的
块。例如,共享堆栈128中的每个可以具有第一特定大小,并且第一特定大小可以大于sw堆栈126的大小。备选地,共享堆栈128可以具有各种大小。例如,堆栈130可以具有不同于(例如,大于)堆栈132的第二大小的第一大小。
20.在动态分配的堆栈的常规实现中,当在处理器102处执行的任务超过其分配的堆栈时,mmu 110可以被配置为协助分配附加存储器以供任务的堆栈使用,诸如通过在堆栈跨越存储器页面边界时提供虚拟到物理地址的转变(例如,在转变后备缓冲区(tlb)中)。然而,根据本公开的各方面,堆栈管理器112被配置为独立于mmu 110执行堆栈管理,包括堆栈空间的动态分配,如参考图2进一步描述的。
21.堆栈管理器112包括异常处理程序142、返回处理程序144、用于存储堆栈管理值的一个或多个寄存器、或它们的组合。异常处理程序142被配置为使得堆栈管理器112能够在以下情况下在被单个任务用作堆栈(称为“拆分堆栈”)的存储器的不同(例如,非连续)部分之间转变:任务超过所分配的堆栈存储器的第一部分(该任务的拆分堆栈的“第一堆栈”)、并且继续进入所分配的堆栈存储器的下一部分(拆分堆栈的“第二堆栈”)时。例如,固件任务可以具有拆分堆栈,拆分堆栈在fw堆栈120(例如,堆栈的任务设置部分)中开始并且延伸到tcm 104中的fw堆栈122中,以实现对任务的“热”部分的更快访问。异常处理程序142使得堆栈管理器112能够在固件任务的堆栈超过fw堆栈120(例如,发生堆栈溢出)时,从fw堆栈120处的堆栈操作转变到fw堆栈122处的堆栈操作,如参考图2

图6更详细地描述的。如果固件任务需要超过fw堆栈120和fw堆栈122的组合大小的堆栈,则异常处理程序142使得堆栈管理器112能够从fw堆栈122转变到第三堆栈,诸如fw堆栈124或共享堆栈128中的堆栈。在特定方面,fw堆栈120对应于存储器114的第一存储器区域,该第一存储器区域不同于与fw堆栈124相对应的存储器114的第二存储器区域。如本文中使用的,“不同”包括至少一个差异。例如,当存在区分第一组件与第二组件的至少一个差异(例如,“第一组件”和“第二组件”不是同一组件的不同标签)时,第一组件不同于第二组件。作为另一示例,软件任务可以在软件堆栈126中开始,并且在超过软件堆栈126(例如,堆栈溢出)时,异常处理程序142使得堆栈管理器112能够转变到用于共享堆栈128的软件任务的第二堆栈。为了说明,异常处理程序142包括元数据复制器146。元数据复制器146操作为将元数据从第一堆栈复制到第二堆栈,以作为从第一堆栈到第二堆栈的转变的一部分,如参考图2进一步描述的。堆栈使用以硬件、软件或这两者实现的功能以线性方式被分配给任务。可以在硬件或软件中检测到堆栈溢出。在特定方面,堆栈管理器112以软件实现,并且与用于使用mmu 110实现堆栈管理的硬件相比,没有使用附加硬件来使用堆栈管理器112来实现堆栈管理。
22.返回处理程序144被配置为使得堆栈管理器112能够在任务的拆分堆栈的管理期间独立于mmu 110从第二堆栈转变到第一堆栈。例如,当上述固件任务从fw堆栈122中的第一函数返回时,返回处理程序144使得堆栈管理器112能够继续fw堆栈120处的堆栈操作,如参考图2

图6进一步详细描述的。作为另一示例,当上述软件堆栈从共享堆栈128中的软件任务的堆栈的第一函数返回时,返回处理程序144使得堆栈管理器112能够继续sw栈126处的堆栈操作。
23.在一些实现中,软件任务在tcm 104中不具有堆栈部分,并且tcm 104的一部分(或全部)被保留以供固件任务(其通常可以具有比软件任务更高的优先级)的堆栈使用。在其他实现中,一个或多个高优先级软件任务可以接收tcm 104中的堆栈空间。在其他实现中,
tcm 104不用于堆栈,而是所有堆栈都在存储器114中实现。因此,本公开不限于上述具体示例。
24.通过使用异常处理程序142和返回处理程序144来在拆分堆栈实现的堆栈之间进行转变,可以增加或减少用于个体任务的堆栈的大小而不受限于存储器页面边界、并且不使用mmu 110进行地址转换。因此,可以基于特定任务特性更灵活地提供堆栈大小分配,并且能够减少整体存储器使用。此外,堆栈管理器112可以跟踪堆栈使用,并且可以基于返回处理程序144的执行,来检测和解除分配未使用堆栈,从而与使用mmu的常规堆栈解除分配相比,提供降低的复杂性和时间消耗,其可以包括中断正在执行的任务并且将任务的堆栈指针(例如,当前堆栈指针)与分配给该任务的堆栈的存储器地址进行比较来确定是否可以释放与所分配的堆栈相对应的存储器。
25.参考图2,公开了第一堆栈管理的特定示例,第一堆栈管理总体上指定为210,并且公开了第二堆栈管理的特定示例,第二堆栈管理总体上指定为250。在特定方面,第一堆栈管理210对应于结合诸如图1的mmu 110等mmu的常规实现。在特定方面,第二堆栈管理250由图1的堆栈管理器112、异常处理程序142、返回处理程序144或其组合执行。在特定方面,第一堆栈管理210和第二堆栈管理250是备选实现。在这方面,mmu 110执行第一堆栈管理210或堆栈管理器112执行第二堆栈管理250。
26.在第一堆栈管理210的示例中,堆栈212包括堆栈帧214、堆栈帧216和未分配堆栈232。堆栈帧214包括链路返回(lr)值220、帧指针(fp)值222、和由任务调用的第一函数的局部数据224。堆栈帧216包括lr值226、fp值228、和由任务调用的第二函数的局部数据230。fp寄存器234指示存储有堆栈帧216(例如,最后的堆栈帧)的堆栈212的存储器位置的地址。堆栈指针(sp)寄存器236指示在堆栈帧216之后的堆栈212的存储器位置的地址。例如,sp寄存器236指示在堆栈帧大小不超过未分配堆栈232的大小的情况下,在堆栈212的存储器位置的地址处,下一堆栈帧可以被存储。帧限制238(例如,堆栈限制)指示堆栈212的最后的存储器地址(例如,分配给堆栈212的最低存储器地址)。在特定方面,帧限制238指示堆栈212的大小。
27.mmu结合执行堆栈212的动态分配来使用。例如,响应于确定未分配堆栈232的大小小于阈值、并且数据将被写入堆栈212,mmu分配一个或多个存储器页面作为第二堆栈。在特定方面,第二堆栈的一个或多个存储器页面与分配给堆栈212的存储器不连续。在特定方面,转变后备缓冲区(tlb)被配置为将第一虚拟地址映射到堆栈212第一存储器位置。mmu更新tlb以将第二虚拟地址映射到第二堆栈的第二存储器位置。在特定方面,第二虚拟地址是在地址序列中在第一虚拟地址之后的下一虚拟地址。
28.在第二堆栈管理250的示例中,第一堆栈252被包括在第一存储器中。第二堆栈254被包括在可以与第一存储器不同的第二存储器中。在特定示例中,第一堆栈252被包括在图1的存储器114的fw堆栈120中,并且第二堆栈254被包括在图1的tcm 104的fw堆栈122中。在另一示例中,第一堆栈252被包括在tcm 104的fw堆栈122中,并且第二堆栈254被包括在存储器114的fw堆栈124中。在第三示例中,第一堆栈252包括图1的sw堆栈126,并且第二堆栈254被包括在图1的共享堆栈128中。例如,第二堆栈254可以包括图1的堆栈130、堆栈132或堆栈134。
29.第一存储器的大小可以与第二存储器的大小相同。备选地,第一存储器可以具有
与第二存储器不同的大小(例如,更小或更大)。在特定方面,与第二存储器相比,第一存储器具有减少的延迟时间(例如,读取延迟时间、写入延迟时间、访问延迟时间或其组合)。在备选方面,第一存储器具有与第二存储器相同的延迟时间。在特定方面,第一存储器与第二存储器的不同之处在于第一存储器的大小、延迟时间或存储器区域中的至少一项不同于第二存储器的大小、延迟时间或存储器区域中的对应一项。在特定方面,第一堆栈252的第一大小等于第二堆栈254的第二大小。在备选方面,第一堆栈252的第一大小与第二堆栈254的第二大小不同(例如,更大或更小)。帧限制278指示第一堆栈252的最后的存储器地址(例如,分配给第一堆栈252的最低存储器地址)。在特定方面,帧限制278指示第一堆栈252的大小。帧限制280指示第二堆栈254的最后的存储器地址(例如,分配给第二堆栈254的最低存储器地址)。在特定方面,帧限制280指示第二堆栈254的大小。
30.在操作期间,与任务的第一函数调用相对应的堆栈帧256被添加到第一堆栈252。例如,第一任务(例如,进程)正在核心106处执行。响应于第一任务的初始化,堆栈管理器112指定第一堆栈252以供在核心106处执行的第一任务使用。堆栈管理器112更新用以指示第一堆栈252的帧限制278的帧限制寄存器292。作为第一函数调用的执行的一部分,堆栈管理器112将堆栈帧256添加到第一堆栈252。堆栈帧256包括lr值264、fp值266或这两者。lr值264指示第一函数调用的返回地址。堆栈管理器112更新fp寄存器234以具有指示堆栈帧256在此开始的第一堆栈252的存储器位置的fp值270。sp寄存器236具有指示堆栈帧256在此结束的第一堆栈252的存储器位置的sp值272。尽管第一堆栈管理210和第二堆栈管理250中的每个被描述为使用fp寄存器234和sp寄存器236,但是在其他实现中,mmu 110使用fp寄存器或sp寄存器中的至少一者来执行第一堆栈管理210,该fp寄存器或sp寄存器中的至少一者,不同于由堆栈管理器112用来执行第二堆栈管理250的fp寄存器234或sp寄存器236中的对应一者。
31.响应于在核心106处的第一任务的第二函数调用的执行,堆栈管理器112尝试将堆栈帧258添加到第一堆栈252。堆栈帧258包括lr值268、fp寄存器234的fp值270、一个或多个局部值202、一个或多个变元204或其组合。局部值202对应于第二函数调用的函数的局部变量值。变元204指示第二函数调用的变元值。lr值268指示第二函数调用的返回地址。fp值270指示存储有堆栈帧256的第一堆栈252的存储器位置。在尝试将堆栈帧258添加到第一堆栈252时,堆栈管理器112尝试将lr值268(例如,第二函数调用的返回地址)、fp寄存器234的fp值270或这两者存储(例如,推送)到第一堆栈252。堆栈管理器112更新用以指示sp寄存器236的sp值272(例如,指示堆栈帧258在此开始的第一堆栈252的存储器位置)的fp寄存器234。如果堆栈帧258没有超过第一堆栈252中的可用空间,则堆栈管理器112尝试更新用以指示堆栈帧258在此结束的第一堆栈252的存储器位置的sp寄存器236。将sp寄存器236更新为具有超过(例如,小于)引起生成异常282的帧限制278(例如,由帧限制寄存器292指示)的值。
32.响应于确定堆栈帧258的大小超过第一堆栈252的可用空间,堆栈管理器112指定第二堆栈254以供第一任务使用,如参考图3进一步描述的。在特定示例中,第一堆栈252的每个堆栈帧具有相同帧大小。在特定方面,堆栈管理器112基于帧大小和由sp寄存器236指示的地址(在尝试添加堆栈帧258之前)(例如,其总和)来确定值。响应于确定所确定的值超过由帧限制寄存器292指示的值(例如,帧限制278),堆栈管理器112确定堆栈帧258的大小
超过第一堆栈252的可用空间。当堆栈管理器112尝试在第一堆栈252处分配堆栈帧258时发生异常282,并且堆栈管理器112响应于异常282,确定堆栈帧258的大小超过第一堆栈252的可用空间。在特定示例中,当堆栈管理器112尝试为堆栈帧258的至少一部分分配超过帧限制278的存储器时,引起异常282。图2示出,将堆栈帧258添加到第一堆栈252将超过帧限制278。在特定方面,堆栈管理器112避免将堆栈帧258添加到第一堆栈252。
33.响应于异常282,堆栈管理器112执行图1的异常处理程序142。在特定示例中,异常处理程序142使得堆栈管理器112能够从第一存储器中的第一堆栈252转变到第二存储器中的第二堆栈254。例如,响应于确定堆栈帧258的大小超过第一堆栈252的可用空间,异常处理程序142指定第二堆栈254以供第一任务使用。在特定方面,第一堆栈252与第一层堆栈相关联,并且第二堆栈254与第二层堆栈相关联,如参考图3进一步描述的。响应于确定第一堆栈252与第一层堆栈相关联,异常处理程序142确定下一层堆栈(例如,第二层堆栈)中的堆栈是否可用。响应于确定与第二层堆栈相关联的第二堆栈254可用,异常处理程序142指定第二堆栈254以供第一任务使用。
34.异常处理程序142(例如,图1的元数据复制器146)将与第一堆栈252相关联的元数据262复制到第二堆栈254。例如,异常处理程序142存储在从第一堆栈252转变到第二堆栈254时的状态(例如,寄存器值),以使得当第二堆栈254不再由第一任务使用时,在从第二堆栈254反向转变时能够恢复该状态。异常处理程序142将帧限制寄存器292的值(例如,帧限制278)复制到第二堆栈254。异常处理程序142更新帧用以指示第二堆栈254的帧限制280的限制寄存器292。异常处理程序142将sp寄存器236的sp值272(例如,在堆栈帧256之后的第一堆栈252的存储器位置)复制到第二堆栈254。异常处理程序142为第二函数调用(例如,先前尝试添加到堆栈帧258中的第一堆栈252的函数调用)分配第二堆栈254上的堆栈帧260。异常处理程序142将lr值268(例如,第二函数调用的返回地址)添加到第二堆栈254。异常处理程序142将fp寄存器234的fp值270(例如,指示存储有堆栈帧256的第一堆栈252的存储器位置的值)复制到第二堆栈254。异常处理程序142将局部值202、变元204或其组合添加到第二堆栈254。异常处理程序142更新用以指示图1的返回处理程序144的返回处理程序地址274的lr寄存器290(例如,链路返回寄存器)。
35.在特定方面,元数据262包括以下项或它们的组合:帧限制278、sp值272、lr值268、fp值270、局部值202、变元204、返回处理程序地址274。在特定方面,堆栈帧260包括以下项或它们的组合:lr值268、fp值270、局部值202、变元204。异常处理程序142更新用以指示fp值288的fp寄存器234,fp值288与存储有lr值268的第二堆栈254的存储器位置相对应(例如,指示该位置)。异常处理程序142更新用以指示在堆栈帧260之后的第二堆栈254的存储器位置的sp寄存器236。
36.堆栈管理器112为第一任务的第三函数调用分配堆栈帧284。例如,堆栈管理器112将lr寄存器290的值(例如,返回处理程序地址274)复制到第二堆栈254。堆栈管理器112将fp寄存器234的值(例如,fp值288)复制到第二堆栈254。堆栈帧284包括与第三函数调用相关联的返回处理程序地址274、fp值288、函数调用数据(例如,一个或多个局部值、一个或多个参数或其组合)、或它们的组合。堆栈管理器112更新用以指示与第三函数调用的返回地址相对应的值的lr寄存器290。在从函数调用返回时,通常在由lr寄存器290指示的地址处继续执行。更新用以指示第三函数调用的返回地址的lr寄存器290,使得第一任务的执行能
够在来自第三函数调用的后续返回时从返回地址处继续。堆栈管理器112更新用以指示sp寄存器236的值(例如,存储有返回处理程序地址274的第二堆栈254的存储器位置)的fp寄存器234。堆栈管理器112更新sp寄存器236以指示在堆栈帧284之后的第二堆栈254的存储器位置。
37.在检测到第二堆栈254不再由第一任务使用时,元数据262使得堆栈管理器112能够从第二堆栈254转变到第一堆栈252。例如,堆栈管理器112使得能够在从第一堆栈252转变到第二堆栈254时恢复所存储的状态。响应于确定第一任务正在从与堆栈帧284相关联的第三函数调用返回,堆栈管理器112从第二堆栈254移除堆栈帧284。在特定方面,从第二堆栈254移除堆栈帧284包括:更新用以指示fp寄存器234的值(例如,存储有返回处理程序地址274的第二堆栈254的存储器位置)的sp寄存器236,更新用以指示从第二堆栈254中检索的fp值288(例如,存储有lr值268的第二堆栈254的存储器位置)的fp寄存器234,或这两者。响应于确定第一任务正在从与堆栈帧284相关联的第三函数调用返回,堆栈管理器112确定第一任务的执行将在由lr寄存器290指示的地址(例如,第三函数调用的返回地址)处继续并且更新用以指示从第二堆栈254中检索的返回处理程序地址274的lr寄存器290。在特定方面,更新用以指示返回处理程序地址274的lr寄存器290,使得能够在来自先前引起从第一堆栈252到第二堆栈254的转变的函数调用(例如,第二函数调用)的后续返回时发起返回处理程序144的执行。
38.响应于确定第一任务正在从与堆栈帧260相关联的第二函数调用返回,堆栈管理器112从第二堆栈254移除堆栈帧260。在特定方面,从第二堆栈254移除堆栈帧260包括更新sp寄存器236和fp寄存器234。例如,堆栈管理器112更新用以指示fp寄存器234的值(例如,fp值288、存储有lr值268的第二堆栈254的存储器位置)的sp寄存器236。作为另一示例,堆栈管理器112更新用以指示fp值270(例如,指示存储有堆栈帧256的第一堆栈252的存储器位置的值)的fp寄存器234。响应于确定第一任务正在从与堆栈帧260相关联的第二函数调用返回,堆栈管理器112确定执行将在由lr寄存器指示的地址(例如,返回处理程序地址274)处继续290并且更新用以指示从第二堆栈254中检索的lr值268(例如,第二函数调用的返回地址)的lr寄存器290。返回处理程序144的执行在由lr寄存器290指示的返回处理程序地址274处存储的指令处发起。在特定方面,更新用以指示lr值268的lr寄存器290,使得执行能够在返回处理程序144的执行之后在第二函数调用的返回地址处继续。
39.在特定方面,响应于确定第一任务正在从第二函数调用返回,返回处理器144将堆栈管理器112重新配置为从第二堆栈254转变到第一堆栈252。例如,返回处理程序144将第二堆栈254与第一任务解除分配。为了说明,将第二堆栈254解除分配包括将第二堆栈254指定为可用于下一分配。在特定方面,第二堆栈254在第二函数调用和第三函数调用的执行期间被移动到高速缓存108。在这方面,第二堆栈254被指定为可用于在第二堆栈254存储在高速缓存108中时的下一分配。与分配未存储在高速缓存108中的第二堆栈254(或另一堆栈)相比,在第二堆栈254存储在高速缓存108中时第二堆栈254的分配(例如,下一分配)提高了性能。
40.在特定方面,返回处理程序144更新用以指示从第二堆栈254中检索的sp值272(例如,存储有lr值268的第一堆栈252的存储器位置)的sp寄存器236。在特定方面,返回处理程序144更新帧限制寄存器292以指示从第二堆栈254中检索的帧限制278。第一任务的执行在
存储在由lr寄存器290指示的地址(例如,第二函数调用的返回地址)处的指令处继续。
41.因此,第二堆栈管理250使得能够独立于mmu 110从第一堆栈252转变到第二堆栈254。第二堆栈管理250使得能够将附加堆栈空间动态分配给超过第一堆栈中的对应分配的任务。当附加堆栈空间不再由指定任务使用时,可以动态重新分配附加堆栈空间。虽然图2描述了用于单个任务的第二堆栈管理250,但是在一些实现中,为处理器102的每个任务实现第二堆栈管理250。在一个这样的实现中,对于在处理器102(例如,核心106)处发起的每个新任务,在第一存储器中分配对应初始堆栈。对于超过其对应初始堆栈的每个任务,在第二存储器中动态分配对应辅堆栈。
42.参考图3,示出了堆栈管理的示例,该示例总体上指定为300。在特定方面,堆栈管理由图1的堆栈管理器112、异常处理程序142、返回处理程序144或其组合执行,如参考图2描述的。
43.示例300指示多层堆栈。示例300指示分别与第一堆栈层、第二堆栈层、第三堆栈层、第四堆栈层和第五个堆栈层相对应的第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340和第五共享堆栈350。在特定方面,图1的系统100中包括多层堆栈。应当理解,提供五个堆栈层作为说明性示例,在一些方面,系统100包括少于五个堆栈层或多于五个堆栈层。
44.在特定方面,图2的第一堆栈252被包括在特定堆栈层(例如,第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340或第五共享堆栈350)中,并且图2的第二堆栈254被包括在上述特定堆栈层之后(例如,上方)的紧邻的另一堆栈层(例如,第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340或第五共享堆栈350)中。
45.在图3中,与前一堆栈层相比,每个堆栈层包括更少和更大堆栈。例如,第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340和第五共享堆栈350分别包括第一大小(例如,536个字节(b))的第一多个堆栈、第二大小(例如,2.5kb)的第二多个堆栈、第三大小(例如,4kb)的第三多个堆栈、第四大小(例如,8kb)的第四多个堆栈、以及第五大小(例如,32kb)的第五多个堆栈。应当理解,提供包括更少和更大堆栈的每个堆栈层作为说明性示例。在备选实现中,特定层中包括的堆栈(例如,第一堆栈252)与另一层中包括的堆栈(例如,第二堆栈254)具有相同大小。在另一备选实现中,较低层中包括的堆栈比较高层中包括的堆栈具有更大大小,并且较高层包括比较低层中更多的堆栈。
46.堆栈管理器112为在处理器102(例如,核心106)处发起的每个新任务分配第一堆栈310中的对应第一堆栈。例如,堆栈管理器112将第一堆栈310的堆栈311(例如,第一堆栈252)分配给在核心106处发起的第一任务。堆栈管理器112还将第一堆栈310的堆栈313分配给在核心106处发起的第二任务。
47.堆栈管理器112维护与共享堆栈相对应的分配位掩码360。例如,分配位掩码360包括分别与第二共享堆栈320、第三共享堆栈330、第四共享堆栈340和第五共享堆栈350相关联的位掩码362、位掩码364、位掩码366和位掩码368。分配位掩码360的位掩码的特定位与对应共享堆栈中的特定堆栈相关联。例如,位掩码362的每一位对应于第二共享堆栈320中的特定堆栈。
48.响应于确定第一任务超过堆栈311,堆栈管理器112(例如,异常处理程序142)确定是否有任何第二共享堆栈320可用于分配。例如,响应于确定位掩码362的特定位具有第一
值(例如,0),堆栈管理器112确定与特定位相对应的(第二共享堆栈320的)堆栈321是可用的。堆栈管理器112(例如,异常处理程序142)分配堆栈321以供第一任务使用并且更新位掩码362的特定位以具有指示堆栈321不可用于分配的第二值(例如,1)。应当理解,使用分配位掩码360来跟踪所分配的堆栈是作为说明性示例而提供的。在一些实现中,可以使用其他数据结构(例如,列表、堆栈、表或集合)来跟踪堆栈分配。可以使用各种其他技术来分配堆栈。在特定实现中,使用后进先出策略(或先进先出策略)从共享堆栈320、330、340、350或其组合进行分配。
49.响应于确定第二任务超过堆栈313,堆栈管理器112(例如,异常处理程序142)将第二共享堆栈320的堆栈323分配给第二任务。如果任务超过其在第二共享堆栈320中的堆栈,则堆栈管理器112(例如,异常处理程序142)可以在更高层上分配附加堆栈。例如,响应于确定第一任务超过堆栈321,堆栈管理器112(例如,异常处理程序142)将第三共享堆栈330的堆栈331分配给第一任务。
50.示例300因此示出了共享堆栈到使用更多堆栈空间的任务的动态分配。动态分配使得大量堆栈空间动态地可用于每个任务,而无需为每个任务保留大量堆栈空间以适应最坏情况场景。例如,第一任务使用的堆栈空间大于第二任务使用的堆栈空间(例如,7kb)。假定最坏情况场景表示至少要为每个任务保留更大量(例如,7kb)的堆栈空间。示例300使得能够为每个任务保留更少量(例如,536b)的堆栈空间,其中附加堆栈空间动态地分配给超过较小堆栈空间量的任务。
51.参考图4,示出了堆栈管理的示例,该示例总体上指定为400。在特定方面,堆栈管理由图1的堆栈管理器112、异常处理程序142、返回处理程序144或其组合执行。
52.示例400指示在核心106处发起的任务402。任务402的第一指令(例如,在地址0x20处,其中“0x”指示十六进制编号方案)包括对第一函数(例如,foo)的第一函数调用404。任务402的第二条指令(例如,在地址0x40处)包括对第二函数(例如,foo1)的第二函数调用406。
53.在特定方面,函数调用包括分配请求、一个或多个附加指令、解除分配请求或其组合。如本文所述,分配请求(例如,allocframe)尝试在与任务402相关联的堆栈上分配堆栈帧。例如,堆栈管理器112通过将图2的lr寄存器290的lr值、图2的fp寄存器234的fp值或这两者存储(例如,推送)在堆栈上来执行分配请求。堆栈管理器112更新用以指示sp寄存器236的sp值的fp寄存器234。堆栈管理器112确定待被分配以存储函数调用的一个或多个局部值、一个或多个变元或其组合的局部数据大小。堆栈管理器112基于sp寄存器236的sp值和局部数据大小来确定第一值(例如,第一值=sp值

局部数据大小)。堆栈管理器112尝试更新sp寄存器236以指示第一值。如果第一值超过(例如,小于)由帧限制寄存器292指示的帧限制,则生成图2的异常282。
54.如本文所述,解除分配请求(例如,deallocframe)将与任务402相关联的堆栈上的堆栈帧解除分配。例如,堆栈管理器112通过恢复sp寄存器236、fp寄存器234、lr寄存器290或其组合的值来执行解除分配请求。为了说明,堆栈管理器112更新用以指示在前一堆栈末尾的存储器位置(例如,由fp寄存器234指示的值)的sp寄存器236。堆栈管理器112更新用以指示从堆栈中检索的fp值的fp寄存器234。堆栈管理器112更新用以指示从堆栈中检索的lr值的lr寄存器290。
55.第一函数调用404包括对具有第一大小(例如,2个字节)的堆栈帧的分配请求(例如,在地址0x300处)。在特定方面,响应于确定第一堆栈252具有大于或等于第一大小的可用堆栈空间(例如,8个字节),堆栈管理器112将第一堆栈252的第一堆栈帧(例如,堆栈帧256)分配给任务402。在特定方面,堆栈管理器112通过将图2的lr值264(例如,0x30,第一函数调用404的返回地址)、图2的fp值266或这两者存储(例如,推送)到第一堆栈252来执行分配请求。堆栈管理器112更新用以指示sp寄存器236的sp值的fp寄存器234。堆栈管理器112确定待被分配以存储第一函数调用404的一个或多个局部值、一个或多个变元或其组合的局部数据大小。堆栈管理器112基于sp寄存器236的sp值和局部数据大小来确定第一值(例如,第一值=sp值

局部数据大小)。堆栈管理器112更新用以指示第一值sp寄存器236。因为第一值在由帧限制寄存器292指示的帧限制278之内(例如,大于或等于帧限制278),所以不生成异常408。第一堆栈帧(例如,堆栈帧256)与第一函数调用404相关联。
56.响应于检测到解除分配请求(例如,在地址0x320处),堆栈管理器112检测到任务402正在从第一函数调用404返回,并且从第一堆栈252移除第一堆栈帧(例如,堆栈帧256)。为了说明,堆栈管理器112通过恢复sp寄存器236、fp寄存器234、lr寄存器290或其组合的值来执行解除分配请求。堆栈管理器112更新用以指示fp寄存器234的值的sp寄存器236。堆栈管理器112更新用以指示从第一堆栈252中检索的fp值266的fp寄存器234。堆栈管理器112更新用以指示从第一堆栈252中检索的lr值264的lr寄存器290。例如,图2的lr值264指示第一函数调用404的返回地址(例如,0x30)并且任务402的执行在由lr值264指示的返回地址处继续。
57.第二函数调用406包括对具有第二大小(例如,20个字节)的堆栈帧的分配请求(例如,在地址0x400处)。响应于分配请求,生成(例如,由堆栈管理器112)异常408。在特定方面,响应于确定第二大小(例如,20个字节)超过第一堆栈252的可用堆栈空间(例如,8个字节),堆栈管理器112(或存储器处理程序)生成异常408。在特定方面,堆栈管理器112通过将图2的lr值268(例如,0x50,第二函数调用406的返回地址)、fp寄存器234的fp值270或这两者存储(例如,推送)到第一堆栈252来执行分配请求。堆栈管理器112更新用以指示sp寄存器236的sp值的fp寄存器234272。堆栈管理器112确定待被分配以存储第二函数调用406的局部值202、图2的变元204或其组合的局部数据大小。堆栈管理器112基于sp寄存器236的sp值和局部数据大小来确定第一值(例如,第一值=sp值

局部数据大小)。堆栈管理器112更新用以指示第一值的sp寄存器236。因为第一值超过(例如,小于)由帧限制寄存器292指示的帧限制278,所以生成异常408。在特定方面,响应于异常408,恢复对第一堆栈252、fp寄存器234或其组合的更新。例如,堆栈管理器112更新用以指示fp值270的fp寄存器234。作为另一示例,堆栈管理器112从第一堆栈252移除lr值268、fp值270或这两者。在特定方面,响应于异常408,异常处理程序142将第二堆栈254上的堆栈帧260分配给任务402。
58.异常处理程序142将帧限制278添加到第二堆栈254(例如,第二堆栈254的顶部)。异常处理程序142更新用以指示第二堆栈254的帧限制280的帧限制寄存器292。异常处理程序142将sp寄存器236的sp值272添加到第二堆栈254。异常处理程序142将lr值268添加到第二堆栈254。lr值268指示第二函数调用406的返回地址(例如,0x50)。异常处理程序142将fp寄存器234的fp值270添加到第二堆栈254。异常处理程序142更新用以指示存储有lr值268的第二堆栈254的存储器位置的fp寄存器234。异常处理程序142将局部值202、变元204或其
组合添加到第二堆栈254。异常处理程序142更新用以指示紧邻分配给第二堆栈254中的堆栈帧260的存储器的第二堆栈254的存储器位置的sp寄存器236。例如,sp寄存器236的值指示接下来可用于分配或位于第二堆栈254的末尾(例如,如果第二堆栈254已满)的第二堆栈254的存储器位置。在特定实现中,第二堆栈254从较高存储器地址增长到较低存储器地址。在该实现中,异常处理程序142基于指示堆栈帧260的开始(例如,顶部)的第一地址和堆栈帧260的特定大小来确定第一值(例如,第一值=第一地址

1堆栈帧的大小),并且更新用以指示第一值的sp寄存器236。异常处理程序142更新用以指示返回处理程序地址274的lr寄存器290,如参考图2描述的。
59.响应于检测到解除分配请求(例如,在地址0x420处),堆栈管理器112检测到任务402正在从第二函数调用406返回。堆栈管理器112从第二堆栈254移除第二堆栈帧(例如,堆栈帧260)。为了说明,堆栈管理器112通过恢复sp寄存器236、fp寄存器234、lr寄存器290或其组合的值来执行解除分配请求。堆栈管理器112更新用以指示fp寄存器234的值的sp寄存器236(例如,存储有lr值268的第二堆栈254的存储器位置)。堆栈管理器112更新用以指示从第二堆栈254中检索的fp值270的fp寄存器234。堆栈管理器112确定存储在由lr寄存器290指示的返回处理程序地址274处的指令(例如,返回处理程序144的指令)将被执行,并且更新用以指示从第二堆栈254中检索的lr值268的lr寄存器290。返回处理程序144执行返回操作410,返回操作410使得堆栈管理器112能够从第二堆栈254转变到第一堆栈252。例如,返回处理程序144更新用以指示从第二堆栈254中检索的sp值272的sp寄存器236,更新用以指示从第二堆栈254中检索的帧限制278的帧限制寄存器292,或这两者。返回处理程序144在由lr寄存器290指示的地址(例如,第二函数调用406的返回地址)处继续任务402的执行。
60.示例400因此示出了当由任务402请求的帧大小超过第一堆栈252的可用空间时为任务402动态分配第二堆栈254。示例400还示出了当第二堆栈254不再由任务402使用时,从第二堆栈254转变到第一堆栈252。
61.参考图5,示出了堆栈管理的示例,该示例总体上指定为500。在特定方面,堆栈管理由图1的堆栈管理器112、异常处理程序142、返回处理程序144或其组合执行。
62.在图2的示例200中,响应于确定函数调用的堆栈帧的大小超过第一堆栈252中的可用空间,堆栈管理器112(例如,异常处理程序142)在第二堆栈254中为函数调用分配堆栈帧。在示例500中,响应于确定用于第二函数调用的所请求的堆栈帧的大小超过第一堆栈252中的可用空间,除了将用于第二函数调用的堆栈帧分配给第二堆栈254,异常处理程序142还将与前一函数调用(例如,第一函数调用)相对应的堆栈帧分配给第二堆栈254,使得第二函数调用可以容易地访问第一函数调用的变元。
63.第一堆栈252包括索引508。在特定方面,索引508的值指示包括第一堆栈252的第一堆栈层(例如,图3的第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340或第五共享堆栈350)。第一堆栈252包括边限506(例如,保留空间)。
64.第二堆栈254包括索引558。在特定方面,索引558的值指示包括第二堆栈254的第二堆栈层(例如,图3的第一堆栈310、第二共享堆栈320、第三共享堆栈330、第四共享堆栈340或第五共享堆栈350)。第二堆栈254包括边限556(例如,保留空间)。
65.堆栈帧258包括lr值268、fp值270、局部值202、变元204或其组合,如参考图2描述的。在特定方面,作为第一函数调用的执行的一部分,堆栈管理器112将堆栈帧258添加到第
一堆栈252。fp寄存器234指示存储有lr值268的第一堆栈252的存储器位置的地址。sp寄存器236指示sp值272,例如紧邻分配给堆栈帧258的存储器的第一堆栈252(例如,接下来可用于分配)的存储器位置的地址。
66.响应于异常指示用于第二函数调用的所请求的堆栈帧大小已经超过第一堆栈252,第一堆栈252的索引508指示第一层,第二堆栈254的索引558指示第二层,并且第二层紧接着在第一层上方,异常处理程序142选择第二堆栈254。异常处理程序142将由帧限制寄存器292指示的值(例如,帧限制278)复制到第二堆栈254。异常处理程序142将sp寄存器236的sp值272复制到第二堆栈254。异常处理程序142将第二堆栈254的堆栈帧560分配给第一函数调用。异常处理程序142将第一堆栈252的堆栈帧258的值复制到第二堆栈254的堆栈帧560(包括复制lr值268、复制fp值270、复制局部值202、复制变元204或其组合)。
67.异常处理程序142更新用以指示fp值288的fp寄存器234,例如存储有堆栈帧560(例如,lr值268)的第二堆栈254的存储器地址。异常处理程序142更新用以指示紧邻堆栈帧560的第二堆栈254的存储器地址的sp寄存器236。异常处理程序142更新用以指示第二堆栈254的帧限制280的帧限制寄存器292。异常处理程序142更新用以指示返回处理程序地址274的lr寄存器290。
68.在特定方面,异常处理程序142将图2的堆栈帧284添加到第二堆栈254。例如,异常处理程序142将由lr寄存器290指示的返回处理程序地址274复制到第二堆栈254。异常处理程序142将由fp寄存器234指示的fp值288复制到第二堆栈254。异常处理程序142更新用以指示第二函数调用的返回地址的lr寄存器290。异常处理程序142更新用以指示由sp寄存器236指示的值(例如,存储有返回处理程序地址274的第二堆栈254的存储器位置)的fp寄存器234。异常处理程序142更新用以指示紧邻分配给堆栈帧284的存储器的第二堆栈254的存储器位置的fp寄存器234。堆栈帧284与第二函数调用相关联。
69.在一些实现中,通过将堆栈帧258(例如,在堆栈帧560的部分中)复制到第二堆栈254,变元204由添加到第二堆栈254的后续函数(例如,第二函数调用)经由第二堆栈254中的堆栈指针位置(例如,通过从sp寄存器236倒数)容易地可访问以提供简化的变元传递。
70.响应于确定第一任务正在从第二函数调用返回,堆栈管理器112从第二堆栈254移除堆栈帧284,确定第一任务的执行将从由lr寄存器290指示的地址处的指令继续,并且更新用以指示从第二堆栈254中检索的返回处理程序地址274的lr寄存器290。堆栈管理器112更新用以指示由fp寄存器234指示的值(例如,存储有返回处理程序地址274的第二堆栈254的存储器位置)的sp寄存器236。堆栈管理器112更新用以指示从第二堆栈254中检索的fp值288的fp寄存器234。
71.响应于确定第一任务正在从第一函数调用返回,堆栈管理器112在由lr寄存器290指示的返回处理程序地址274处发起返回处理程序144的执行。例如,返回处理程序144从第二堆栈254移除堆栈帧560,从第一堆栈252移除堆栈帧258,或这两者。为了说明,返回处理程序144更新用以指示sp值272的sp寄存器236,更新用以指示fp值270的fp寄存器234,更新用以指示lr值264的lr寄存器290,更新用以指示帧限制278的帧限制寄存器292,或它们的组合。返回处理程序144在由lr寄存器290的lr值264指示的第一函数调用的返回地址处继续第一任务的执行。
72.因此,示例200和500示出了各种元数据可以存储在第二堆栈254上以将堆栈管理
器112(例如,返回处理程序144)配置为在检测到第二堆栈254不再由第一任务使用时,从第二堆栈254转变到第一堆栈252。
73.图6示出了堆栈管理方法600。在特定方面,方法600的一个或多个操作由图1的异常处理程序142、返回处理程序144、堆栈管理器112或其组合执行。
74.方法600包括在602处由处理器的堆栈管理器检测待被分配的帧的大小超过第一堆栈的可用空间。例如,图1的异常处理程序142检测待被分配的帧的大小超过第一堆栈252的可用空间,如参考图2描述的。例如,响应于图2的异常282,异常处理程序142检测帧的大小超过可用空间。第一堆栈252由在处理器102(例如,核心106)处执行的第一任务(例如,图4的任务402)使用。
75.方法600还包括在604处指定供特定任务使用的第二堆栈。例如,图1的异常处理程序142指定供第一任务(例如,图4的任务402)使用的第二堆栈254,如参考图2

图5描述的。
76.方法600还包括在606处将与第一堆栈相关联的元数据复制到第二堆栈。例如,图1的异常处理程序142将与第一堆栈252相关联的元数据262复制到第二堆栈254,如参考图2和图4

图5描述的。元数据262使得堆栈管理器112能够在检测到第二堆栈254不再由第一任务(例如,图4的任务402)使用时,从第二堆栈254转变到第一堆栈252。
77.方法600还包括在608处在第二堆栈中分配帧。例如,图1的异常处理程序142在第二堆栈254中分配堆栈帧284,如参考图2描述的。
78.因此,方法600使得能够独立于mmu 110从第一堆栈252转变到第二堆栈254。方法600使得能够将附加堆栈空间动态分配给超过第一堆栈中的对应分配的任务。
79.参考图7,描绘了设备(例如,无线通信设备)的特定说明性示例的框图,该设备总体上指定为700。在各种示例中,设备700包括比图7中所示的更少或更多的组件。在说明性示例中,设备700对应于图1的系统100。在说明性示例中,设备700执行参考图1

图6描述的一个或多个操作。
80.在特定方面,设备700包括处理器102。处理器102包括堆栈管理器112。处理器102经由无线控制器740耦合到天线742。设备700还包括存储器732。在特定实现中,存储器732包括图1的存储器114。设备700包括耦合到显示控制器726的显示器728。一个或多个扬声器736、一个或多个麦克风738或其组合可以耦合到编码器/解码器(codec)734。
81.存储器732可以包括可由处理器102、codec 734、堆栈管理器112、设备700的另一处理单元或其组合执行以执行本文中公开的方法和过程(诸如参考图1

图6描述的一个或多个操作)的指令760。参考图1

图7描述的系统和设备的一个或多个组件可以经由专用硬件(例如,电路系统)、通过处理器执行指令(例如,指令760)以执行一个或多个任务、或其组合来实现。作为示例,存储器732、或者处理器102、堆栈管理器112和/或codec 734的一个或多个组件包括存储器设备,诸如随机存取存储器(ram)、磁阻随机存取存储器(mram)、自旋扭矩转移mram(stt

mram)、闪存、只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、寄存器、硬盘、可移动磁盘或光盘只读存储器(cd

rom)。存储器设备包括指令(例如,指令760),该指令在由计算机(例如,codec 734中的处理器、堆栈管理器112和/或处理器102)执行时引起计算机执行参考图1

图6描述的一个或多个操作。作为示例,存储器732、或者处理器102、堆栈管理器112、codec 734的一个或多个组件是一种指令(例如,指令760)的计算机可读存储设备,该指令
在由计算机(例如,codec 734中的处理器、堆栈管理器112和/或处理器102)执行时引起计算机执行参考图1

图6描述的一个或多个操作。
82.在特定方面,设备700被包括在系统级封装或片上系统设备722(诸如移动台调制解调器(msm))中。在特定方面,处理器102、显示控制器726、存储器732、codec 734、堆栈管理器112和无线控制器740被包括在系统级封装或片上系统设备722中。在特定方面,诸如触摸屏和/或键盘等输入设备730、和电源744耦合到片上系统设备722。此外,如图7所示,在特定方面,显示器728、输入设备730、扬声器736、麦克风738、天线742和电源744在片上系统设备722外部。然而,显示器728、输入设备730、扬声器736、麦克风738、天线742和电源744中的每个可以耦合到片上系统设备722的组件,诸如接口或控制器。在说明性示例中,设备700对应于通信设备、计算机、显示设备、电视、游戏控制台、音乐播放器、收音机、视频播放器、娱乐单元、个人媒体播放器、数字视频播放器、相机、导航设备、移动通信设备、智能电话、蜂窝电话、笔记本电脑、平板电脑、个人数字助理、显示设备、光盘播放器、调谐器、解码器系统、编码器系统或其任何组合。
83.在说明性方面,堆栈管理器112可操作以根据所描述的技术执行堆栈管理。例如,堆栈管理器112检测到待被分配的帧的大小超过图2的第一堆栈252的可用空间。第一堆栈252由在处理器102处执行的第一任务使用。堆栈管理器112指定图2的第二堆栈254以供第一任务使用。堆栈管理器112将与第一堆栈252相关联的元数据复制到第二堆栈254。元数据使得堆栈管理器112能够在检测到第二堆栈254不再由第一任务使用时,从第二堆栈254转变到第一堆栈252。堆栈管理器112在第二堆栈254中分配帧。
84.结合所描述的方面,公开了一种装置,该装置包括用于检测待被分配的帧的大小超过第一堆栈的可用空间的部件。例如,用于检测的部件包括图1的异常处理程序142、堆栈管理器112、被配置为检测待被分配的帧的大小超过第一堆栈的可用空间并且接收第一音频输入的一个或多个设备(例如,执行存储在计算机可读存储设备处的指令的处理器)、或其任何组合。第一堆栈252由在处理器102(例如,核心106)处执行的特定任务使用。
85.该装置还包括用于指定供特定任务使用的第二堆栈的部件。例如,用于指定的部件包括图1的异常处理程序142、堆栈管理器112、被配置为指定供特定任务使用的第二堆栈的一个或多个设备(例如,执行存储在计算机可读存储设备中的指令的处理器)、或其任何组合。
86.该装置还包括用于将与第一堆栈相关联的元数据复制到第二堆栈的部件。例如,用于复制的部件包括图1的异常处理程序142、堆栈管理器112、被配置为将与第一堆栈相关联的元数据复制到第二堆栈的一个或多个设备(例如,执行存储在计算机可读存储设备中的指令的处理器)、或其任何组合。元数据262使得处理器102的堆栈管理器112能够在检测到第二堆栈254不再由特定任务使用时,从第二堆栈254转变到第一堆栈252。
87.该装置还包括用于在第二堆栈中分配帧的部件。例如,用于分配的部件包括图1的异常处理程序142、堆栈管理器112、被配置为在第二堆栈中分配帧的一个或多个设备(例如,执行存储在计算机可读存储设备中的指令的处理器)、或其任何组合。
88.在特定方面,该装置还包括用于响应于检测到特定任务正在从与帧相关联的函数返回而从第二堆栈转变到第一堆栈的部件。例如,用于转变的部件包括图1的返回处理程序144、堆栈管理器112、被配置为从第二堆栈转变到第一堆栈的一个或多个设备(例如,执行
存储在计算机可读存储设备中的指令的处理器)、或其任何组合。
89.如本文中使用的,“耦合”可以包括通信耦合、电耦合、磁耦合、物理耦合、光耦合及其组合。两个设备(或组件)可以直接或者经由一个或多个其他设备、组件、电线、总线、网络(例如,有线网络、无线网络或其组合)等间接耦合(例如,通信耦合、电耦合、或物理耦合)。电耦合的两个设备(或组件)可以被包括在同一设备或不同设备中,并且作为非限制性示例,可以经由电子器件、一个或多个连接器或电感耦合进行连接。在一些实现中,通信耦合(诸如电通信)的两个设备(或组件)可以直接或间接地(诸如经由一个或多个电线、总线、网络等)发送和接收电信号(数字信号或模拟信号)。
90.如本文中使用的,“生成”、“计算”、“使用”、“选择”、“访问”和“确定”可以互换使用。例如,“生成”、“计算”或“确定”值、特性、参数或信号可以是指主动地生成、计算或确定值、特性、参数或信号,或者可以是指使用、选择或访问诸如由组件或设备已经生成的值、特性、参数或信号。
91.本领域技术人员将进一步理解,结合本文中公开的各方面而描述的各种说明性逻辑块、配置、部件、电路和算法步骤可以实现为电子硬件、计算机软件或这两者的组合。各种说明性组件、块、配置、部件、电路和步骤已经在上面大体上根据它们的功能进行了描述。这种功能实现为硬件还是软件取决于特定应用和对整个系统施加的设计约束。技术人员可以针对每个特定应用以不同方式实现所描述的功能,但是这样的实现决定不应当被解释为导致偏离本公开的范围。
92.结合本文中公开的各方面而描述的方法或算法的步骤可以直接体现在硬件中、由处理器执行的软件部件中、或这两者的组合中。软件部件可以驻留在随机存取存储器(ram)、闪存、只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器中(eeprom)、寄存器、硬盘、可移动磁盘、光盘只读存储器(cd

rom)或本领域已知的任何其他形式的存储介质中。示例性非暂态(例如,有形)存储介质耦合到处理器,使得处理器可以从存储介质读取信息和向存储介质写入信息。备选地,存储介质可以与处理器成一体。处理器和存储介质可以驻留在专用集成电路(asic)中。asic可以驻留在计算设备或用户终端中。备选地,处理器和存储介质可以作为分立组件驻留在计算设备或用户终端中。
93.提供所公开的方面的先前描述以使得本领域技术人员能够制造或使用所公开的方面。对这些方面的各种修改对于本领域技术人员来说将是很清楚的,并且在不脱离本公开的范围的情况下,本文中定义的原理可以应用于其他方面。因此,本公开不旨在限于本文所示的方面,而是符合与由以下权利要求限定的原理和新颖特征一致的可能的最宽范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1