首页> 中国专利> 动态模块的外部分页和交换

动态模块的外部分页和交换

摘要

各种实施例包括用于计算设备上的动态模块实施外部分页和交换的方法和设备。实施例可以包括从用于静态映像的虚拟地址空间向计算设备的固件的静态映像的基础映像和动态模块分配静态虚拟地址,将静态映像分解为基础映像和动态模块,在启动时间期间将基础映像从存储存储器的第一分区加载到执行存储器中,在启动时间期间在执行存储器中保留交换池,并且在运行时间期间将动态模块的动态模块从存储存储器的第二分区加载到交换池中。

著录项

  • 公开/公告号CN112654965A

    专利类型发明专利

  • 公开/公告日2021-04-13

    原文格式PDF

  • 申请/专利权人 高通股份有限公司;

    申请/专利号CN201980058489.9

  • 申请日2019-09-09

  • 分类号G06F9/4401(20180101);G06F9/445(20180101);G06F9/50(20060101);G06F12/02(20060101);G06F12/109(20160101);

  • 代理机构11105 北京市柳沈律师事务所;

  • 代理人李文娟

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 10:35:20

说明书

根据35U.S.C.§119的优先权主张

本专利申请要求于2018年9月13日提交的题为“EXTERNAL PAGING AND SWAPPINGFOR DYNAMIC MODULES”的非临时申请No.16/130,069的优先权,该临时申请已转让给其受让人,并且在此通过引用明确地并入本文。

背景技术

一些计算设备的存储器资源有限,特别是诸如物联网(IoT)设备之类的专用计算设备。然而,此类计算设备可能需要在广泛的用例上进行操作,它们可能涉及执行不同的代码和使用不同的数据,这两者都必须存储在存储器中。计算设备的简单实现是加载包含所有用例的代码和数据的单个映像(image),并使用该单个映像执行操作。这种单个映像实现有助于计算设备的测试、构建和变更跟踪。

发明内容

各个方面包括用于计算设备上的动态模块的外部分页和交换的装置和方法。各个方面可以包括动态模块从用于静态映像的虚拟地址空间向计算设备的固件的静态映像的基础映像和动态模块分配静态虚拟地址,将静态映像分解为基础映像和动态模块,在启动时间期间将基础映像从存储存储器的第一分区加载到执行存储器中,在启动时间期间在执行存储器中保留交换池,并且在运行时间期间将动态模块的第一动态模块从存储存储器的第二分区加载到交换池中。

在一些方面,第一动态模块可以包括代码模块和数据模块,并且将第一动态模块从存储存储器的第二分区加载到交换池可以包括将代码模块从存储存储器的第二分区加载到交换池。一些方面可以进一步包括将代码模块的静态虚拟地址映射到存储存储器的第二分区的物理块地址,将数据模块的静态虚拟地址映射到存储存储器的第三分区的物理块地址,并将代码模块的静态虚拟地址映射到执行存储器的交换池的物理地址。

在一些方面,在启动时间期间在执行存储器中保留交换池可以包括保留执行存储器的部分,其大小被设置为存储最大的动态模块。

在一些方面,动态模块可以包括多个代码模块。在一些方面,在启动时间期间在执行存储器中保留交换池可以包括保留执行存储器的部分,其大小被设置为存储多个代码模块中的最大的压缩版本。

一些方面可以进一步包括从存储存储器的第二分区接收访问动态模块的第二动态模块的请求,确定第一动态模块是否具有比第二动态模块更高的优先级,并且响应于确定第一动态模块不具有比第二动态模块更高的优先级,从交换池逐出第一动态模块。

在一些方面,第一动态模块可以包括代码模块和数据模块。一些方面可以进一步包括确定第一动态模块在执行第一动态模块时产生的数据是否需要用于第一动态模块的后续执行,并且响应于确定第一动态模块在执行第一动态模块时产生的数据需要用于第一动态模块的后续执行,将数据存储到存储存储器的第三分区中的数据模块。

一些方面可以进一步包括确定第一动态模块的用户,增加确定为要使用第一动态模块的每个用户的参考计数,并且减少确定为不再使用第一动态模块的每个用户的参考计数。

在一些方面,第一动态模块可以处于压缩格式。一些方面可以进一步包括通过第一动态模块的静态虚拟地址和第一动态模块处于压缩格式的指示符的关联来标识第一动态模块处于压缩格式,其中在运行时间期间从存储存储器的第二分区将第一动态模块加载到交换池中可以包括解压第一动态模块以将第一动态模块加载到交换池中。

各个方面包括具有执行存储器、存储存储器和配置为执行以上概述的任何方法的操作的处理器的计算设备。各个方面包括具有用于执行以上概述的任何方法的功能的组件的计算设备。各个方面包括处理器可读存储介质,在其上存储有处理器可执行指令,其配置为使处理器执行以上概述的任何方法的操作。

附图说明

并入本文并构成本说明书一部分的附图示出了各种实施例的示例实施例,并且与上文给出的一般描述和下文给出的详细描述一起用于解释权利要求的特征。

图1是示出了适合于实现各种实施例的示例计算设备的部件框图。

图2是示出了适合于实现各种实施例的示例性多核处理器的部件框图。

图3是示出了根据一些实施例的用于动态模块的外部分页和交换的方法的过程流程图。

图4是示出了根据一些实施例的计算设备的固件的静态映像的框图。

图5是示出了根据一些实施例的适合于为动态模块实现外部分页和交换的存储器管理系统的部件框图。

图6是示出了根据一些实施例的来自为动态模块实现外部分页和交换的代码模块的状态的状态图。

图7是示出了根据一些实施例的适合于为动态模块实现外部分页和交换的存储器管理系统的部件框图。

图8是示出了根据一些实施例的用于配置计算设备的固件以用于动态模块的外部分页和交换的方法的过程流程图。

图9是示出了根据一些实施例的用于初始化动态模块的外部分页和交换的方法的过程流程图。

图10是示出了根据一些实施例的用于动态模块的外部分页和交换的方法的过程流程图。

图11是示出了根据一些实施例的用于动态模块的外部分页和交换的参考计数跟踪的方法的过程流程图。

图12是示出了适合用于各种实施例的示例移动计算设备的部件框图。

图13是示出了适合用于各种实施例的示例移动计算设备的部件框图。

图14是示出了适合用于各种实施例的示例服务器的部件框图。

具体实施方式

将参考附图详细描述各种实施例。在所有附图中,将尽可能使用相同的附图标记表示相同或相似的部分。对特定示例和实现方式的引用是出于说明性目的,并且无意于限制权利要求的范围。

各种实施例包括用于使用外部分页和交换的静态链接和动态加载的代码模块的存储器管理的方法以及实现这种方法的计算设备。一些实施例可以包括将计算设备的固件的静态映像分解为用于不同硬件使用情况的基线映像和代码模块。在一些实施例中,可以在静态映像的虚拟地址空间内为代码模块静态分配虚拟地址。可以动态地在可执行存储器(例如,随机存取存储器(RAM))的交换池中交换进出代码模块。加载到交换池的代码模块的静态虚拟地址可以映射到交换池的物理地址。在各种实施例中,加载到交换池的代码模块的管理可以基于代码模块的执行需求。在各种替代的或附加实施例中,可以基于代码模块的优先级来管理加载到交换池的代码模块。可以压缩代码模块以进行存储(即以压缩格式存储),并且可以在将代码模块数据存储到可执行存储器用于执行之前或作为其部分来对代码模块数据进行解压缩。在各种实施例中,代码模块的相关数据可以被压缩以进行存储(即,以压缩格式存储),并且相关数据可以在存储到可执行存储器用于执行之前或作为其部分而被解压缩。

使用本文所述的静态链接和动态加载的代码模块的外部分页和交换的存储器管理的各种实施例提供了优于现有存储器技术的技术优势。根据各种实施例,使用静态链接和动态加载的代码模块的外部分页和交换的存储器管理减少了用于执行各种代码模块的存储器资源需求。存储器资源需求的减少允许在有限的物理空间和/或处理能力的计算设备中更有效地使用存储器资源和使用较小的存储器设备,从而降低了计算设备的成本。

本文使用的术语“计算设备”是指物联网(IoT)设备、智能电器、蜂窝电话、智能手机、个人或移动多媒体播放器、笔记本电脑、平板电脑、可转换笔记本电脑/平板电脑(2合1电脑)、智能本、超极本、上网本、掌上电脑、无线电子邮件接收器、支持多媒体互联网的蜂窝电话、移动游戏机、无线游戏控制器以及包括存储器和可编程处理器的类似个人电子设备中的任何一种或全部。术语“计算设备”可以进一步指固定计算设备,包括个人计算机、台式计算机、多合一计算机、工作站、超级计算机、大型计算机、嵌入式计算机、服务器、家庭影院计算机和游戏机。

本文使用术语“固件”来指代存储在非易失性存储器中的软件指令,其提供对计算设备的低级控制,包括提供用于计算设备的操作环境或操作系统。

实现各种实施例的计算设备可以存储用于并非一次使用的硬件功能的各种固件。计算设备可以为该计算设备生成所有固件的单个静态映像,并为用于执行该固件的任何数据生成空间。在一些实施例中,可以将静态虚拟地址分配给各种固件模块或元件,包括分配给固件内的功能,以及分配给静态映像的虚拟地址空间内的数据的空间。静态映像可以被分解为基线映像,包括用于操作计算设备的基础固件、代码模块(包括用于不同硬件使用情况的固件)以及用于空间的数据模块(用于执行关联的代码模块的数据)。静态映像的要分解为基线映像的部分、代码模块和数据模块的名称可以被预先确定并提供给计算设备。生成单个静态映像、分配静态虚拟地址以及分解静态映像可以由编译器和/或链接器在计算设备的编译时间和/或链接时间期间执行。

在各种实施例中,基线映像、代码模块和数据模块可以被存储到诸如NAND闪存之类的非易失性存储存储器中。可以将代码模块存储为用于各种功能的每个代码模块的分页,从而可以加载代码模块的页面以执行特定功能,而不必加载整个代码模块。可以将代码模块存储到存储存储器中的分页分区,并且可以将数据模块存储到存储存储器中的交换分区。在执行关联的代码模块之前,数据模块最初可能不包含任何数据。

在启动时间时,计算设备可以将基线映像从存储存储器加载到执行存储器。实现各种实施例的计算设备还可以将执行存储器的部分保留为交换池,以用于将代码模块从存储存储器动态地加载到执行存储器。交换池的大小可能适合最大的代码模块,因此交换池足够大,可以存储任何代码模块,而无需使用过多的执行存储器资源。交换池的大小可以考虑执行最大代码模块所需的数据模块。

在各种实施例中,代码模块可以动态地加载到交换池,以在运行时间期间执行代码模块。确定加载哪个代码模块以及何时加载该代码模块可以是预测性的(例如,预加载)。确定加载哪个代码模块以及何时加载该代码模块可以是响应性的(例如,按需)。代码模块的预加载可以基于用例分析,其将计算设备的状态与通过执行代码模块实现的计算设备的可能功能相关联。将计算设备的状态与代码模块相关联的查找表可以用于分析。代码模块的按需加载可以响应对通过执行代码模块实现的功能的执行请求。与代码模块关联的数据模块也可以加载到交换池中。当将代码模块加载到交换池时,存储器管理器可以将代码模块的静态虚拟地址映射到可以在其中加载代码模块的交换池的物理地址。

在各种实施例中,代码模块的特定分页可以动态地加载到交换池,以在运行时间期间执行代码模块。确定要加载代码模块的哪些分页以及何时加载分页可以是预测性的(例如,预加载)。确定要加载代码模块的哪些分页以及何时加载分页可以是响应性的(例如,按需)。代码模块的特定分页的预加载可以基于用例分析,其将计算设备的状态与通过执行代码模块的特定分页实现的计算设备的可能功能相关联。将计算设备的状态与代码模块的特定分页相关联的查找表可以用于分析。代码模块的特定分页的按需加载可以响应对通过执行代码模块实现的功能的执行请求。与代码模块的分页关联的数据模块也可以加载到交换池中。当代码模块的特定分页加载到交换池时,存储器管理器可以将代码模块特定分页的静态虚拟地址映射到可以在其中加载代码模块的特定页面的交换池的物理地址。

为了简化说明和清楚起见,本文中以代码模块的形式描述了各种实施例,但是各种实施例并不排除代码模块的分页,并且不限制描述或权利要求的范围。

交换池的管理可以使用各种存储器管理策略(例如,FIFO、LIFO等)来实现,其可以考虑代码模块的优先级。存储器管理策略可以考虑参考计数以指示交换池中代码模块的使用。可以根据存储器管理策略从交换池中逐出代码模块。逐出的代码模块的执行可能会中断,并可能稍后恢复执行。逐出的代码模块的执行可能会中断,并可能稍后重新开始执行。逐出的代码模块可能期望执行多次。逐出的代码模块的稍后的执行将需要与逐出的代码模块的先前执行有关的数据。与逐出的代码模块相关的数据可以存储到存储设备中的关联的数据模块。可以为每个代码模块分配一个关联的状态。分配的关联的状态可能是开启的。分配的关联的状态可能是关闭的。分配的关联的状态可能是挂起的。开启状态可能指示代码模块已加载到交换池。开启状态可以进一步指示代码模块的关联的数据模块已加载到交换池。关闭状态可能指示代码模块未加载到交换池。关闭状态可以进一步指示代码模块的关联的数据模块未加载到交换池。挂起状态可以指示代码模块和关联的数据模块未加载到交换池,并且该数据模块被存储到存储存储器中的交换分区。当模块被挂起时,使用中的数据和状态数据可以存储在NAND交换分区中,以便在调用关联函数时重新启动模块。

压缩引擎可以压缩基线映像和最大的代码模块。交换池的大小可以与压缩后的最大代码模块的大小大致相同,其中压缩后的最大代码模块的大小可以大于其余任何一个代码模块,使得交换池的大小足以存储任何一个代码模块,而不会使用多余的执行存储器资源。交换池的大小可以容纳执行最大压缩代码模块所需的数据模块。压缩引擎可以基于从执行存储器请求执行的静态虚拟地址来确定何时解压缩压缩的基线映像和最大的压缩代码模块。

压缩引擎可以压缩基线映像、代码模块和数据模块。代替将压缩数据模块存储在存储存储器的交换分区中,压缩数据模块可以与压缩基线映像一起存储。压缩数据模块可能接近零(0)kB。压缩引擎可以基于从执行存储器请求执行的静态虚拟地址来确定何时解压缩压缩的基线映像、压缩的代码模块和压缩的数据模块。

在一些实施例中,存储器线(包括基线映像、代码模块和数据模块)的压缩和解压缩,以及压缩存储器线的存储、访问、检索和管理可以通过各种方法实现,包括于2017年11月21日发布美国专利No.9,823,850,题为“Priority-Based Access Of CompressedMemory Lines In Memory In A Processor-Based System”,于2016年12月21日提交的美国专利申请Ser.No.15/385,991,题为“Reducing Or Avoid Buffering Of Evicted CacheData From An Uncompressed Cache Memory In A Compressed Memory System To AvoidStalling Write Operations”,于2018年8月28日发布美国专利No.10,061,698,题为“Reducing Or Avoiding Buffering Of Evicted Cache Data From An UncompressedCache Memory In A Compression Memory System When Stalled Write OperationsOccurur”以及于2017年2月7日提交的美国专利申请Ser.No.15/426,473,题为“ReducingBandwidth Consumption When Performing Free Memory List Cache Maintenance InCompressed Memory Schemes Of Processor-Based Systems”中公开的那些方法,其中每一项的全部公开内容通过引用而纳入本文。

图1示出了包括适合用于各种实施例的计算设备10的系统。计算设备10可以包括具有处理器14、存储器16、通信接口18和存储存储器接口20的片上系统(SoC)12。计算设备10可进一步包括通信部件22,诸如有线或无线调制解调器,存储存储器24和用于建立无线通信链路的天线26。处理器14可以包括多种处理设备中的任何一种,例如多个处理器核(core)。

本文中使用术语“片上系统”(SoC)来指代一组互连的电子电路,通常但非排他地,包括处理设备、存储器和通信接口。处理设备可以包括各种不同类型的处理器14和处理器核,诸如通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、安全处理单元(SPU),计算设备的特定部件的子系统处理器,诸如用于照相机子系统的图像处理器或用于显示器的显示处理器、辅助处理器、单核处理器和多核处理器。处理设备可以进一步体现其他硬件和硬件组合,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、其他可编程逻辑设备、离散门逻辑、晶体管逻辑、性能监视硬件、看门狗硬件和时间参考。可以配置集成电路,以使得集成电路的部件位于单片半导体材料上,诸如硅。

SoC 12可以包括一个或多个处理器14。计算设备10可以包括一个以上的SoC 12,从而增加了处理器14和处理器核的数量。计算设备10还可以包括不与SoC 12关联的处理器14。单独处理器14可以是多核处理器,如下面参考图2所述。每个处理器14可以配置用于与计算设备10的其他处理器14相同或不同的特定目的。相同或不同配置的处理器14和处理器核中的一个或多个可以分组在一起。一组处理器14或处理器核可以被称为多处理器集群。

SoC 12的存储器16可以是易失性的,配置为存储数据和处理器可执行代码以供处理器14访问。SoC 12的存储器16可以是非易失性存储器,配置用于存储数据和处理器可执行代码以供处理器14访问。计算设备10和/或SoC12可以包括配置用于各种目的的一个或多个存储器16。一个或多个存储器16可以包括易失性存储器。一个或多个存储器16可以包括随机存取存储器(RAM)或主存储器。一个或多个存储器16可以包括缓存存储器。这些存储器16可配置为临时保存从数据传感器或子系统接收的有限数量的数据、从非易失性存储器请求的数据和/或处理器可执行代码指令、从非易失性存储器加载到存储器16以基于各种因素预期将来的访问,和/或中间处理数据和/或处理器可执行代码指令,它们由处理器14产生并临时存储以供将来快速访问而不存储在非易失性存储器中。

存储器16可以配置为至少临时地存储数据和处理器可执行代码,它们从另一存储器设备加载到存储器16以供一个或多个处理器14访问。另一个存储器设备可以包括另一个存储器16。另一个存储设备可以包括存储存储器24。可以响应于处理器14执行功能来加载加载到存储器16的数据或处理器可执行代码。响应于功能的执行,将数据或处理器可执行代码加载到存储器16可能是由于对存储器16的存储器访问请求失败或“错过”,因为所请求的数据或处理器可执行代码是不在存储器16中。响应于错过,可以做出对另一个存储器16或存储存储器24的存储器访问请求,以将所请求的数据或处理器可执行代码从另一个存储器16或存储存储器24加载到存储器16。响应于功能的执行,将数据或处理器可执行代码加载到存储器16可能是由于对另一存储器16或存储存储器24的存储器访问请求导致,并且可以将数据或处理器可执行代码加载到存储器16以便以后访问。

存储存储器接口20和存储存储器24可以协同工作以允许计算设备10将数据和处理器可执行代码存储在非易失性存储介质上。可以将存储存储器24配置为非常类似于存储器16的实施例,其中存储存储器24可以存储数据或处理器可执行代码以供一个或多个处理器14访问。非易失性的存储存储器24可以在计算设备10的电源已经关闭之后保留信息。当重新接通电源并且计算设备10重启时,存储在存储存储器24上的信息对于计算设备10可以是可用的。存储存储器接口20可以控制对存储存储器24的访问,并且允许处理器14从存储存储器24读取数据以及将数据写入存储存储器24。

计算设备10和/或SoC 12的一些或全部部件可以被不同地布置和/或组合,同时仍然服务于各种实施例的功能。计算设备10可以不限于每个部件之一,并且每个部件的多个实例可以包括在计算设备10的各种配置中。

图2示出了适合于实现实施例的计算设备的部件。处理器14可以包括多种处理器类型,例如包括CPU和各种硬件加速器,诸如GPU、DSP、APU、SPU子系统处理器等。处理器14还可以包括定制硬件加速器,其可以包括定制处理硬件和/或配置为实现一组专门的功能的通用硬件。处理器14可以包括任何数量的处理器核200、201、202、203。具有多个处理器核200、201、202、203的处理器14可以被称为多核处理器。

处理器14可以具有多个同构或异构处理器核200、201、202、203。同构处理器可以包括多个同构处理器核。处理器核200、201、202、203可以是同构的,因为处理器14的处理器核200、201、202、203可以配置用于相同目的并且具有相同或相似的性能特征。例如,处理器14可以是通用处理器,并且处理器核200、201、202、203可以是同构通用处理器核。作为另一示例,处理器14可以是GPU,并且处理器核200、201、202、203可以是同构图形处理器核。作为另一示例,处理器14可以是DSP,并且处理器核200、201、202、203可以是同构数字信号处理器核。作为另一个示例,处理器14可以是具有同构处理器核200、201、202、203的定制硬件加速器。

异构处理器可以包括多个异构处理器核。处理器核200、201、202、203可以是异构的,因为处理器14的处理器核200、201、202、203可以配置用于不同的目的和/或具有不同的性能特征。这样的异构处理器核的异构性可以包括不同的指令集架构。这样的异构处理器核的异构性可以包括不同的流水线。这样的异构处理器核的异构性可以包括不同的工作频率。这样的异构处理器核的异构性可以包括处理器核的其他不同的配置特征。这样的异构处理器核的示例可以包括所谓的“big.LITTLE”架构,其中较慢的低功耗处理器核可以与功能更强大且耗电大的处理器核耦合。在类似的实施例中,SoC(例如,图1的SoC 12)可以包括任何数量的同构或异构处理器14。在各种实施例中,并非所有处理器核200、201、202、203都需要是异构处理器核,因为异构处理器可以包括具有至少一个异构处理器核的处理器核200、201、202、203的任何组合。

处理器14的处理器核200、201、202、203中的每一个可以被指定专用于由指定的处理器核200、201、202、203进行读取和/或写入访问的专用处理器核缓存(PPCC)存储器210、212、214、216。专用处理器核缓存210、212、214、216可存储数据和/或指令,并使所存储的数据和/或指令可用于专用处理器核缓存210、212、214、216所专用的处理器核200、201、202、203,以供处理器核200、201、202、203执行时使用。专用处理器核缓存210、212、214、216可包括如本文参考图1的存储器16所描述的易失性存储器。

处理器14的处理器核200、201、202、203的组可被指定为共享处理器核缓存(SPCC)存储器220、222,它们可被指定的处理器核200、201、202、203的组专用于读取和/或写入访问。共享处理器核缓存220、222可存储数据和/或指令,并使所存储的数据和/或指令可用于共享处理器核缓存220、222专用的组处理器核200、201、202、203,以供指定组中的处理器核200、201、202、203执行时使用。共享处理器核缓存220、222可以包括如本文参考图1的存储器16所描述的易失性存储器。

处理器14可以包括共享处理器缓存存储器230,其可以专用于处理器14的处理器核200、201、202、203的读取和/或写入访问。共享处理器缓存230可存储数据和/或指令,并使所存储的数据和/或指令可用于处理器核200、201、202、203,以供处理器核200、201、202、203执行时使用。共享处理器缓存230还可充当用于输入到处理器14和/或从处理器14输出的数据和/或指令的缓冲器。共享缓存230可以包括如本文参考存储器16(图1)所描述的易失性存储器。

多个处理器14可以访问共享系统缓存存储器240,其可以专用于多个处理器14的处理器核200、201、202、203的读取和/或写入访问。共享系统缓存240可以存储数据和/或指令,并使所存储的数据和/或指令对处理器核200、201、202、203可用,以供处理器核200、201、202、203执行时使用。共享系统缓存240还可充当用于输入到多个处理器14和/或从多个处理器14输出的数据和/或指令的缓冲器。共享系统缓存240可以包括如本文参考图1中所示的存储器16所描述的易失性存储器。

在图2所示的示例中,处理器14包括四个处理器核200、201、202、203(即,处理器核0、处理器核1、处理器核2和处理器核3)。在该示例中,每个处理器核200、201、202、203被指定各自的专用处理器核缓存210、212、214、216(即,处理器核0和专用处理器核缓存0、处理器核1和专用处理器核缓存1、处理器核2和专用处理器核缓存2、处理器核3和专用处理器核缓存3)。处理器核200、201、202、203可以被分组,并且每个组可以被指定共享处理器核缓存220、222(即,处理器核0和处理器核2以及共享处理器核缓存0为一组,并且处理器核1和处理器核3以及共享处理器核缓存1为一组)。为了便于解释,本文中的示例可参考图2中所示的四个处理器核200、201、202、203、四个专用处理器核缓存210、212、214、216、处理器核200、201、202、203和共享处理器核缓存220、222的两个组。然而,图2中所示和本文所描述的四个处理器核200、201、202、203、四个专用处理器核缓存210、212、214、216、处理器核200、201、202、203和共享处理器核缓存220、222的两个组仅作为示例提供,并不意味着将各种实施例限制到具有四个指定的专用处理器核缓存和两个指定的共享处理器核缓存220、222的四核处理器系统。计算设备10、SoC 12或处理器14可以单独地或组合地包括少于或多于本文所示和描述的四个处理器核200、201、202、203和专用处理器核缓存210、212、214、216以及两个共享处理器核缓存220、222。

在各种实施例中,处理器核200、201、202、203可以通过访问从较低级别缓存存储器加载到较高级别缓存存储器的数据和/或指令,间接地访问存储在共享处理器核缓存220、222、共享处理器缓存230和/或共享系统缓存240中的数据和/或指令。例如,从最高级别的缓存存储器到最低级别的缓存存储器,以下降的顺序的各种缓存存储器210、212、214、216、220、222、230、240的级别可以是专用处理器核缓存210、212、214、216、共享处理器核缓存220、222、共享处理器缓存230和共享系统缓存240。在各种实施例中,数据和/或指令可以从较低级别的缓存存储器和/或其他存储器(例如图1中示出的存储器16、24)加载到缓存存储器210、212、214、216、220、222、230、240中,作为对错过缓存存储器210、212、214、216、220、222、230、240的存储器访问请求的响应,和/或作为对推测地检索数据和/或指令以供处理器核200、201、202、203将来使用的预取操作的响应。在各种实施例中,缓存存储器210、212、214、216、220、222、230、240可以使用逐出策略来管理,以替换缓存存储器210、212、214、216、220、222、230、240中存储的数据和/或指令,从而允许存储其他数据和/或指令。逐出数据和/或指令可包括将逐出的数据和/或指令从较高级别的缓存存储器210、212、214、216、220、222、230写入较低级别的缓存存储器220、222、230、240和/或其他存储器。

为了便于参考,术语“硬件加速器”、“定制硬件加速器”、“多核处理器”、“处理器”和“处理器核”在本文中可以互换使用。本文中所图示的计算设备及其各种部件的描述仅是示例性的,绝非限制性的。所示示例计算设备的几个部件可以被可变地配置、组合和分离。可能包括更多或更少数量的部件,并且它们可能在SoC内以不同的方式放置和连接,也可以与SoC分开。

图3示出了根据一些实施例的用于动态模块的外部分页和交换的方法300。方法300可以在计算设备(例如,图1中的计算设备10)中实现。方法300可以在通用硬件中、专用硬件中或在软件配置的处理器和专用硬件的组合中的处理器(例如,图1、图2、图5和图7中的处理器14、200、201、202、204)中执行的软件中实现,诸如在系统内执行软件的处理器,用于包括其他单独部件的动态模块的外部分页和交换。单独部件可以包括图1中的存储器16、24,图2中的缓存存储器210、212、214、216、220、222、230、240。在图5和图7中,单独部件可以包括执行存储器500和存储存储器502,以及各种存储器/缓存控制器。为了包含在各种实施例中启用的替代配置,在本文中将实现方法300的硬件称为“处理设备”。

在框302中,处理设备可以从用于静态映像的虚拟地址空间向计算设备的固件的静态映像(例如,图4中的静态映像400)的部分分配静态虚拟地址。静态映像可以包括各个部分,包括用于运行计算设备的必要功能所需的固件的代码和/或数据的基础映像。基础映像可以包括图4和图5的基础映像402。基础映像可以包括图7的压缩基础映像700。必要功能可以包括以在可以实现计算设备的其他功能的水平上操作计算设备所需的计算设备的任何功能。静态映像可以包括固件的动态模块,其可以由计算设备在基础映像的功能所启用的级别上操作来实现。每个动态模块可以包括代码模块(例如,图4、图5和图7中的代码模块404a-404d)。在各种实施例中,动态模块可以进一步包括与代码模块有关的数据模块,用于实现动态模块的固件功能。数据模块可以包括图4和图5的数据模块406a-406d。数据模块可以包括在图7的压缩基础映像700中包括的代码模块的压缩元数据。例如,动态模块可以使得能够执行计算设备的各种无线电接入技术的功能。在静态虚拟映像的构建期间,可以为基础映像和各种动态模块指定边界。可以基于这些指定的边界将静态虚拟地址分配给基础映像和各种动态模块。分配给静态固件映像的各个部分的静态虚拟地址可能是不可变的,并且可由计算设备使用以彼此标识基础映像和动态模块。在各种实施例中,基础映像和/或动态模块可以是未压缩的或压缩的。静态虚拟地址还可以与指示符相关联和/或在用于静态映像的虚拟地址空间的虚拟地址集合内,其可以指示基础映像和/或动态模块是未压缩还是压缩。

静态虚拟地址可允许计算设备(例如,经由计算设备的存储器管理单元)将静态虚拟地址与计算设备的存储存储器的物理块地址和计算设备的执行存储器的物理地址相关联。在一些实施例中,静态虚拟地址与物理块地址和/或与物理地址的关联可以存储为任意数量的数据结构中的地址之间的映射。使用虚拟地址对静态映像的部分的标识可用于标识存储存储器中用于存储基础映像和/或动态模块的部分或分区。该分区可以包括图5和图7的基础映像分区506。该分区可以包括图5和图7的分页分区508。该分区可以包括图5的交换池分区510。使用虚拟地址对静态映像的部分的标识可用于标识执行存储器中加载静态映像的部分的位置,包括用于基础映像和交换池的位置(例如,图5和图7中的交换池504),配置用于动态加载动态模块。

在框304中,处理设备可以将静态映像分解为基础映像和动态模块。如本文所讨论的,分配给静态映像的部分的静态虚拟地址可以标识静态虚拟映像的部分,包括基础映像和动态模块。处理设备可以标识基础映像和动态模块,并将基础映像和动态模块与静态映像彼此分离。处理设备可以配置为管理静态虚拟映像的分解部分到存储存储器的分区的存储。存储存储器可以包括大小为并指定为与动态模块分开地存储基础映像的分区,诸如在第一分区中。存储存储器可以包括大小为并指定为彼此分开地存储动态模块的部分的分区,诸如将代码模块与数据模块分开地存储在第二分区和第三分区中。在各种实施例中,第二分区和第三分区可以被互换地指定用于存储代码模块和数据模块。换句话说,在一些实施例中,第二分区或第三分区可以是用于存储代码模块的分页分区,并且在一些实施例中,第二分区或第三分区可以是用于存储数据模块的交换池分区。

在框306中,处理设备可以在计算设备的启动时间期间将基础映像从存储存储器的第一分区加载到执行存储器。在启动时间期间,处理设备可以加载用于执行的各种固件代码和/或数据,以将计算设备置于执行计算设备的其他功能(诸如包含计算设备的预期用途的功能)的功能的条件下。基础映像可以包括配置为将计算设备置于这种条件下的固件代码和/或数据,因此在启动时间期间加载基础映像很重要。处理设备可以使用映射到存储存储器中第一分区的物理块地址的基础映像的静态虚拟地址来从存储存储器检索基础映像。处理设备可以将静态虚拟地址映射到用于存储基础映像的执行存储器的物理地址,使得可以访问基础映像的固件代码和/或数据以供执行。

在计算设备的启动时间期间,在框308中处理设备可以保留执行存储器的部分以用作交换池。交换池可以是为动态模块的分页和/或交换而保留和配置的执行存储器的部分。在各种实施例中,交换池的大小可以被设置为容纳未压缩或压缩形式的最大动态模块。例如,交换池的大小可以设置为能够存储最大的未压缩或压缩代码模块。交换池的大小也可以甚至为进一步存储与最大未压缩或压缩代码模块关联的数据模块。这样,交换池的大小可以足以存储任何较小的未压缩或压缩的代码模块和/或数据模块。

在框310中,处理设备可以在计算设备的运行时间期间将动态模块从存储存储器的第二分区加载到交换池。运行时间可以是计算设备可以执行涵盖计算设备的预期用途的功能的时间段。为了执行涵盖计算设备的预期用途的功能,计算设备可以执行动态模块。动态模块可以被加载到交换池,以访问动态模块的代码和/或数据以由计算设备执行。如本文进一步所述,加载动态模块可以包括加载整个动态模块或加载与特定功能关联的动态模块的任意数量的分页,以由计算设备执行。加载动态模块可以包括将动态模块从其静态虚拟地址到第二分区中的物理块地址的映射中定位,并且将静态虚拟地址映射到交换池中的物理地址。

在一些实施例中,处理设备可以在计算设备的不同状态期间或在计算设备的不同状态下实现框302-框310的任何组合。计算设备的状态可以包括编译和/或链接时间。计算设备的状态可以包括启动时间。计算设备的状态可以包括运行时间。例如,框302和框304可在编译和/或链接时间期间实现,框306和框308可在启动时间期间实现,而框310可在运行时间期间实现。

图4示出了根据一些实施例的计算设备(例如,图1中的计算设备10)的固件的静态映像400。静态映像400可以是计算设备的各种固件的单个映像,包括计算设备的所有固件。静态映像400可以包括用于运行计算设备的必要功能所需的固件的代码和/或数据的基础映像402。静态映像400可以包括任意数量的“N”个动态模块。每个动态模块可以包括用于实现动态模块的固件功能的代码模块404a、404b、404c、404d。在一些实施例中,动态模块可以进一步包括与代码模块404a、404b、404c、404d有关的数据模块406a、406b、406c、406d,用于实现动态模块的固件功能。可以为基础映像402和各个代码模块404a、404b、404c、404d指定边界,以在静态映像400中定义每一个。在各种实施例中,可以为数据模块406a、406b、406c、406d指定边界以定义静态映像400中的每一个。在各种实施例中,基础映像402和/或动态模块404a-404d、406a-406d中的任何一个都可以是未压缩的或压缩的。

可以从静态映像的虚拟地址空间为基础映像402和动态模块404a-404d、406a-406d分配静态虚拟地址。例如,可以为动态模块404a-404d、406a-406d为其代码模块404a、404b、404c、404d分配静态虚拟地址。可以为其动态模块404a-404d、406a-406d为其数据模块406a、406b、406c、406d分配与其代码模块404a、404b、404c、404d相关的静态虚拟地址。静态虚拟地址还可以与指示符相关联和/或在用于静态映像的虚拟地址空间的虚拟地址集合内,其可以指示基础映像402和/或动态模块404a-404d、406a-406d是未压缩还是压缩。静态虚拟地址可允许计算设备(例如,经由计算设备的存储器管理单元)将静态虚拟地址与计算设备的存储存储器的物理块地址和计算设备的执行存储器的物理地址相关联。存储存储器可以包括图1的存储器16。存储存储器可以包括图1的存储器24。存储存储器可以包括图5和图7的存储存储器502。执行存储器可以包括图1的存储器16。执行存储器可以包括图1的存储器24。执行存储器可以包括图2的缓存存储器210、212、214、216、220、222、230、240。执行存储器可以包括图5和图7的执行存储器500。使用虚拟地址对静态映像400的部分的标识可以用于标识存储存储器的部分或分区,在其中存储了基础映像402和/或动态模块404a-404d、406a-406d。该分区可以包括图5和图7的基础映像分区506。该分区可以包括图5和图7的分页分区508。该分区可以包括图5的交换池分区510。使用虚拟地址对静态映像400的部分的标识可用于标识执行存储器中加载静态映像400的部分的位置,包括用于基础映像和交换池的位置(例如,图5中的交换池504),配置用于动态加载动态模块404a-404d、406a-406d。在各种实施例中,静态虚拟地址可以与存储存储器的物理块地址以及任何数量的数据结构(诸如转换查找缓冲器)中的执行存储器的物理地址相关联。在各种实施例中,静态虚拟地址可以与压缩指示符相关联,其配置为指示基础映像402和/或动态模块404a-404d、406a-406d是未压缩的还是压缩的。压缩指示符关联可以包括在将静态虚拟地址与物理块地址和/或物理地址相关联的数据结构中,或者在单独的数据结构中。

图5示出了根据一些实施例的适合于为动态模块实现外部分页和交换的存储器管理系统。存储器管理系统可以包括执行存储器500、存储存储器502和处理器14。执行存储器500可以包括图1的存储器16。执行存储器500可以包括图1的存储器24。执行存储器500可以包括图2的缓存存储器210、212、214、216、220、222、230、240。存储存储器502可以包括图1的存储器16。存储存储器502可以包括图1的存储器24。

存储存储器502可以配置为存储基础映像402和/或动态模块404a-404d、406a-406d。存储存储器502可以被划分为分区。分区可以包括基础映像分区506。分区可以包括分页分区508。分区可以包括交换池分区510。基础映像402可以存储到基础映像分区506。代码模块404a-404b可以存储到分页分区508。数据模块406a-406b可以存储到交换池分区510。为了存储基础映像402和/或动态模块404a-404d、406a-406d,可以将基础映像402和/或动态模块404a-404d、406a-406d的静态虚拟地址映射到存储存储器502的物理块地址,并且特别是映射到分区506、508、510的物理块地址。存储存储器502的静态虚拟地址和物理块地址可以映射为数据结构。

在各种实施例中,代码模块404a-404b可以被分成分页。任何数量的代码模块分页可以与代码模块404a-404b的固件的特定功能相关联。在各种实施例中,直到在运行时间执行相关代码模块404a-404b之前,存储存储器502中的数据模块406a-406b可以最初几乎不包含任何数据。数据模块406a-406b中存储的数据仅在需要时才保留,并且最初可能包含很少甚至没有数据供随后的运行时间会话使用。在各种实施例中,可以以未压缩或压缩格式存储存储在存储存储器502中的基础映像402和/或动态模块404a-404d、406a-406d的任何组合。

执行存储器500可以配置为存储基础映像402,并且包含在此称为交换池504的存储器的保留区域。在计算设备(例如,计算设备10)的启动时间期间,处理器14可以将基础映像402从存储存储器502中的基础映像分区506加载到执行存储器500。交换池504可以在计算设备的启动时间期间由处理器14保留在执行存储器500中。处理器14可以配置交换池504的大小。在各种实施例中,处理器可以配置为使交换池504的大小与最大的未压缩或压缩代码模块404a-404d一样大。在确定交换池504的大小时,处理器14可以考虑与最大代码模块404a-404d关联的数据模块406a-406d的大小。因此,交换池504的大小可以设置为使得任何压缩或未压缩的代码模块404a-404d都可以放入交换池504中。在各种实施例中,针对最大的未压缩代码模块404a-404d确定大小的交换池504可以容纳任何其他未压缩代码模块404a-404d。针对最大的压缩代码模块404a-404d而确定大小的交换池504可容纳小于最大压缩代码模块404a-404d的任何未压缩代码模块404a-404d,且大于最大压缩代码模块404a-404d的任何代码模块404a-404d也可被压缩。

在各种实施例中,代码模块404a-404d或代码模块404a-404d的任何数量的分页可以加载到交换池504。为了加载代码模块404a-404d,可以将代码模块404a-404d的静态虚拟地址映射到交换池504的物理地址。交换池504的静态虚拟地址和物理地址可以映射为数据结构。该数据结构可以包括存储在存储器中的存储器地址查找表。该数据结构可以包括存储在存储器中的存储器地址转换表。在各种实施例中,代码模块404a-404d可以响应于来自在计算设备上执行的线程的要求或请求和/或基于与计算设备的用例相关的计算设备的各种状态来预测地加载到交换池504。表示用例的状态可以与存储在计算设备中的诸如表的数据结构中的代码模块404a-404d相关联。在各种实施例中,状态和代码模块404a-404d的关联可以提供给计算设备和/或由计算设备获知。状态和代码模块404a-404d的关联可以通过离线和/或在线代码分析和/或对仿真的机器学习和/或运行时间执行来确定。

在各种实施例中,作为将压缩代码模块404a-404d加载到交换池504的部分,压缩代码模块404a-404d可由处理器14解压缩,其可执行压缩引擎。处理器14可以使用代码模块404a-404d的静态虚拟地址来确定其是否被压缩。在各种实施例中,静态虚拟地址可以在数据结构中与压缩指示符相关联,其配置为指示代码模块404a-404d是未压缩还是已压缩。在各种实施例中,处理器14可以将静态虚拟地址的范围与未压缩或压缩的代码模块404a-404d相关联,并确定代码模块404a-404d的静态虚拟地址是否落在静态虚拟地址的范围内。

各种代码模块404a-404d可以具有不同的优先级。在执行第一代码模块404a-404d时,可以请求具有较高优先级的第二代码模块404a-404d进行加载和/或预测性加载。执行中的第一代码模块404a-404d可以被中断并从交换池504中逐出。由于交换池504在大小上被有意地限制以减少对将所有代码模块404a-404d加载到执行存储器500的存储器资源的需要,因此必须管理交换池504,使得较低优先级的代码模块404a-404d不干扰较高优先级的代码模块404a-404d的执行。存储器管理技术的任何组合都可以用于确定从交换池504中逐出了哪些代码模块404a-404d。存储器管理技术可以基于优先级的。存储器管理技术可以是基于时间的。存储器管理技术可以基于使用的。

在执行时,加载到交换池504的代码模块404a-404d可生成上下文或状态数据,它们可用于在中断时恢复代码模块404a-404d的执行和/或用于代码模块404a-404d的稍后执行。通过执行代码模块404a-404d生成的上下文或状态数据可以存储到存储存储器502的交换池分区510中的关联的数据模块406a-406d。处理器14可以使用数据模块406a-406d的静态虚拟地址到存储存储器502的物理块地址的映射来存储上下文或状态数据。存储存储器502的静态虚拟地址和物理块地址可以被映射为数据结构。该数据结构可以包括存储在存储器中的存储器地址查找表。该数据结构可以包括存储在存储器中的存储器地址转换表。在恢复代码模块404a-404d的执行和/或用于代码模块404a-404d的稍后执行时,处理器14可以使用数据模块406a-406d的静态虚拟地址到存储存储器502的物理块地址的映射来加载数据模块406a-406d。在各种实施例中,代码模块404a-404d和数据模块406a-406d的静态虚拟地址可以在数据结构中相关联,使得处理器14可以确定加载哪个数据模块406a-406d以执行代码模块404a-404d。

图6是示出了根据一些实施例的来自为动态模块实现外部分页和交换的代码模块的状态600、602、604。动态模块可以包括图4、图5和图7的代码模块404a、404b、404c、404d。在一些实施例中,动态模块可进一步包括图4和图5的数据模块406a、406b、406c、406d,与代码模块404a、404b、404c、404d相关。动态模块的初始状态可以是关闭状态600,其可以指示动态模块没有被加载到计算设备(例如,图1中的计算设备10)的执行存储器中的交换池(例如,图5中的交换池504)。执行存储器可以包括图1的存储器16。执行存储器可以包括图1的存储器24。执行存储器可以包括图2的缓存存储器210、212、214、216、220、222、230、240。执行存储器可以包括图5和图7的执行存储器500。在关闭状态600期间,代码模块可以被存储在计算设备的存储存储器中的分页分区中。存储存储器可以包括图1的存储器16。存储存储器可以包括图1的存储器24。存储器可以包括图5和图7的存储存储器502。代码模块可能无法在关闭状态600下执行。

动态模块可以从关闭状态600转换到开启状态602。可以响应于对执行存储器中的交换池的动态的需求响应或预测性加载而发生转变。在开启状态602期间,动态模块可以存储在执行存储器中的交换池中。动态模块可以是可访问的,以在开启状态602中执行。在动态模块的执行完成或中断时,其中不需要由动态模块的执行生成的数据恢复执行或用于动态模块的稍后执行,动态模块可以转换回关闭状态600。

在动态模块的执行完成或中断时,其中需要由动态模块的执行生成的数据恢复执行或用于动态模块的稍后执行,动态模块可以转换到挂起状态604。可以响应于从交换池中逐出动态模块而发生转换。挂起状态604可以指示在执行中动态模块没有被加载到交换池。在挂起状态604期间,代码模块可以被存储在存储存储器中的分页分区中。动态模块可能无法在挂起状态604中执行。此外,与代码模块关联的数据模块可以存储在存储存储器中的交换池分区(例如,图5中的交换池分区510)中,并且可以在转换到代码模块的开启状态602时加载到交换池。在挂起状态604期间存储数据模块可以提高代码模块的执行之间的转换完成的速度,诸如在计算设备中的无线电接入技术之间的切换。在各种实施例中,动态模块可以响应于对动态模块的需求,根据交换池中空间的可用性预测地和/或机会性地从挂起状态604转换到开启状态602。动态模块还可以转换到关闭状态600,这时数据模块可能不再存储在交换池分区中。可以由经过时间或对于计算设备数据模块可能陈旧或不必要的状态改变来触发到关闭状态600的转换。

图7示出了根据一些实施例的适合于为动态模块实现外部分页和交换的存储器管理系统。存储器管理系统可以包括执行存储器500、存储存储器502和处理器14。执行存储器可以包括图1的存储器16。执行存储器可以包括图1的存储器24。执行存储器可以包括图2的缓存存储器210、212、214、216、220、222、230、240。存储存储器可以包括图1的存储器16。存储存储器可以包括图1的存储器24。

存储存储器502可以配置成存储压缩的基础映像700,其可以包括各种代码模块的未压缩或压缩元数据,和/或配置成存储动态模块,包括代码模块404a-404d。存储存储器502可以被划分为分区。分区可以包括基础映像分区506。分区可以包括分页分区508。压缩的基础映像700可以被存储到基础映像分区506。代码模块404a-404b可以存储到分页分区508。在各种实施例中,可以以未压缩或压缩格式存储存储在存储存储器502中的代码模块404a-404b的任何组合。为了存储压缩的基础映像700和/或代码模块404a-404b,可以将压缩的基础映像700和/或代码模块404a-404b的静态虚拟地址映射到存储存储器502的物理块地址,并且特别是映射到分区506、508的物理块地址。存储存储器502的静态虚拟地址和物理块地址可以被映射为数据结构。

执行存储器500可以配置为存储压缩的基础映像700并且包含交换池504。在计算设备(例如,计算设备10)的启动时间期间,处理器14可以将压缩的基础映像700从存储存储器502中的基础映像分区506加载到执行存储器500。交换池504可以以类似于本文参考图5描述的方式配置和起作用。

压缩的基础映像700的部分可以被处理器14解压缩以执行。例如,响应于对执行固件代码的部分的调用,可以对压缩的基础映像700的基础映像部分的固件代码和数据进行解压缩。可以分别访问和解压缩代码模块的压缩的元数据,以访问元数据以执行相应的代码模块404a-404d,其加载到交换池504,并被处理器14访问以执行。

图8示出了根据一些实施例的用于配置计算设备的固件以用于动态模块的外部分页和交换的方法800。方法800可以在计算设备(例如,图1中的计算设备10)中、在处理器(例如,图1、图2、图5和图7中的处理器14、200、201、202、204)中执行的软件中、在通用硬件中、在专用硬件中、或在软件配置的处理器和专用硬件的组合中实现,诸如一个在用于动态模块的外部分页和交换的系统中执行软件的处理器,其包括其他单独部件(例如,图1中的存储器16、24,图2中的缓存存储器210、212、214、216、220、222、230、240,图5和图7中的执行存储器500和存储存储器502),以及各种存储器/缓存控制器。为了包含在各种实施例中启用的替代配置,在本文中将实现方法800的硬件称为“处理设备”。

在框802中,处理设备可以构建存储在计算设备上的固件的静态映像。处理设备可以复制存储在计算设备上的固件的任何组合,直到所有固件,并生成包括所有固件代码和/或静态映像数据的单个静态映像。可以通过边界来指定静态映像的不同部分,其指示某些固件在静态映像中的开始和结束位置。例如,可以指示边界以分离基础映像和动态模块(例如,图4、图5和图7中的代码模块404a-404d、数据模块406a-406d)。基础映像可以包括图4和图5的基础映像402。基础映像可以包括图7的压缩的基础映像700。动态模块可以包括图4、图5和图7的代码模块404a-404d。在一些实施例中,动态模块可进一步包括与代码模块有关的图4和图5的数据模块406a-406d。同样,可以指示边界以分离各种动态模块。

在框302中,处理设备可以从用于静态映像的虚拟地址空间向计算设备的固件的静态映像(例如,图4中的静态映像400)的部分分配静态虚拟地址,如参考图3的方法300的类似编号的框所述。

在框304中,如参考图3的方法300的类似编号的框所述,处理设备可以将静态映像分解为基础映像和动态模块。

在框804中,处理设备可以将基础映像存储到存储存储器的第一分区(例如,图5和图7中的基础映像分区506)。在将基础映像存储到存储存储器的第一分区中时,处理设备可以将基础映像的静态虚拟地址映射到存储存储器的第一分区的物理块地址。在各种实施例中,基础映像可以以未压缩或压缩格式存储。

在框806中,处理设备可以将代码模块存储到存储存储器的第二分区(例如,图5和图7中的分页分区508)。在将代码模块存储到存储存储器的第二分区中时,处理设备可以将代码模块的静态虚拟地址映射到存储存储器的第二分区的物理块地址。在各种实施例中,代码模块可以以未压缩或压缩格式存储。

在框808中,处理设备可以将数据模块存储到存储存储器的第三分区(例如,图5中的交换池分区510)。在将数据模块存储到存储存储器的第三分区中时,处理设备可以将数据模块的静态虚拟地址映射到存储存储器的第三分区的物理块地址。在各种实施例中,数据模块可以以未压缩或压缩格式存储。

在一些实施例中,处理设备可以在计算设备的不同状态期间或不同状态时(诸如在编译和/或链接时间、启动时间和/或运行时间期间或之时)实现框302、304、802-808的任何组合。例如,可以在编译和/或链接时间期间实现框302、304、802-808。

图9示出了根据一些实施例的用于初始化动态模块的外部分页和交换的方法900。方法900可以在计算设备(例如,图1中的计算设备10)中、在处理器(例如,图1、图2、图5和图7中的处理器14、200、201、202、204)中执行的软件中、在通用硬件中、在专用硬件中、或在软件配置的处理器和专用硬件的组合中实现,诸如一个在用于动态模块的外部分页和交换的系统中执行软件的处理器,其包括其他单独部件(例如,图1中的存储器16、24,图2中的缓存存储器210、212、214、216、220、222、230、240,图5和图7中的执行存储器500和存储存储器502),以及各种存储器/缓存控制器。为了包含在各种实施例中启用的替代配置,在本文中将实现方法900的硬件称为“处理设备”。

在框902中,处理设备可以启动计算设备。处理设备可以响应于计算设备的加电或重置来启动计算设备。处理设备可以从不可变存储加载主引导加载器,并执行引导序列代码。不可变存储可以包括图1的存储器16。不可变存储可以包括图1的存储器24。

在框306中,在计算设备的启动时间期间,处理设备可以将基础映像从存储存储器的第一分区(例如,图5和图7中的基础映像分区506)加载到执行存储器,如参考图3的方法300的类似编号的框所述。基础映像可以包括图4和图5的基础映像402。基础映像可以包括图7的压缩的基础映像700。

在计算设备的启动时间期间,处理设备可以保留执行存储器的部分以用作交换池(例如,图5和图7中的交换池504),在框308中,如参考图3的方法300的类似编号的框所述。

在框904中,处理设备可以接收访问第一代码模块和/或数据模块的请求,和/或预测性确定要访问的第一代码模块和/或数据模块。响应于从计算设备接收的访问第一代码模块和/或数据模块的请求,可以提示处理设备从存储存储器中检索第一代码模块和/或数据模块。处理设备可以配置为基于计算设备的状态来预测性地检索第一代码模块和/或数据模块,该状态指示与第一代码模块和/或数据模块关联的计算设备的使用情况。计算设备的状态可以与数据结构中的第一代码模块和/或数据模块相关联,并且处理设备可以标识计算设备的状态并根据数据结构中的关联确定第一代码模块和/或数据模块。

在框310中,在计算设备的运行时间期间,处理设备可以将第一代码模块从存储存储器的第二分区(例如,图5和图7中的分页分区508)加载到交换池,如参考图3的方法300的类似编号的框所述。

在一些实施例中,处理设备可以在计算设备的不同状态期间(诸如编译和/或链接时间、启动时间和/或运行时间)实现框306-310、902、904的任何组合。例如,框306、308、902可以在启动时间期间实现,而框310、904可以在运行时间期间实现。

图10示出了根据一些实施例的用于动态模块的外部分页和交换的方法1000。方法1000可以在计算设备(例如,图1中的计算设备10)中、在处理器(例如,图1、图2、图5和图7中的处理器14、200、201、202、204)中执行的软件中、在通用硬件中、在专用硬件中、或在软件配置的处理器和专用硬件的组合中实现,诸如一个在用于动态模块的外部分页和交换的系统中执行软件的处理器,其包括其他单独部件(例如,图1中的存储器16、24,图2中的缓存存储器210、212、214、216、220、222、230、240,图5和图7中的执行存储器500和存储存储器502),以及各种存储器/缓存控制器。为了包含在各种实施例中启用的替代配置,在本文中将实现方法1000的硬件称为“处理设备”。

在框1002中,处理设备可以接收访问第二代码模块(例如,图4、图5和图7中的代码模块404a-404d)和/或数据模块(例如,图4和图5中的数据模块406a-406d)的请求,和/或预测性确定要访问的第二代码模块和/或数据模块。响应于从计算设备接收的访问第二代码模块和/或数据模块的请求,可以提示处理设备从存储存储器中检索第二代码模块和/或数据模块。处理设备可配置成基于指示与第二代码模块和/或数据模块关联的计算设备的用例的计算设备的状态来预测性地检索第二代码模块和/或数据模块。计算设备的状态可以与数据结构中的第二代码模块和/或数据模块相关联,并且处理设备可以标识计算设备的状态并根据数据结构中的关联确定第二代码模块和/或数据模块。

在确定框1004中,处理设备可以确定第二代码模块是否具有比第一代码模块更高的优先级。可以以各种方式确定代码模块的优先级。例如,可以向代码模块分配优先级,其指示代码模块之间的优先级。在各种实施例中,优先级可以基于计算设备的执行存储器中的交换池(例如,图5和图7中的交换池504)中的代码模块的参考计数,如本文参考图11中的方法1100所述。优先级也可以基于参数。优先级的参数可以包括等待时间。优先级的参数可以包括工作量。优先级的参数可以包括资源需求。优先级参数可以包括代码模块的任何执行特征或要求。优先级可以基于技术、算法和/或试探法的任何组合以指示优先级。

响应于确定第二代码模块的优先级不高于第一代码模块(即,确定框1004=“否”),处理设备可以在框1006中继续执行交换池中的第一代码模块。

在框1006中执行第一代码模块,或在框1010之后,在框1008中处理设备可以完成第一代码模块的执行。

响应于确定第二代码模块比第一代码模块具有更高的优先级(即,确定框1004=“是”),或者在框1008或框1010中完成第一代码模块的执行之后,在确定框1012中,处理设备可以确定由第一代码模块的执行生成的数据是否需要用于第一代码模块的稍后执行。在各种实施例中,第一代码模块的执行可能已经完成,或者可能已被更高优先级的第二代码模块中断。在执行期间,第一代码模块可能已经生成了上下文和/或状态数据,这可能是必需的,或者可以加快第一代码模块的后续执行。这样的后续执行可以包括恢复被中断的先前执行。后续执行可以包括第一代码模块的新执行。可以由第一代码模块的元数据中的数据来预先确定和指示第一代码模块的后续执行是否需要由第一代码模块的执行生成的数据。处理设备可以读取第一代码模块的元数据中的数据,以确定第一代码模块的后续执行是否需要通过第一代码模块的执行生成的数据。

响应于确定由第一代码模块的执行生成的数据是第一代码模块的稍后执行所需要的(即,确定块1012=“是”),在框1014中,处理设备可以将第一代码模块的数据存储到存储存储器的第三分区(例如,图5中的交换池分区510)。处理设备可以将数据存储到与第一代码模块关联的数据模块。第一代码模块和数据模块之间的关联可以存储在数据结构中,该数据结构可以由处理设备读取以确定将数据存储到哪个数据模块。数据模块的静态虚拟地址可以在数据结构中映射到存储存储器中的第三分区的物理块地址。处理设备可以使用静态虚拟地址和物理块地址的映射来存储数据。

响应于确定由第一代码模块的执行生成的数据对于第一代码模块的稍后执行不需要(即,确定框1012=“否”),或者在框1014中第一代码模块的数据存储到第三分区之后,在框1016中,处理设备可以从存储存储器的第二分区(例如,图5和图7中的分页分区508)将第二代码模块加载到交换池。第二代码模块可以被加载到交换池,以访问第二代码模块的代码和/或数据以由计算设备执行。如本文进一步所述,加载第二代码模块可以包括加载与特定功能关联的整个第二代码模块,以由计算设备执行。加载第二代码模块可以包括加载与特定功能关联的第二代码模块的任意数量的分页,以由计算设备执行。加载第二代码模块可以包括将第二代码模块从其静态虚拟地址到第二分区中的物理块地址的映射中定位,并且将静态虚拟地址映射到交换池中的物理地址。

在一些实施例中,处理设备可以在计算设备的不同状态期间(诸如在编译和/或链接时间、启动时间和/或运行时间期间或之时)实现框1002-1016的任何组合。例如,可以在运行时间期间实现框1002-1016。

图11示出了根据一些实施例的用于动态模块的外部分页和交换的参考计数跟踪的方法1100。方法1100可以在计算设备(例如,图1中的计算设备10)中、在处理器(例如,图1、图2、图5和图7中的处理器14、200、201、202、204)中执行的软件中、在通用硬件中、在专用硬件中、或在软件配置的处理器和专用硬件的组合中实现,诸如一个在用于动态模块的外部分页和交换的系统中执行软件的处理器,其包括其他单独部件(例如,图1中的存储器16、24,图2中的缓存存储器210、212、214、216、220、222、230、240,图5和图7中的执行存储器500和存储存储器502),以及各种存储器/缓存控制器。为了包含在各种实施例中启用的替代配置,在本文中将实现方法1100的硬件称为“处理设备”。

在框1102中,处理设备可以确定正在使用第一代码模块的一个或多个第一代码模块的用户(例如,图4、图5和图7中的代码模块404a-404d)。第一代码模块的用户可以是外部用户,其可以包括计算设备的要求第一代码模块的部件。第一代码模块的用户可以是内部用户,其可以包括第一代码模块本身的过程,这些过程可以继续在后台执行或在为外部用户执行之后完成第一代码模块的执行。处理设备可以实现可以标识第一代码模块的用户以及用户是否仍在使用第一代码模块的调度器和/或活动监视器。

在框1104中,处理设备可以为第一代码模块的每次外部和/或内部使用增加参考计数器。参考计数器可以指示是否正在使用加载到交换池(例如,图5和图7中的交换池504)的第一代码模块。参考计数可以用作第一代码模块的优先级的指示或部分指示。例如,可以将第一代码模块的参考计数与优先级阈值或另一代码模块的参考计数进行比较,以确定第一代码模块的参考计数是否超过阈值或另一参考计数。当第一代码模块的参考计数超过阈值或另一参考计数时,第一代码模块可以具有高优先级。

在框1106中,处理设备可以确定不再使用第一代码模块的第一代码模块的用户。处理设备可以确定第一代码模块的外部和/或内部用户不再使用第一代码模块。与确定仍然使用第一代码模块的第一代码模块的用户类似,处理设备可以检查调度器和/或活动监视器以确定用户是否不再使用第一代码模块。

在框1108中,处理设备可以为不再使用第一代码模块的第一代码模块的每个外部和/或内部用户递减参考计数器。减少参考计数器可能会更改第一代码模块的优先级。例如,可以将第一代码模块的参考计数与优先级阈值或另一代码模块的参考计数进行比较,以确定第一代码模块的参考计数是否超过阈值或另一参考计数。当第一代码模块的参考计数减小从而不再超过阈值或另一参考计数时,第一代码模块可以具有较低的优先级。

在一些实施例中,处理设备可以在计算设备的不同状态期间(诸如在编译和/或链接时间、启动时间和/或运行时间期间或之时)实现框1102-1108的任何组合。例如,可以在运行时间期间实现框1102-1108。

各种实施例(包括但不限于上述参考图1-图11的实施例)可以在包括移动计算设备的各种计算系统中实现,图9中示出了适合与各种实施例一起使用的示例。移动计算设备1200可以包括耦接至触摸屏控制器1204的处理器1202和内部存储器1206。处理器1202可以是被指定用于一般或特定处理任务的一个或多个多核集成电路。内部存储器1206可以是易失性或非易失性存储器,并且也可以是安全和/或加密的存储器,或者不安全和/或未加密的存储器,或它们的任何组合。可利用的存储器类型的示例包括但不限于DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式DRAM。触摸屏控制器1204和处理器1202还可以耦接到触摸屏面板1212,诸如电阻感测触摸屏、电容感测触摸屏、红外感测触摸屏等。另外,移动计算设备1200的显示器不需要具有触摸屏功能。

移动计算设备1200可以具有一个或多个彼此耦接和/或耦接到处理器1202的无线电信号收发器1208(例如,Peanut、蓝牙、ZigBee、Wi-Fi、RF无线电)和天线1210,用于发送和接收通信。收发器1208和天线1210可以与上述电路一起使用以实现各种无线传输协议栈和接口。移动计算设备1200可以包括蜂窝网络无线调制解调器芯片1216,其能够经由蜂窝网络进行通信并且耦接至处理器。

移动计算设备1200可以包括耦接到处理器1202的外围设备连接接口1218。外围设备连接接口1218可以单独配置为接受一种类型的连接,或者可以配置为接受各种类型的物理和通信连接,公用或专用,诸如通用串行总线(USB)、火线、雷电或PCIe。外围设备连接接口1218也可以耦接到类似配置的外围设备连接端口(未示出)。

移动计算设备1200还可包括用于提供音频输出的扬声器1214。移动计算设备1200还可包括由塑料、金属或材料的组合构造的壳体1220,用于容纳本文所述的全部或一些部件。移动计算设备1200可以包括耦接至处理器1202的电源1222,诸如一次性或可充电电池。可充电电池还可以耦接到外围设备连接端口,以从移动计算设备1200外部的源接收充电电流。移动计算设备1200还可包括用于接收用户输入的物理按钮1224。移动计算设备1200还可包括用于开启和关闭移动计算设备1200的电源按钮1226。

可以在包括笔记本计算机1300的各种计算系统中实现各种实施例(包括但不限于上述参照图1-图11描述的实施例),其在图13中示出了示例。许多笔记本计算机包括用作计算机的指示设备的触摸板触摸表面1317,并且因此可以接收类似于在配备有触摸屏显示器的计算设备和如上所述上实现的的拖动、滚动和轻点手势。笔记本计算机1300通常将包括耦接到易失性存储器1312和大容量非易失性存储器(诸如,闪存的磁盘驱动器1313)的处理器1311。另外,计算机1300可以具有用于发送和接收可以连接到无线数据链路的电磁辐射的一个或多个天线1308,和/或耦接到处理器1311的蜂窝电话收发器1316。计算机1300还可包括耦接到处理器1311的软盘驱动器1314和光盘(CD)驱动器1315。在笔记本配置中,计算机外壳包括均耦接至处理器1311的触摸板1317、键盘1318和显示器1319。如众所周知的,计算设备的其他配置可以包括耦接到处理器(例如,经由USB输入)的计算机鼠标或轨迹球,其也可以与各种实施例结合使用。

各种实施例(包括但不限于上述参考图1-图11描述的实施例)也可以在诸如各种市售服务器中的任何一种的固定计算系统中实现。在图14中示出了示例服务器1400。这样的服务器1400通常包括耦接到易失性存储器1402和大容量非易失性存储器(诸如磁盘驱动器1404)的一个或多个多核处理器部件1401。如图14中所示,可以通过将多核处理器部件1401插入到部件的机架中来将其添加到服务器1400。服务器1400还可包括耦接到处理器1401的软盘驱动器、光盘(CD)或数字多功能盘(DVD)盘驱动器1406。服务器1400还可以包括耦接到多核处理器部件1401的网络接入端口1403,用于建立与网络1405的网络接口连接,诸如耦接到其他广播系统计算机和服务器的局域网、因特网、公共交换电话网,和/或蜂窝数据网络(例如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或任何其他类型的蜂窝数据网络)。

用于执行各种实施例的操作的可编程处理器上的计算机程序代码或“程序代码”可以用高级编程语言编写,诸如C、C++、C#、SmallTalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl,或其他各种编程语言。如在本申请中使用的,存储在计算机可读存储介质上的程序代码或多个程序代码可以指处理器可以理解其格式的机器语言代码(诸如目标代码)。

前述方法描述和过程流程图仅作为说明性示例而提供,无意于要求或暗示各种实施例的操作必须以所呈现的顺序执行。如本领域技术人员将理解的,前述实施例中的操作顺序可以以任何顺序执行。诸如“此后”、“然后”、“接下来”等的词语无意限制操作的顺序。这些词仅用于指导读者进行方法的描述。此外,例如,使用冠词“一”、“一个”或“该”以单数形式对权利要求要素的任何引用均不应被解释为将要素限制为单数形式。

结合各种实施例描述的各种说明性逻辑框、模块、电路和算法操作可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,上面已经大体上根据其功能描述了各种说明性部件、框、模块、电路和操作。将这种功能性实现为硬件还是软件取决于特定的应用和施加在整个系统上的设计约束。技术人员可以针对每个特定应用以各种方式来实现所描述的功能,但是这种实现决定不应被解释为导致脱离权利要求的范围。

用于实现结合本文所公开的实施例描述的各种说明性逻辑、逻辑框、模块和电路的硬件可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑设备、分立门或晶体管逻辑、分立硬件部件或设计用于执行本文所述的功能的它们的任何组合来实现或执行。通用处理器可以是微处理器,但是替代的,该处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器也可以实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、与DSP核结合的一个或多个微处理器,或任何其他这样的配置。替代地,可以通过特定于给定功能的电路来执行一些操作或方法。

在一个或多个实施例中,可以以硬件、软件、固件或它们的任意组合来实现所描述的功能。如果以软件实现,则功能可以作为一个或多个指令或代码存储在非暂时性计算机可读介质或非暂时性处理器可读介质上。本文公开的方法或算法的操作可以体现在可以驻留在非暂时性计算机可读或处理器可读存储介质上的处理器可执行软件模块中。非暂时性计算机可读或处理器可读存储介质可以是可由计算机或处理器访问的任何存储介质。作为示例但不限于,此类非暂时性计算机可读或处理器可读介质可包括RAM、ROM、EEPROM、闪存、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备,或任何可用于以指令或数据结构的形式存储所需的程序代码并可由计算机访问的其他介质。本文使用的磁盘和光盘包括光碟(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式复制数据,而光盘则通过激光光学方式复制数据。上述的组合也包括在非暂时性计算机可读和处理器可读介质的范围内。另外,方法或算法的操作可以作为非暂时性处理器可读介质和/或计算机可读介质上的代码和/或指令的一个或任何组合或集合而驻留,其可以被并入计算机程序产品中。

提供对所公开的实施例的前述描述以使本领域的任何技术人员能够做出或使用权利要求。对这些实施例的各种修改对于本领域技术人员将是显而易见的,并且在不脱离权利要求的范围的情况下,本文中定义的一般原理可以应用于其他实施例和实现。因此,本公开不旨在限于本文描述的实施例和实现,而是与符合以下权利要求以及本文公开的原理和新颖性特征的最广范围相一致。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号