一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于实现低等待时间引导性能的固件引导任务分发的制作方法

2022-04-09 04:46:04 来源:中国专利 TAG:

用于实现低等待时间引导性能的固件引导任务分发
相关申请的交叉引用
1.本技术要求2020年10月2日提交的印度专利申请第202041042915号的优先权。
技术领域
2.实施例总体上涉及增强的固件更新。更具体地,实施例涉及其中单件(singleton)过程(诸如固件更新等等)可被标识并且与其他引导过程任务并发地执行的固件引导过程,以减少引导流程等待时间并且还减少计算资源。


背景技术:

3.一些应用和计算架构可寻求实现减少的或接近瞬时的系统引导时间。引导过程可包括对诸如基本输入/输出系统(bios)、统一可扩展固件接口(uefi)、芯片上系统(soc)固件(例如,硅硬件)、平台固件等之类的固件的更新。尤其在引导时间期间,由于高等待时间操作和串行操作,对固件的更新可能阻碍系统性能。例如,固件更新可在其中整个引导过程采用顺序的次序的引导路径期间发生,并且由此,可能难以(如果并非不可能)满足系统固件可以能够在期望的时间窗口(例如,少于500毫秒-1秒)内完成所有的设备(例如,soc和平台)固件过程和/或更新(例如,测量固件组件、验证固件组件、将固件加载到设备中、回读固件版本以确保成功的固件更新)的等待时间期望。
附图说明
4.通过阅读以下说明书和所附权利要求书并通过参考以下附图,实施例的各种优势对本领域技术人员将变得显而易见,在附图中:
5.图1是根据实施例的知情(informed)引导过程的示例的过程;
6.图2是根据实施例的可在多线程环境和/或单线程环境中执行的引导过程的方法的示例的流程图;
7.图3是根据实施例的、可至少基于先前的引导数据来执行的信息性(informative)引导过程的方法的示例的流程图;
8.图4是根据实施例的执行常规引导过程的方法的示例的流程图;
9.图5是根据实施例的执行与固件更新模式相关联的引导过程的方法的示例的流程图;
10.图6是根据实施例的执行与自调谐相关联的引导过程的方法的示例的流程图;
11.图7是根据实施例的解耦的通信流的示例的示意图;
12.图8是根据实施例的通信过程的示例的过程;
13.图9是根据实施例的监视器的示例的示意图;
14.图10是根据实施例的存储器架构的示例的示意图;
15.图11是根据实施例的计算系统的示例的框图;
16.图12是根据实施例的半导体设备的示例的图示;
17.图13是根据实施例的处理器的示例的框图;以及
18.图14是根据实施例的基于多处理器的计算系统的示例的框图。
具体实施方式
19.一些架构在固件引导过程中可能缺乏信息性来使得引导加载程序或固件软件(例如,固件支持包[fsp])有效地使用现有的处理器能力和系统资源来启动soc元件和/或平台设备。例如,整个引导过程的更新和/或初始化过程可在单线程环境中在单个引导捆绑处理器(bsp)上(甚至在多核变得可用之后)发生。由于等待顺序的固件更新、硬件初始化和/或代码执行完成,此类效率低下的引导过程具有增加的引导等待时间。由此,此类引导过程导致固件和/或引导加载程序在bsp上完成执行的等待时间延长。此外,由于增加的复杂性、对多线程环境的适配和/或增加的相互通信的困难性,整个引导过程在多线程环境中的执行可能不必要地消耗该引导过程的在单线程环境中将更高效的部分中的资源。
[0020]
现在转向图1,一些实施例包括其中一些引导阶段可在单线程环境中运行并且其他引导阶段可在多线程环境中运行的灵活引导管理过程100。与仅在单线程环境中执行的引导过程或仅在多线程环境中执行的引导过程相对,通过在单线程环境与多线程环境之间交替,过程100可减少等待时间,同时还精简操作并降低功耗。而且,各种任务和阶段可被分解,以跨处理器核阵列执行,处理器核诸如第一处理器核114、第二处理器核124、第三处理器核126和第四处理器核128。
[0021]
也就是说,一些实施例通过标识场景、经由运行可与引导加载程序任务(例如,与平台设备相关联的引导阶段任务)并发执行的单件任务(例如,对soc上的硅组件的固件更新)来在引导过程中发起并发性而实现了知情引导过程。引导加载程序120可在计算系统中作为上下文主控方操作以在固件任务与引导加载程序之间分配资源(例如,处理器核)。例如,引导加载程序120(例如,bios、uefi等)可访问标识何时在多线程环境中发起操作的数据结构。该数据结构可被称为信息性增强表(iet)并且可在先前引导过程的先前执行和/或系统的操作系统(os)的执行期间进行设置。灵活引导管理过程100可被称为第一引导过程,并且先前引导过程可被称为第二引导过程。先前引导过程(例如,硬引导、软引导、热引导、冷引导等)可在灵活引导管理过程100(例如,第一引导过程和/或当前引导过程)之前已经执行并完成以加载os,并且增强可基于在先前引导过程期间标识的等待时间而被标识,以增强灵活引导管理过程100(例如,在多个线程中执行更长等待时间的固件过程)。例如,先前引导过程可能完成,以引导系统加载os。此后(例如,在os通过先前引导过程被加载之后),系统可被置于不同的状态(例如,模式切换、睡眠状态、休眠状态、软关机状态、机械关机状态等)。灵活引导管理过程100随后可开始执行,以从该不同的状态引导至全操作状态(例如,引导至全操作os以供用户使用),从而基于iet来选择性地将一些过程应用于多线程环境中。例如,固件或os中的一者或多者可基于对先前引导过程的分析来设置iet,以指示用于启动硬件设备的固件更新或固件执行中的一者或多者可在先前引导过程之后的引导过程中在多线程环境中被执行。例如,如果固件被标识为在先前引导过程期间具有高于阈值的执行等待时间,则iet可被设置为指示在随后的引导过程期间固件将在多线程环境中被初始化和执行。iet还可包括固件要在多线程环境中被更新的指示。引导加载程序120可进一步解决存储器分配(例如,利用不同级别和类型的高速缓存和/或存储器),以避免在预
存储器(pre-memory)阶段没有充足的存储器来并行地执行操作。由此,引导过程100可包括多线程固件执行以减少硬件初始化时间,和/或与平台设备固件更新和硬件初始化并行地执行soc固件更新和硬件初始化以减少固件更新和初始化时间,从而减少引导过程的整体等待时间。值得注意的是,并非所有过程均被设置在多线程环境中。相反,仅被标识为在先前引导过程期间具有较长等待时间的那些过程可在过程100期间在多线程环境中执行,而其他较低等待时间的过程可在单线程环境中执行。
[0022]
在图1中,从时间t0至t1(例如,第一时间段),单线程环境操作,而从时间t1至t2(例如,第二时间段),多线程环境操作。在时间t0至t1期间,计算系统可在第一处理器核114上执行第一引导阶段102。例如,第一引导阶段102可从系统的存储(例如,引导块、引导扇区或分区)加载引导加载程序,以对该系统进行引导。此类操作可在其他固件更新之前被执行,并且初始化可并行地发生,并且由此在单线程环境中执行以避免不需要的多线程操作。
[0023]
此后,在时间t1时,过程100可根据iet标识与固件相关联的过程可在多线程环境中并行地执行以增强性能并减少整体引导时间。由此,系统可切换至多线程环境,在该多线程环境中,第一处理器核114、第二处理器核124、第三处理器核126和第四处理器核128可在用于soc组件的与固件相关联的任务与其他引导阶段任务之间划分。例如,引导加载程序可分派第一处理器核114、第二处理器核124、第三处理器核126和第四处理器核128要么用于执行与soc相关联的固件更新要么执行其他引导阶段任务,并且按需要进行重新分配。
[0024]
在一些实施例中,第一处理器核114可与bsp相对应,并且执行第一固件任务104来发起多线程环境。此后,第一处理器核114可执行包括用于soc外部和/或通信地耦合至soc的平台组件的固件任务的引导阶段任务。第二处理器核124、第三处理器核126和第四处理器核128可在多线程环境中执行引导阶段任务或固件任务(例如,硬件的初始化和/或对固件的更新)。在该示例中,第一处理器核114和第二处理器核124可被关联至(例如,和/或专用于)引导加载程序任务来执行引导阶段任务(包括固件平台初始化),而第三处理器核126和第四处理器核128可被分派至和/或专用于执行soc固件任务。
[0025]
在多线程环境中,操作可并行地运行。例如,第一固件任务104可在第一处理器核114上执行。连同任何其他早期初始化一起,第一固件任务104可初始化暂时的随机存取存储器(ram)。
[0026]
第二引导阶段(例如,诸如动态随机存取存储器之类的存储器的初始化和用于平台设备启动的准备)可被划分为第一任务子集和第二任务子集。第一任务子集可被图示为第二引导阶段任务106a,并且第二任务子集可被图示为第二引导阶段任务106b。第一任务子集可不同于第二任务子集。与第一固件任务104在第一处理器核114上的执行并发地,第二引导阶段任务106a可在第二处理器核124上执行。在第一固件任务104已经在第一处理器核114上完成之后,第一处理器核114可执行第二引导阶段任务106b。第二引导阶段任务106a和第二引导阶段任务106b可在某个时间段内并发地执行。
[0027]
第二固件更新和/或执行(例如,连同任何其他早期硅初始化一起初始化永久性存储器,可以是固件支持包)可被划分为第一任务子集(被称为第二固件任务108a)和第二任务子集(被称为第二固件任务108b)。第二固件任务108a可在第三处理器核126上执行,并且第二固件任务108b可在第四处理器核128上执行。如所图示,第二引导阶段任务106a、第二引导阶段任务106b、第二固件任务108a和第二固件任务108b可在第一处理器核114、第二处
理器核124、第三处理器核126和第四处理器核128上并发地执行。
[0028]
在第二引导阶段任务106a完成之后,第二处理器核124可执行第三引导阶段110(例如,拆除在早期引导阶段期间利用的高速缓存即ram架构并加载ram阶段)。第三固件更新和/或任务(例如,完成硅初始化,包括中央处理单元(cpu)和输入/输出(i/o)控制器初始化)可被划分为第一任务子集(可被称为第三固件任务112a)和第二任务子集(可被称为第三固件任务112b)。第三处理器核126可执行第三固件任务112a,而第四处理器核128并发地执行第三固件任务112b。如所图示,第三引导阶段110、第二引导阶段任务106b、第三固件任务112a和第三固件任务112b可并发地执行。
[0029]
第四引导阶段(例如,主设备启动,诸如外围组件互连(pci)设备启动、受信任平台模块启动、图形器件启动和/或等等)可被划分为第一任务子集(可被称为第四引导阶段任务130a)和第二任务子集(可被称为第四引导阶段任务130b)。第四引导阶段任务130a可在第一处理器核114上执行,并且第四引导阶段任务130b可在第二处理器核124上执行。如所图示,第四引导阶段任务130a、第四引导阶段任务130b、第三固件任务112a和第三固件任务112b可并发地执行。
[0030]
在时间t2时,引导加载程序120可继续执行。例如,引导加载程序120可将在引导过程期间生成的内核引导分区缓冲器传递并引导至操作系统116。此后,操作系统116可在时间t3时被加载。
[0031]
由此,如上文所说明,过程100可在单线程环境到多线程环境之间无缝地转变,以减少的等待时间高效地加载操作系统116。与完全单线程的引导过程相对,这样做可显著减少加载时间,并且可以减少由完全多线程的引导过程引起的低效性(例如,软件复杂性和通信困难性)。
[0032]
例如,在完全单线程的引导过程环境中,固件初始化(例如,soc固件)在引导加载程序在bsp上执行时可以是空闲的,并且同样地,引导加载程序在soc固件在bsp上执行时可以是空闲的。此类串行化的过程导致分立且串行的平台初始化,其中每个独立的设备(例如,处理器核)初始化和/或更新等待相应的执行时间或轮次(例如,串行地)。而且,由于并非所有计算资源均被利用,因此串行地操作每个固件更新可能是对处理器能力的低效率使用。这样做导致平台引导时间更高、对资源的使用效率低下并且用户体验不佳。随后,用户可能规避对固件更新进行接受,这可能导致更新被规避,从而可能导致有害的性能(诸如,平台安全性问题)。
[0033]
进一步地,在完全多线程引导过程环境中,一些静态任务可在并行线程上执行,但多线程引导的默认静态性质可能增加复杂性并使其他方面(例如,调试、开发、通信、管理并发性、移植现有代码、切换上下文的开销等)复杂化。由此,一些实施例包括信息性引导过程,该信息性引导过程避免使平台完全多线程或完全单线程执行,除非从上文所引用的iet数据结构标识出优势。本文中所描述的一些方面可在一个应用编程接口系统中实现。
[0034]
图2示出进行引导过程的方法300,该引导过程可在多线程环境中执行、在单线程环境中执行、或者在多线程环境与单线程环境之间交替。一般而言,方法300可在计算系统中实现和/或与过程100(图1)结合实现。更具体地,方法300可采用一组逻辑指令而被实现为一个或多个模块,这些逻辑指令被存储在诸如随机存取存储器(ram)、只读存储器(rom)、可编程rom(prom)、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如可
编程逻辑阵列(pla)、fpga、复杂可编程逻辑器件(cpld)的可配置逻辑中,存储在使用诸如例如专用集成电路(asic)、互补式金属氧化物半导体(cmos)或晶体管-晶体管逻辑(ttl)技术之类的电路技术的固定功能硬件逻辑中,或存储在上述各项的任何组合中。
[0035]
所图示的处理框302在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是多线程过程中发生。处理框310确定该至少一个任务是否被设置为在多线程环境中发生(例如,参照iet)。如果是(例如,响应于该至少一个任务被设置为在多线程过程中发生),则所图示的处理框304在第一引导过程期间在多线程过程中执行该至少一个任务。当处理框310确定该至少一个任务并非在多线程环境中执行(例如,响应于该至少一个任务被设置为在单线程过程中发生而执行)时,所图示的处理框306在第一引导过程期间在单线程过程中执行该至少一个任务。在一些实施例中,至少一个软件程序是与芯片上系统相关联的固件。
[0036]
方法300的一些实施例包括:在第一引导过程的第一部分期间,在单线程过程中执行至少一个引导操作,并且在第一引导过程的第二部分期间,在多线程过程中执行至少一个任务。方法300的一些实施例包括:在第一引导过程期间标识至少一个任务将在多线程过程中发生,使soc的主机处理器的第一组处理器核专用于该至少一个任务,以及使主机处理器的第二组处理器核专用于与通信地连接至soc的硬件设备相关联的固件执行。
[0037]
方法300的一些实施例包括:在第二引导过程期间确定执行至少一个任务的时间量,基于该时间量确定至少一个任务将在多线程过程中被更新,将至少一个任务将在多线程过程中发生的标识存储至数据结构,在第一引导过程期间访问该数据结构以标识至少一个任务将在多线程过程中发生,以及在第一引导过程期间在多线程过程中执行该至少一个任务。在方法300的一些实施例中,至少一个任务包括至少一个软件程序的更新或执行中的一项或多项。
[0038]
图3示出至少基于先前引导数据来进行信息性引导过程的方法350。一般而言,方法350可在计算系统中实现和/或与已讨论的过程100(图1)和/或方法300(图2)结合实现。
[0039]
更具体地,方法350可以采用一组逻辑指令而被实现为一个或多个模块,这些逻辑指令被存储在诸如ram、rom、prom、固件、闪存等之类的机器或计算机可读存储介质中,被存储在诸如例如pla、fpga、cpld之类的可配置逻辑中,被存储在使用诸如例如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或被存储在以上各项的任何组合中。
[0040]
方法350可以是知情引导过程,通过对各种场景的分析和理解而经由运行可与引导过程并发地执行的单件任务来发起引导过程中的并发性。引导加载程序可作为上下文主控方操作来分配处理器核。例如,在方法350的第一部分中,平台基本输入/输出系统(bios)可被装配有用于标识何时在多线程环境中发起操作的信息。
[0041]
由此,一些实施例可使用所有的可用处理核(例如,多核处理器)并行地执行整个平台固件初始化和更新。这样做可显著减少固件更新等待时间,并增加系统不会由于固件更新的错误或对此类更新的规避而停止服务的可能性。一些实施例可进一步使用信息性多核环境来定义引导加载程序与soc固件(例如,fsp)之间新的通信流,以在最期望效率时确保并行执行以进行更快的引导过程。由此,一些实施例可包括通过预测何时发起多线程引导以优化引导时间来实现的投机性平台引导。
[0042]
所图示的处理框352可包括执行重启(power cycle)(例如,系统重置),这可能引
起引导加载程序进行加载。在所图示的处理框354中,控制可被传递至引导加载程序,该引导加载程序可读取iet。例如,引导加载程序可在先前引导期间使用实时时钟(rtc)和/或cmos块高位存储器(例如,128位)创建iet,并且随后可在os的先前执行期间通过运行时服务作出信息性决策。先前引导可被称为第二引导过程。先前引导可能已经完成以将系统引导至os。所图示的处理框352可在os(通过第二引导过程引导至os)可能正在执行以引起对系统的重新启动时对系统进行重启,并执行方法350。方法350可被称为第一引导过程。一些实施例可能不发起多线程引导,除非过程检测到引导性能等待时间减少和性能增强的特定模式或机会。
[0043]
例如,为了使引导加载程序(例如,诸如bios或uefi之类的固件)信息性地且高效地作出决策,该引导加载程序可具有从操作系统(os)层到运行时服务层(例如,诸如bios或uefi之类的固件)的学习馈送,以接收对高效多线程操作的标识。例如,引导加载程序可执行平台初始化并引导至os。如果此类操作将仅用于在单线程环境中执行,则决策和分析流程可能导致较高的等待时间。
[0044]
由此,一些实施例可依赖于os环境,其中可使用运行时服务(例如,bios或uefi)来执行一些(如果并非全部)分析和决策作出并将该分析和决策存储在要在下一引导(例如,第一引导过程)期间被访问的iet(例如,数据结构)中。引导加载程序可访问iet以及该iet中包含的信息,以确定何时执行多线程环境。
[0045]
为了促进os层与下层(例如,bios或uefi)之间以及下层与os层之间的此类决策作出和存储过程,一些实施例可访问用于存储iet的基于硬件的存储器(例如,cmos存储器和/或rtc存储器),该基于硬件的存储器跨引导周期保持可用并且在平台重启期间也是持久性的。在引导期间,引导加载程序可以将iet结构分配到持久性存储器中。在os被加载时进行引导之后,iet结构可被访问并被修改为包括多线程引导过程在接下来的引导周期期间是否为优选的指示。下文提供了实现iet的伪代码,其中“feedc0de”为表签名:
伪代码1
[0046]
所图示的处理框356可验证iet是否有效。例如,处理框356可读取iet的签名来标识该签名是否有效。如果签名能够被验证,则iet可能是有效的。如果签名是无效的,则iet可能不是有效的。
[0047]
由此,如果iet是无效的,则所图示的处理框366可在不进行进一步的修改的情况下执行常规引导过程,以规避在单线程模式与多线程模式之间进行切换(例如,仅执行单线程模式或者仅处于多线程模式下,而不在此之间切换)。如果iet是有效的,则所图示的处理框358确定是否存在足够的存储可用于执行经修改的引导过程以执行多线程引导。
[0048]
例如,多线程引导可在所有的存储器和存储资源均可用之前(例如,dram资源不可用)被执行。在早期引导(例如,用于更新微代码、安全性固件和功率管理控制器固件或受信任平台管理器)时可能涉及的一些组件可在多线程环境中被执行,以供进行并行的执行。在不存在允许所有的核均可用于执行针对信息性引导过程的并行操作的专用存储器的情况下,一些实施例可提供预初始化的存储器的替代方案。一些实施例可包括为如一些实施例中所描述的信息性引导使用提供充足的存储器的硬件修改。例如,一些实施例可访问较低级别的高速缓存(例如,l4高速缓存),以相较于dram访问减少存储器访问的等待时间。一些实施例可进一步使用在最新soc管芯上可用的包高速缓存作为静态ram(sram),以供在不具有任何进一步的初始化的情况下进行固件访问。一些实施例可包括可用作较低级别的高速缓存(llc)的部分的包高速缓存,以供固件在不存在物理存储器的情况下通过执行存储器初始化流程来使用。由此,一些实施例可与dram存储器初始化无关,以便在dram被初始化之前引入处理核。
[0049]
如果充足的存储并不可用,则处理框366执行。在一些实施例中,如果处理框358确定存储并不可用(例如,用于发起多线程环境的预请求不可用),则方法350可再次执行处理框354(例如,返回至该分析,并再次执行该过程,直到存储器可用)。
[0050]
否则,所图示的处理框360可再次引用iet来检测在该iet中固件更新模式是否被选择。详细地说,iet可包括与固件更新模式相对应的预测是否被设置的标识(例如,来自对os的先前引导)。例如,在os的先前执行期间,os可能已经确定外围组件、soc组件或其他设备的固件要被更新。运行时固件(例如,bios运行时或uefi运行时)可置位iet中的固件更新请求位,以指示外围设备或其他设备的固件在下一引导周期期间要被更新。如果iet中的固件更新请求位被置位,则处理框362在多线程环境中执行固件更新模式。
[0051]
否则,所图示的处理框368确定自调谐模式是否被选择。处理框368可参照iet来进
行这一点(例如,如果iet包含要参与自调谐模式的指示,则执行自调谐模式)。如果是,则所图示的处理框364在多线程环境中执行自调谐模式,以选择性地并行执行一些固件任务。自调谐模式可通过iet而被设置为在引导过程(例如,固件执行以及与固件相关联的硬件的初始化)具有高于阈值的等待时间(如在先前引导过程期间所标识)的情况下执行。
[0052]
例如,在平台引导至os之后,运行时服务可分析引导性能数据,以进行信息性调用来增强平台引导时间。在引导过程期间,可将各个固件的定时记录为固件条目。在引导之后,如果固件条目的任何引导性能均具有超出阈值(例如,约100ms)的所记录的执行时间,则该固件条目的固件可以有资格进行信息性引导增强(例如,自调谐模式可被设置,以在接下来的引导周期期间并行地执行该固件)。被标识为具有高于阈值的定时的固件可被记录(在引导后)在iet中。处理框368可访问iet,以读取并标识基于先前的等待时间高于阈值而在引导过程期间要并行地执行的(多个)固件。
[0053]
如果自调谐模式未被选择,则处理框366执行常规引导模式。值得注意的是,处理框366可执行对固件的更新。由于处理框362已经更新了固件,因此当处理框362执行时,由处理框366进行的此类更新可被省略。
[0054]
如果自调谐模式被选择,则处理框364在多线程环境中执行自调谐模式。所图示的处理364引导至os并利用运行时服务来更新iet。此类方面在上文进行描述。一些实施例可在引导框中提供对cpu资源(核)的增强的且更多的使用。一些实施例可执行并行的设备初始化和/或固件更新框,以减少引导时间并支持更快的引导过程。
[0055]
另外,方法350的一些实施例可在模式切换期间被执行,诸如,当用户从“正常”模式切换到“开发者”模式或“恢复”模式时,执行“能力清洗”以恢复出厂设置,其中底层bios必须初始化附加的调试控制器(xhci、xdci、dam)或重新调校存储器控制器处于固定的引导预算内。由此,处理框352可被切换模式、能力清洗等代替。在其他示例中,整个引导可在仅在引导捆绑处理器(bsp)上运行的单线程环境中发生(例如,即使在自cpu起约650ms后多核变得可用之后)。
[0056]
图4示出根据一些实施例的执行常规引导过程的方法370。方法370一般可以替代处理框366(图3)。更具体地,方法370可以采用一组逻辑指令而被实现为一个或多个模块,这些逻辑指令被存储在诸如ram、rom、prom、固件、闪存等之类的机器或计算机可读存储介质中,被存储在诸如例如pla、fpga、cpld之类的可配置逻辑中,被存储在使用诸如例如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或被存储在以上各项的任何组合中。
[0057]
如所图示,固件初始化和更新固件程序372(例如,固件支持包程序和/或更新程序)及引导程序374可负责引导计算设备,并且动作在执行该动作的行为方下方被列出。例如,固件程序372可负责对soc固件的更新和对soc硬件组件进行初始化,这些soc硬件组件诸如包括处理器、存储器控制器、芯片组和某些总线接口的硅组件。引导程序374可初始化并更新平台固件(例如,非soc设备),配置引脚多路复用和引脚设置(例如,摆率、电压、以及上拉/下拉),配置时钟树中的时钟,初启并校准存储器(诸如sdram、ram、rom等),初始化闪存,从存储器(例如,闪存)加载os,并且将控制传递至os。
[0058]
所图示的处理框376包括引起ram上高速缓存可用性的引导程序374。任选地,固件程序372可执行处理框378,以执行ram上高速缓存可用性。将理解,在一些实施例中,可执行
处理框378并可绕过处理框376。所图示的处理框380包括引导加载程序调用存储器初始化(例如,dram)。所图示的处理框382对存储器进行初始化。所图示的处理框384调用对硬件组件的初始化。作为响应,所图示的处理框386对硬件组件进行初始化。所图示的处理框388调用通知阶段并且可进一步对外围组件互连(pci)进行枚举。作为响应,所图示的处理框390对阶段(例如,固件的结束、准备好引导、pci枚举之后)进行通知。所图示的处理框392加载操作系统。所图示的处理框394基于在方法370和/或固件更新期间标识的等待时间将运行时服务更新至如本文所描述的iet。
[0059]
值得注意的是,在一些实施例中,固件程序372也可按需要更新固件。例如,如果处理框362(图3)已经被绕过,则固件程序372可按需要更新固件。如果处理框362(图3)已经执行,则固件更新可被绕过。
[0060]
图5示出根据一些实施例的执行与固件更新模式相关联的引导过程的方法400。方法400一般可以替代处理框360(图3)。更具体地,方法400可以采用一组逻辑指令而被实现为一个或多个模块,这些逻辑指令被存储在诸如ram、rom、prom、固件、闪存等之类的机器或计算机可读存储介质中,被存储在诸如例如pla、fpga、cpld之类的可配置逻辑中,被存储在使用诸如例如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或被存储在以上各项的任何组合中。
[0061]
如所图示,soc固件更新程序402(例如,用于soc设备的固件支持包程序和/或更新程序)及引导程序404可负责引导计算设备,并且动作在执行该动作的行为方下方被列出。例如,soc固件更新程序402可负责对用于硅组件的soc固件的更新,这些硅组件包括处理器、存储器控制器、芯片组和某些总线接口。引导程序404可配置其他平台设备(例如,非soc设备),诸如,引脚多路复用和引脚设置(例如,摆率、电压、以及上拉/下拉),配置时钟树中的时钟,初启并校准存储器(诸如sdram、ram、rom等),初始化闪存,从存储器(例如,闪存)加载os,并且将控制传递至os。
[0062]
如下文所讨论,方法400可涉及信息性任务调度和资源分配(例如,cpu资源等)以减少引导时间。例如,方法400可以是信息性多线程bios实施例。
[0063]
最初,引导程序404(例如,引导加载程序)执行所图示的处理框406,以分配处理器核。例如,引导程序404可将主机处理器的每个处理器核分配给引导程序404或soc固件更新程序402。在一些实施例中,引导程序404可标识核的数量,以高效地并行执行引导程序404和soc固件更新程序402的操作。引导程序404可进一步设置某些字段(例如,可更新产品数据),以允许引导程序404在硅固件更新正在其他处理器(例如,应用处理器)上执行的情况下在至少一个处理器(例如,引导捆绑处理器)上执行平台固件更新。
[0064]
所图示的处理框408在多线程环境中更新平台存储器固件。所图示的处理框410在多线程环境中更新soc存储器的固件。所图示的处理框412在多线程环境中更新平台硬件组件固件。所图示的处理框414在多线程环境中更新soc硬件组件的固件。所图示的处理框416在多线程环境中更新平台外围组件的固件。所图示的处理框418更新固件,以对阶段(例如,固件的结束、准备好引导、pci枚举之后)进行通知。处理框420可初始化经更新的固件和相关联的硬件。将理解,如果对应的固件不需要更新,则前述处理框406、408、410、412、414、416、418中的一者或多者可被省略。
[0065]
在一些实施例中,方法400可引导至os。在一段时间(例如,在登录到os用户界面
和/或控制台之后约20秒)之后,运行时服务可自动触发,以重置固件更新是期望的pet表指示(例如,重置“fw_update(固件_更新)”变量)。此后,如果固件更新在接下来的引导周期期间是期望的,则iet表可被置位。
[0066]
图6示出根据一些实施例的执行与自调谐相关联的引导过程的方法448。方法448一般可以替代已经讨论过的处理框368(图3)。更具体地,方法448可以采用一组逻辑指令而被实现为一个或多个模块,这些逻辑指令被存储在诸如ram、rom、prom、固件、闪存等之类的机器或计算机可读存储介质中,被存储在诸如例如pla、fpga、cpld之类的可配置逻辑中,被存储在使用诸如例如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或被存储在以上各项的任何组合中。
[0067]
如所图示,两个不同的行为方可引导计算设备。例如,soc固件初始化446(例如,固件支持包程序和/或更新程序)和引导程序444可负责引导计算设备。动作在执行该动作的行为方下方列出。
[0068]
一些实施例涉及自调谐固件引导增强。例如,在到os的第一平台引导之后,运行时服务(例如,bios)可执行引导性能分析,以标识是否存在某些引导条目可并行地执行来减少平台引导时间。此类引导性能分析可以是自调谐或自学习的,并且可包括预先定义的训练参数(例如,“减少具有》100ms的执行时间的条目的引导时间”)。此类训练数据可作为os可升级脚本的部分而被检取,并且如果对于某些平台而言引导时间增强目标更加激进(例如,物联网相较于客户端设备),则可启用修改。
[0069]
例如,运行时服务可创建要被增强的固件程序的引导条目列表(例如,写入到作为iet表的部分的唯一条目,诸如“buffer[](缓冲器[])”数据变量),并置位指示固件程序要并行地执行的位(例如,“self_tuning_boot(自_调谐_引导)”位)。该位可向引导阶段传达引导条目列表可用,以使得引导过程进入自调谐模式来读取引导条目列表。例如,处理框368(图3)和/或方法448可读取iet的“self_tuning_boot”位,以确定自调谐模式是否被选择。
[0070]
由此,在下一连续引导期间,在确保iet表有效之后,引导阶段可提取iet表,读取“self_tuning_boot”位以确定固件要通过并行地执行而被增强,并且读取引导条目列表以标识固件列表。此类过程在下文进行描述,并且响应于iet表包括固件要并行地被执行的指示。
[0071]
与上文参考图5所描述的类似,引导程序444可执行所图示的处理框426,以在soc固件初始化446与引导程序444之间分配所有可能的核或核的子集。一些实施例可通读iet的引导增强条目列表(缓冲器[0..n])并确定每个固件是与引导程序444还是与要通过soc固件初始化446执行的soc相关联。基于上文的决策,引导程序444可在引导程序444与soc固件初始化446之间分派多核划分,以使得引导程序444和soc固件初始化446中的每一者均可有效地执行固件。例如,如果针对增强的引导条目仅对应于soc固件初始化446,则引导程序444(例如,引导加载程序)可将所有的核(包括bsp)分派给soc固件初始化446以供并行执行。相反,如果针对增强的引导条目仅对应于引导程序444,则所有的核可均被分派给引导程序444。由此,引导程序444可基于工作负荷按比例将核分派给soc固件初始化446和引导程序444。引导程序444和soc固件初始化446可继续并行地执行。
[0072]
所图示的处理框428包括在多线程环境中调用soc存储器初始化并执行平台存储
器操作。尽管未图示,但未在iet中被标识为用于多线程执行的平台存储器初始化可在单线程环境中执行。所图示的处理框430基于iet而在多线程环境中选择性地初始化soc存储器。尽管未图示,但未在iet中被标识为用于多线程执行的soc存储器可在单线程环境中执行。
[0073]
所图示的处理框432调用对硬件组件的初始化并执行平台硬件操作(例如,初始化等)。尽管未图示,但未在iet中被标识为用于多线程执行的平台硬件初始化可在单线程环境中执行。所图示的处理框434基于iet而在多线程环境中选择性地初始化soc硬件组件。尽管未图示,但未在iet中被标识为用于多线程执行的soc硬件组件可在单线程环境中执行。所图示的处理框436初始化平台外围组件。尽管未图示,但未在iet中被标识为用于多线程执行的平台外围组件初始化可在单线程环境中执行。所图示的处理框438在多线程环境中选择性地初始化固件以对阶段进行通知。尽管未图示,但未在iet中被标识为用于多线程执行的针对阶段的固件可在单线程环境中执行。
[0074]
一些实施例还可加载os。一些实施例还将运行时服务更新存储至iet。例如,在固件初始化结束时并在引导至os之后,运行时服务可再次进展至利用信息性引导对引导性能数据的分析,并且将要并行地被更新的固件存储至iet,以使得一些设备(例如,“混合式存储”、“emmc初始化”等)并行地运行,从而改善平台响应时间。
[0075]
值得注意的是,未在iet中被标识为可在多线程环境中执行的固件操作和/或初始化可在方法448之前或之后在单线程环境中执行。此外,在一些实施例中,方法400(图5)可完成执行,并且此后可直接执行方法448。
[0076]
现在转向图7,解耦的通信流480可对引导加载程序与固件之间的双向通信流进行解耦。解耦的通信流480一般可在计算系统中实现,和/或结合已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)和/或方法448(图6)来实现。
[0077]
例如,单线程环境可在第一核462上实现。第一核462可执行引导线程464。此后,第一核462可执行固件线程466。固件线程466(例如,fsp)和引导线程464可依赖于同步化468来在引导线程464与固件线程466之间传递控制。
[0078]
相比之下,多线程环境在第一核482、第二核488、第三核490和第四核496之间传递控制可能不需要此类同步化。第一核482可执行第一引导线程484,并且第二核488可执行第二引导线程486。第一引导线程484和第二引导线程486可与诸如设备平台启动之类的引导过程相关联。第三核490和第四核496可分别执行第一fsp线程492和第二fsp线程494,以更新并启动与soc相关联的固件。
[0079]
例如,一些实施例可使用专用数据结构(诸如upd)来为引导加载程序和固件提供采用线程安全机制并行地执行任务的选项(例如,不具有过多资源用于引导加载程序与固件之间的核同步化)。例如,如本文中所描述的一些实施例实现高级同步化构造作为固件内部的“监视器”类型,以由保持同步的多个核分配固件内的任务来避免任何重复访问。监视器构造确保一次仅可给予一个处理器对任务的访问权。如本文中所描述的一些实施例使用特殊指令(例如,monitor/mwait指令)来减少核操作时间与从空闲唤醒的时间之间的等待时间。如本文中所描述的固件的一些实施例使用信号标来访问fsp和/或引导加载程序内部的潜在共享资源。
[0080]
一些实施例涉及用于核同步化的底层机制。固件(例如,bios)可将单个任务(如设备初始化或更新)划分为多个子任务,并且在多个核上分派这些子任务以用于并行运行。由
此,一些实施例可采用信号标来为核同步化提供低等待时间、高效且有效的机制。一些实施例可“监视”固件504(例如,fsp)内部的核同步化的同步化构造,以确保任务一次仅由一个核尝试和执行。
[0081]
一些实施例可通过施加在任务和核两者均可用的情况下核可拾取任务的限制来进一步确保其他核并非处于饥饿中并提供无死锁解决方案。例如,一些实施例可实现用于在共享数据变量内部标识任务状态的可能状态,并且核可采用这同一种方式来标识任务是否可用于执行。
[0082]
一些实施例可包括用于实现上文的数据结构,该数据结构为“enum{waiting,signal,complete}state[n][where

n’is task count](枚举{等待,信号,完成}状态[n][其中

n’为任务计数])”。一些实施例还可包括仲裁器,该仲裁器可仅在可用的核的相关联状态对应于“等待”状态的情况下才将任务分派给该核。当监视器硬件被触发时,如果例如mwait充当nop(无操作)并且执行从接下来的指令继续,则将由指示(例如,“signal(信号)”)来标记任务状态。在完成该任务时,核将利用完成的指示(例如,“complete(完成)”)来更新任务状态。
[0083]
到指定核的地址范围(例如,monitor地址)中的可能写入可使得该核访问监视区域以标识并执行任务,并且这引起所分派的任务的状态转变。在任务完成时,在执行等待(例如,mwait)指令之前,核将使任务状态更新为“完成”。以下伪代码可说明monitor/mwait对的典型示例:eax=logical address(trigger)ecx=0(*hints*)edx=0(*hints*)task.state[i]="waiting"if(!trigger_store_happened){task.state[i]="signal"monitor eax,ecx,edxtask.state[i]="complete"mwait eax,ecx}(eax=逻辑地址(触发)ecx=0(*提示*)edx=0(*提示*)任务.状态[i]="等待"if(!触发_存储_发生){任务.状态[i]="信号"monitor eax,ecx,edx任务.状态[i]="完成"mwait eax,ecx})伪代码2
任务可仅在其全部子任务状态移至“完成”状态时才认为被完成。
[0084]
在下文进一步详细描述共享数据。一些实施例可包括数据区域,处理器间通信(ipc)变量可被存储在该数据区域来避免同步化问题,并且该数据区域可由第一核482、第二核488、第三核490以及第四核496访问。用于此种监视的共享数据的示例在开始多核操作之前被提供:任务012n状态等待等待等待等待表i
[0085]
在一些实施例中,与对soc固件的执行相关联的可用的核(例如,cpu核)(诸如,第三核490和第四核496)可由数据结构标识(诸如upd)来标识。第三核490和第四核496可获得任务,朝向任务结束进展,并更新任务状态。例如,假定第三核490正在运行任务0作为第一fsp线程492,并且第四核496已经几乎完成对第二fsp线程494的执行以完成任务1。由此,第四核496可朝向新的任务逐渐接近。以下可以是该点时共享数据变量的快照。任务012n状态信号完成等待等待表ii可提供初始化代码。例如,在开始执行操作之前,所有的任务状态可以被编程为默认值“等待”。上文的表i和表ii可被存储在存储器中以供访问。
[0086]
现在转向图8,一些实施例可涉及用于在如图8中所图示的引导程序502(例如,引导加载程序)与固件504(例如,fsp)之间传递核信息的通信方法500。方法500一般可在计算系统中实现,和/或结合已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)和/或方法400(图7)来实现。
[0087]
图8可图示出对引导程序502与固件504之间的信息性固件更新的处置。例如,引导程序502可标识可用核的数量,分派可用核,并启动固件514。核0 506可与bsp相对应,并且将核0 506和核1 508分派给引导程序502,并将核2 510和核3 512分派给固件504。
[0088]
引导程序502可在核1 508上执行平台固件过程和更新(即,516),并且附加地可在核0 506上执行固件过程和更新。固件504可比较核计数并监视地址范围(即,518),以确定和分派任务并执行soc更新(即,520)。在一些实施例中,固件504还可比较核计数来标识多线程核环境被参与,并且监视地址范围以监视处理器的写回存储以基于处理器标识而开始执行。
[0089]
例如,引导程序502可在发起引导程序502与固件504之间的并行执行之前计算可用的活跃核的数量。引导程序502在关于引导程序502的操作与关于固件504的操作之间划分活跃核。为了在并行执行期间在引导程序502与固件504之间执行线程安全机制,一些实施例可采用引导程序502和固件504向彼此通知各自利用的核的数量的策略。引导程序502可相应地重新分配核0 506、核1 508、核2 510和核3 512。例如,“多线程固件团块(blob)”可包括用于固件头部的新添加的upd,以用于对负责固件内的并行执行的核的唯一标识。
[0090]
一些实施例可包括由引导程序502填充以向固件504告知可以以线程安全方式用于固件504的核的数量的参数(例如,诸如mtcpucorecount之类的upd参数)。默认值可以是1并且对应于单线程操作。一些实施例可包括用于对供固件504利用的指定核的唯一标识的
数组(例如,诸如mtcpuapicids[n]之类的upd参数)。在上文的示例中,“n”可以是cpu索引,并且索引“n”处的值可以是标识核0 506、核1 508、核2 510和核3 512中的特定核的高级可编程中断控制器(apic)id。引导程序502可利用被分派供固件504使用的对应的cpu核(例如,apic id)来填充该数组,其中默认值为0。fsp内的默认upd变量定义可以例示如下:#!bsf name:{core count for fsp usage}type:{editnum,hex,(0x00,0xff)}(#!bsf名称:{针对fsp使用的核计数}类型:{editnum,hex,(0x00,0xff)})#!bsf help:{bootloader to tell fsp about how many cores are available for fsp usage in thread safe manner,default value would be 1,identify as single threaded operation.}(#!bsf帮助:{引导加载程序向fsp告知有多少核可以以线程安全方式用于fsp使用,默认值将为1,标识为单线程操作。})gplatformfsppkgtokenspaceguid.mtcpucorecount|*|0x01|0x01#!bsf name:{unique identification of designated cores for fsps consumption}type:{editnum,hex,(0x00,0xffffffffffffffffffffffff)}(#!bsf名称:{用于fsp消耗的指定核的唯一标识}类型:{editnum,hex,(0x00,0xffffffffffffffffffffffff)})#!bsf help:{apic id for each cpu index.bootloader will fill this upd with corresponding cpu cores apic id assigned for fsp to use.default value would be 0}(#!bsf帮助:{每个cpu索引的apic id。引导加载程序将用分派用于fsp使用的对应的cpu核apic id来填充该upd。默认值将为0})gplatformfsppkgtokenspaceguid.mtcpuapicids|*|0x0c|{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}伪代码3
[0091]
例如,考虑具有四核的平台设计。由此,引导加载程序侧的活跃cpu核计数将是4。引导程序502可分配核0 506、核1 508、核2 510和核3 512中的两个核用于其自身的执行,并且分派核0 506、核1 508、核2 510和核3 512中剩下的两个核用于固件504消耗。分派所要求的fsp-m upd以发起并行fsp执行可由以下伪代码提供:“mtcpucorecount=2,mtcpuapicids[2]=2 and mtcpuapicids[3]=3.”(“mtcpucorecount=2,mtcpuapicids[2]=2并且mtcpuapicids[3]=3。”)
[0092]
以下是经覆写的upd变量定义伪代码的示例:#!bsf name:{core count for fsp usage}type:{editnum,hex,(0x00,0xff)}(#!bsf名称:{针对fsp使用的核计数}类型:{editnum,hex,(0x00,0xff)})#!bsf help:{bootloader to tell fsp about how many cores are available for fsp usage in thread safe manner,default value would be 1,identify as single threaded operation.}(#!bsf帮助:{引导加载程序向fsp告知有多少核可以以线程安全方式用于fsp使用,默认值将为1,标识为单线程操作。})gplatformfsppkgtokenspaceguid.mtcpucorecount|*|0x01|0x02#!bsf name:{unique identification of designated cores for fsps consumption}type:{editnum,hex,(0x00,0xffffffffffffffffffffffff)}(#!bsf名称:{用于fsp消耗的指定核的唯一标识}类型:{editnum,hex,(0x00,
0xffffffffffffffffffffffff)})#!bsf help:{apic id for each cpu index.bootloader will fill this upd with corresponding cpu cores apic id assigned for fsp to use.default value would be 0}(#!bsf帮助:{每个cpu索引的apic id。引导加载程序将用分派用于fsp使用的对应的cpu核apic id来填充该upd。默认值将为0})gplatformfsppkgtokenspaceguid.mtcpuapicids|*|0x0c|{0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}伪代码4在初始阶段自身期间分派那些upd一次足以在整个固件504寿命跨度期间(例如,fsp-m、fsp-s和对应的通知阶段)与引导加载程序并行地执行多线程固件执行。
[0093]
一些实施例可使用多核环境采用连续执行以跟踪引导程序502与固件504之间的控制转移、共享数据变量(例如,命名为“引导加载程序核计数”),以标识固件504和引导程序502是否正在执行并行操作。当活跃平台核计数与共享数据变量“引导加载程序核计数”相同时,则没有soc固件执行正在并行运行。否则,引导程序502与固件504执行并发操作。
[0094]
引导程序502可拥有bsp核(其为核0 506),并且由此核0 506可一直监视共享数据变量,以便在没有固件504执行正在执行时取得对核的控制。重新分配的核可在核的进入和退出时更新“引导加载程序核计数”。
[0095]
引导程序502可继续执行其常规操作,如基于soc和一个核上的主板配置来定位固件504(例如,fsp-m/s)、更新upd。而其他核可处置平台设备固件更新或引导加载程序特定的引导条目的优化。在由引导加载程序处理器调用固件(例如,fsp-m/s)入口点时,固件504(例如,fsp-m)当前具有来自引导程序502的所有要求的信息以及用于在固件504内部创建并行执行环境的专用cpu资源和存储器。
[0096]
固件504可检查mtcpucorecount upd具有多于1个核来建立并行通信。如果是,则固件504可针对每个核创建monitor地址范围(通过将可用cpu核的标识符(诸如apic id)相对于mtcpuapicids[n]upd中分派的apic id进行比较),以使得操作核在通过发出执行命令而从空闲阶段唤醒时具有最小等待时间。在完成所分派的任务之后,核可等待针对向用于下一组操作的monitor地址范围中的下一写入使用mwait。
[0097]
执行针对固件504的操作的核可读取分派给该固件504的核2 510和核3 512的默认upd并创建具有附加引导加载程序策略覆写的策略配置块。固件504内的核2 510和核3 512可处置soc特定的组件在多线程环境中的执行,这些组件如输入/输出模块、与m-phy相关联的组件、集成传感器中枢等。
[0098]
一些实施例可创建与那些子任务的共享数据,并且那些子任务的状态默认为“等待”以有效地划分任务。而且,一些实施例可利用子任务函数()写入到专用核monitor地址,随后在核中触发监视硬件。可实现等待指令(例如,mwait),并且执行从接下来的指令继续并且执行该任务。固件504内的相应的核2 510和核3 512可执行那些任务并更新共享数据变量。这可继续,直到所有任务均被迁移至“完成”状态。核0 506和核1 508在引导加载程序的控制下执行,并且可继续与核2 510和核3 512并行地执行。
[0099]
一些实施例包括经验证的引导流程、受信任平台模块初始化以及验证嵌入式控制器读取/写入(ec rw)区域并跳转到ec rw区域中。设备固件更新(例如,soc固件)可使用应
用处理器来处置。引导程序502可检查共享变量数据“引导加载程序核计数”以了解固件504是否完成,并且释放所有核以供引导程序502使用。
[0100]
一些实施例可检查平台是否具有重置请求。如果是,则控制转移至重置向量。而且,在一些实施例中,引导程序502可在所有可能的活跃核上并行地运行操作,以确保剩余操作的执行引导至os。
[0101]
图9图示出监视器550。监视器550一般可在计算系统中实现,和/或结合已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)和/或方法500(图8)来实现。
[0102]
一系列任务552和子任务最初可被设置为等待(没有核可正在执行这些任务)。监视器550可包括核1-核m,但核1-核m可与监视器550分离。任务552可被分派至核1-核m。初始化代码可对监视器550进行初始化。
[0103]
图10图示出可实现本公开的各方面的存储器架构。存储器架构一般可在计算系统中实现,和/或结合已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)、方法500(图8)和/或监视器(图9)来实现。
[0104]
例如,一些实施例可使用最新的soc管芯上可用的存储器548(例如,dram)作为静态ram(sram)来进行固件访问。soc 542还可访问高速缓存546来进行固件访问,并且还可访问cpu 540和gpu 544作为固件更新的部分。在一些实施例中,在存储器548无法在早期引导阶段中被初始化的情况下,存储器548可被省略。
[0105]
现在转向图11,示出了效率增强的计算系统150。系统150一般可以是具有计算功能的电子设备/平台(例如,个人数字助理/pda、笔记本计算机、平板计算机、可转换平板、服务器)、具有通信功能的电子设备/平台(例如,智能电话)、具有成像功能的电子设备/平台(例如,相机、便携式摄像机)、具有媒体播放功能的电子设备/平台(例如,智能电视/tv)、具有可穿戴功能的电子设备/平台(例如,手表、眼部穿戴物、头戴物、脚部穿戴物、首饰)、具有车载功能的电子设备/平台(例如,汽车、卡车、摩托车)、具有机器人功能的电子设备/平台(例如,自主机器人)等或其任何组合的部分。在所图示的示例中,系统150包括具有耦合到系统存储器156的集成存储器控制器(imc)154的主机处理器152(例如,cpu)。
[0106]
所图示出的系统150还包括输入输出(io)模块158,该io模块158与主机处理器152和图形处理器160(例如,gpu)一起实现在半导体管芯162上作为soc。所图示的io模块158与例如显示器164(例如,触摸屏、液晶显示器/lcd、发光二极管/led显示器)、网络控制器166(例如,有线和/或无线)、以及大容量存储168(例如,硬盘驱动器/hdd、光盘、固态驱动器/ssd、闪存)进行通信。soc 162包括可根据如本文中所描述的实施例执行多线程引导的核0-核n 140。与多线程系统相关联的数据可被存储在板上soc高速缓存142中。soc可进一步包括总线接口144。多线程操作可在核0-核n 140的第一子集上执行固件更新和引导过程,并且其他平台固件相关过程可在核0-核n 140的第一子集的第二子集上执行。
[0107]
主机处理器152、图形处理器160和/或io模块158可执行检取自系统存储器156和/或大容量存储168的指令170。在实施例中,计算系统150实现已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)、方法500(图8)、监视器550(图9)和/或存储器架构(图10)。由此,至少在其以更高的执行吞吐量实现了更快的引导时间的程度上,所图示的计算系统150被认为是效率提高的。
[0108]
核0-核n 140、imc 154、soc高速缓存142和总线接口144、图形处理器、io 158可以是由fsp、soc固件等启动、控制和更新的soc设备的示例。网络控制器166、大容量存储168、系统存储器156和显示器164可以是soc 162外部的并且可通过与soc固件分离的平台固件来更新、启动和控制的平台设备的示例。如已经描述的,在引导过程期间,soc固件可与平台固件并行地操作以提高效率。
[0109]
图12示出了半导体设备172(例如,芯片、管芯、封装)。所图示的设备172包括一个或多个衬底174(例如,硅、蓝宝石、砷化镓)和耦合至(多个)衬底174的逻辑176(例如,晶体管阵列和其他集成电路/ic组件)。在实施例中,设备172实现已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)、方法500(图8)、监视器550(图9)和/或存储器架构(图10)的各方面。
[0110]
逻辑176可至少部分地实现在可配置逻辑或固定功能硬件逻辑中。在一个示例中,逻辑176包括定位(例如,嵌入)在(多个)衬底174内的晶体管沟道区。因此,逻辑176与(多个)衬底174之间的界面可以不是突变结。逻辑176还可被认为包括在(多个)衬底174的初始晶圆上生长的外延层。
[0111]
图13图示出根据一个实施例的处理器核200。处理器核200可以是用于任何类型的处理器的核,该处理器诸如微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、或用于执行代码的其他设备。虽然图13中仅图示了一个处理器核200,但处理元件可替代地包括多于一个的图13中所图示的处理器核200。处理器核200可以是单线程核,或对于至少一个实施例,处理器核200可以是多线程的,因为其每个核可包括多于一个的硬件线程上下文(或“逻辑处理器”)。
[0112]
图13还图示出耦合至处理器核200的存储器270。存储器270可以是本领域技术人员已知的或以其他方式对本领域技术人员可用的各种各样的存储器(包括存储器层级结构的各个层)中的任何一种。存储器270可包括要由处理器核200执行的一条或多条代码213指令,其中代码213可实现本文中描述的实施例的各方面。处理器核200遵循由代码213指示的指令的程序序列。每条指令可进入前端部分210并由一个或多个解码器220处理。解码器220可生成微操作(诸如采用预定义格式的固定宽度的微操作)作为其输出,或者可生成反映原始代码指令的其他指令、微指令或控制信号。所图示的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,该调度逻辑230一般分配资源并将与转换指令相对应的操作进行排队以供执行。
[0113]
处理器核200被示出为包括具有一组执行单元255-1至255-n的执行逻辑250。一些实施例可以包括专用于指定功能或功能集合的多个执行单元。其他实施例可包括仅一个执行单元或可以执行特定功能的一个执行单元。所图示的执行逻辑250执行由代码指令指定的操作。
[0114]
在完成对由代码指令指定的操作的执行之后,后端逻辑260对代码213的指令进行引退。在一个实施例中,处理器核200允许乱序执行但是要求指令的有序引退。引退逻辑265可采取如本领域技术人员已知的各种形式(例如,重排序缓冲器等等)。以此方式,至少在由解码器生成的输出、由寄存器重命名逻辑225利用的硬件寄存器和表、以及由执行逻辑250修改的任何寄存器(未示出)方面,处理器核200在代码213的执行期间被变换。
[0115]
虽然未在图13中图示,但处理元件可包括与处理器核200一起处于芯片上的其他
元件。例如,处理元件可包括连同处理器核200一起的存储器控制逻辑。处理元件可包括i/o控制逻辑和/或可包括与存储器控制逻辑一起被集成的i/o控制逻辑。处理元件还可包括一个或多个高速缓存。处理器核200可实现已讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)、方法500(图8)、监视器550(图9)和/或存储器架构(图10)的一个或多个方面。
[0116]
现在参考图14,所示出的是根据实施例的计算系统1000实施例的框图。图14中所示出的是多处理器系统1000,其包括第一处理元件1070和第二处理元件1080。尽管示出了两个处理元件1070和1080,但是要理解,系统1000的实施例还可包括仅一个此类处理元件。
[0117]
系统1000被图示为点对点互连系统,其中第一处理元件1070和第二处理元件1080经由点对点互连1050耦合。应当理解,图14中所图示的互连中的任何或全部互连可被实现为多分支总线而不是点对点互连。
[0118]
如图14中所示,处理元件1070和1080中的每一者可以是包括第一处理器核和第二处理器核(即,处理器核1074a和1074b、以及处理器核1084a和1084b)的多核处理器。此类核1074a、1074b、1084a、1084b可被配置成用于以与上文结合图13所讨论的方式类似的方式来执行指令代码。
[0119]
每个处理元件1070、1080可包括至少一个共享高速缓存1896a、1896b。共享高速缓存1896a、1896b可存储分别由处理器的一个或多个组件(诸如核1074a、1074b,以及1084a、1084b)利用的数据(例如,指令)。例如,共享高速缓存1896a、1896b可本地地对存储器1032、1034中所存储的数据进行高速缓存以供处理器的组件进行更快速的访问。在一个或多个实施例中,共享高速缓存1896a、1896b可包括一个或多个中间级别高速缓存(诸如第2级(l2)、第3级(l3)、第4级(l4)、或其他级别的高速缓存)、末级高速缓存(llc)和/或其组合。
[0120]
虽然被示出为具有仅两个处理元件1070、1080,但要理解,实施例的范围不限于此。在其他实施例中,在给定的处理器中可存在一个或多个附加处理元件。替代地,处理元件1070、1080中的一者或多者可以是除处理器之外的元件,诸如加速器或现场可编程门阵列。例如,(多个)附加处理元件可包括与第一处理器1070相同的(多个)附加处理器、与第一处理器1070异构或不对称的(多个)附加处理器、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或任何其他处理元件。在包括架构、微架构、热、功耗特性等等一系列品质度量方面,处理元件1070、1080之间可以存在各种差异。这些差异自身可有效地表现为处理元件1070、1080之中的不对称性和异构性。对于至少一个实施例,各处理元件1070、1080可驻留在同一管芯封装中。
[0121]
第一处理元件1070可进一步包括存储器控制器逻辑(mc)1072以及点对点(p-p)接口1076和1078。类似地,第二处理元件1080可包括mc 1082以及p-p接口1086和1088。如图14中所示,mc 1072和1082将处理器耦合至相应的存储器,即存储器1032和存储器1034,这些存储器可以是本地附连到相应处理器的主存储器的部分。尽管mc 1072和mc 1082被图示为被集成到处理元件1070、1080中,但对于替代实施例,mc逻辑可以是处理元件1070、1080外部的分立逻辑,而不是被集成于其中。
[0122]
第一处理元件1070和第二处理元件1080可分别经由p-p互连1076、1086耦合至i/o子系统1090。如图14中所示,i/o子系统1090包括p-p接口1094和1098。此外,i/o子系统1090包括将i/o子系统1090与高性能图形引擎1038耦合的接口1092。在一个实施例中,可使用总
线1049将图形引擎1038耦合至i/o子系统1090。替代地,点对点互连可耦合这些组件。
[0123]
进而,i/o子系统1090可经由接口1096耦合至第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(pci)总线,或者可以是诸如pci快速(pci express)总线或另一第三代i/o互连总线之类的总线,但是实施例的范围不限于此。
[0124]
如图14中所示,各种i/o设备1014(例如,生物计量扫描仪、扬声器、相机、传感器)可连同总线桥1018一起耦合至第一总线1016,该总线桥1018可将第一总线1016耦合至第二总线1020。在一个实施例中,第二总线1020可以是低引脚计数(lpc)总线。在一个实施例中,各种设备可耦合到第二总线1020,这些设备包括例如键盘/鼠标1012、(多个)通信设备1026、以及可包括代码1030的数据存储单元1019(诸如盘驱动器或其他大容量存储设备)。所图示的代码1030可实现已经讨论的过程100(图1)、方法300(图2)、方法350(图3)、方法370(图4)、方法400(图5)、方法448(图6)、方法400(图7)、方法500(图8)、监视器(图9)和/或存储器架构(图10)。此外,音频i/o 1024可耦合至第二总线1020,并且电池1010可向计算系统1000提供功率。
[0125]
注意,构想了其他实施例。例如,代替于图14的点对点架构,系统可实现多分支总线或者另一此类通信拓扑。而且,可替代地使用比图14中所示的更多或更少的集成芯片来对图14的元件进行分区。
[0126]
附加说明和示例:
[0127]
示例1包括一种性能增强的计算系统,该计算系统包括:芯片上系统,该芯片上系统包括主机处理器;以及存储器,该存储器包括一组可执行程序指令,这些指令在由主机处理器执行时使得计算系统用于:在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是在多线程过程中发生;响应于该至少一个任务被设置为在多线程过程中发生,在第一引导过程期间在多线程过程中执行该至少一个任务;以及响应于该至少一个任务被设置为在单线程过程中发生,在第一引导过程期间在单线程过程中执行该至少一个任务。
[0128]
示例2包括如示例1所述的计算系统,其中,至少一个软件程序用于是与芯片上系统相关联的固件。
[0129]
示例3包括如示例2所述的计算系统,其中,指令在被执行时进一步使计算系统用于:在第一引导过程的第一部分期间,在单线程过程中执行至少一个引导操作;以及在第一引导过程的第二部分期间,在多线程过程中执行至少一个任务。
[0130]
示例4包括如示例2所述的计算系统,其中,指令在被执行时进一步使计算系统用于:在第一引导过程期间标识至少一个任务要在多线程过程中发生;使主机处理器的第一组处理器核专用于该至少一个任务;以及使主机处理器的第二组处理器核专用于与通信地连接至芯片上系统的硬件设备相关联的固件执行。
[0131]
示例5包括如示例1所述的计算系统,其中,指令在被执行时进一步使计算系统用于:在第二引导过程期间确定执行至少一个任务的时间量;基于该时间量确定至少一个任务要在多线程过程中被更新;将该至少一个任务要在多线程过程中发生的标识存储到数据结构;在第一引导过程期间访问该数据结构,以标识至少一个任务要在多线程过程中发生;以及在第一引导过程期间在多线程过程中执行该至少一个任务。
[0132]
示例6包括如示例1至5中任一项所述的计算系统,其中,至少一个任务用于包括对
至少一个软件程序的更新或执行中的一者或多者。
[0133]
示例7包括一种半导体设备,该半导体设备包括一个或多个衬底以及耦合至该一个或多个衬底的逻辑,其中,该逻辑采用能配置的逻辑或固定功能逻辑硬件中的一者或多者来实现,耦合至一个或多个衬底的逻辑用于:在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是在多线程过程中发生;响应于该至少一个任务被设置为在多线程过程中发生,在第一引导过程期间在多线程过程中执行该至少一个任务;以及响应于该至少一个任务被设置为在单线程过程中发生,在第一引导过程期间在单线程过程中执行该至少一个任务。
[0134]
示例8包括如示例7所述的半导体设备,其中,至少一个软件程序用于是与芯片上系统相关联的固件。
[0135]
示例9包括如示例8所述的半导体设备,其中,逻辑用于:在第一引导过程的第一部分期间,在单线程过程中执行至少一个引导操作;以及在第一引导过程的第二部分期间,在多线程过程中执行至少一个任务。
[0136]
示例10包括如示例8所述的半导体设备,其中,逻辑用于:在第一引导过程期间标识至少一个任务要在多线程过程中发生;使芯片上系统的主机处理器的第一组处理器核专用于至少一个任务;以及使主机处理器的第二组处理器核专用于与通信地连接至芯片上系统的硬件设备相关联的固件执行。
[0137]
示例11包括如示例7所述的半导体设备,其中,逻辑用于:在第二引导过程期间确定执行至少一个任务的时间量;基于该时间量确定至少一个任务要在多线程过程中被更新;将该至少一个任务要在多线程过程中发生的标识存储到数据结构;在第一引导过程期间访问该数据结构,以标识至少一个任务要在多线程过程中发生;以及在第一引导过程期间在多线程过程中执行该至少一个任务。
[0138]
示例12包括如示例7至11中任一项所述的半导体设备,其中,至少一个任务用于包括对至少一个软件程序的更新或执行中的一者或多者。
[0139]
示例13包括如示例7至11中任一项所述的半导体设备,其中,耦合至一个或多个衬底的逻辑包括位于该一个或多个衬底内的晶体管沟道区。
[0140]
示例14包括至少一种计算机可读存储介质,包括一组指令,这些指令在由计算系统执行时使得该计算系统用于:在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是在多线程过程中发生;响应于该至少一个任务被设置为在多线程过程中发生,在第一引导过程期间在多线程过程中执行该至少一个任务;以及响应于该至少一个任务被设置为在单线程过程中发生,在第一引导过程期间在单线程过程中执行该至少一个任务。
[0141]
示例15包括如示例14所述的至少一种计算机可读存储介质,其中,至少一个软件程序用于是与芯片上系统相关联的固件。
[0142]
示例16包括如示例15所述的至少一种计算机可读存储介质,其中,指令在被执行时进一步使得计算系统用于:在第一引导过程的第一部分期间,在单线程过程中执行至少一个引导操作;以及在第一引导过程的第二部分期间,在多线程过程中执行至少一个任务。
[0143]
示例17包括如示例15所述的至少一种计算机可读存储介质,其中,指令在被执行时进一步使得计算系统用于:在第一引导过程期间标识至少一个任务要在多线程过程中发
生;使芯片上系统的主机处理器的第一组处理器核专用于至少一个任务;以及使主机处理器的第二组处理器核专用于与通信地连接至芯片上系统的硬件设备相关联的固件执行。
[0144]
示例18包括如示例14所述的至少一种计算机可读存储介质,其中,指令在被执行时进一步使得计算系统用于:在第二引导过程期间确定执行至少一个任务的时间量;基于该时间量确定至少一个任务要在多线程过程中被更新;将该至少一个任务要在多线程过程中发生的标识存储到数据结构;在第一引导过程期间访问该数据结构,以标识至少一个任务要在多线程过程中发生;以及在第一引导过程期间在多线程过程中执行该至少一个任务。
[0145]
示例19包括如示例14至18中任一项所述的至少一种计算机可读存储介质,其中,至少一个任务用于包括对至少一个软件程序的更新或执行中的一者或多者。
[0146]
示例20包括一种方法,该方法包括:在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是在多线程过程中发生;响应于该至少一个任务被设置为在多线程过程中发生,在第一引导过程期间在多线程过程中执行该至少一个任务;以及响应于该至少一个任务被设置为在单线程过程中发生,在第一引导过程期间在单线程过程中执行该至少一个任务。
[0147]
示例21包括如示例20所述的方法,其中,至少一个软件程序是与芯片上系统相关联的固件。
[0148]
示例22包括如示例21所述的方法,进一步包括:在第一引导过程的第一部分期间,在单线程过程中执行至少一个引导操作;以及在第一引导过程的第二部分期间,在多线程过程中执行至少一个任务。
[0149]
示例23包括如示例21所述的方法,进一步包括:在第一引导过程期间标识至少一个任务将在多线程过程中发生;使芯片上系统的主机处理器的第一组处理器核专用于至少一个任务;以及使主机处理器的第二组处理器核专用于与通信地连接至芯片上系统的硬件设备相关联的固件执行。
[0150]
示例24包括如示例20所述的方法,进一步包括:在第二引导过程期间确定执行至少一个任务的时间量;基于该时间量确定该至少一个任务将在多线程过程中被更新;将该至少一个任务将在多线程过程中发生的标识存储到数据结构;在第一引导过程期间访问该数据结构,以标识该至少一个任务将在多线程过程中发生;以及在第一引导过程期间在多线程过程中执行该至少一个任务。
[0151]
示例25包括如示例20至24中任一项所述的方法,其中,至少一个任务包括对至少一个软件程序的更新或执行中的一者或多者。
[0152]
示例26包括一种半导体设备,该半导体设备包括一个或多个衬底以及耦合至该一个或多个衬底的逻辑,其中,该逻辑采用能配置的逻辑或固定功能逻辑硬件中的一者或多者来实现,耦合至一个或多个衬底的逻辑用于:用于在第一引导过程期间标识与至少一个软件程序相关联的至少一个任务是被设置为在单线程过程中发生还是在多线程过程中发生的装置;用于响应于该至少一个任务被设置为在多线程过程中发生而在第一引导过程期间在多线程过程中执行该至少一个任务的装置;以及用于响应于该至少一个任务被设置为在单线程过程中发生而在第一引导过程期间在单线程过程中执行该至少一个任务的装置。
[0153]
示例27包括如示例26所述的半导体设备,其中,至少一个软件程序用于是与芯片
上系统相关联的固件。
[0154]
示例28包括如示例27所述的半导体设备,进一步包括:用于在第一引导过程的第一部分期间在单线程过程中执行至少一个引导操作的装置;以及用于在第一引导过程的第二部分期间在多线程过程中执行至少一个任务的装置。
[0155]
示例29包括如示例27所述的半导体设备,进一步包括:用于在第一引导过程期间标识至少一个任务要在多线程过程中发生的装置;用于使芯片上系统的主机处理器的第一组处理器核专用于至少一个任务的装置;以及用于使主机处理器的第二组处理器核专用于与通信地连接至芯片上系统的硬件设备相关联的固件执行的装置。
[0156]
示例30包括如示例26所述的半导体设备,进一步包括:用于在第二引导过程期间确定执行至少一个任务的时间量的装置;用于基于该时间量确定至少一个任务要在多线程过程中被更新的装置;用于将该至少一个任务要在多线程过程中发生的标识存储到数据结构的装置;用于在第一引导过程期间访问该数据结构以标识至少一个任务将在多线程过程中发生的装置;以及用于在第一引导过程期间在多线程过程中执行该至少一个任务的装置。
[0157]
示例31包括如示例26至30中任一项所述的半导体设备,其中,至少一个任务用于包括对至少一个软件程序的更新或执行中的一者或多者。
[0158]
由此,本文中所描述的技术可支持权宜的更新以及在引导过程期间更新的固件。
[0159]
实施例适用于与所有类型的半导体集成电路(“ic”)芯片一起使用。这些ic芯片的示例包括但不限于处理器、控制器、芯片组组件、可编程逻辑阵列(pla)、存储器芯片、网络芯片、芯片上系统(soc)、ssd/nand控制器asic等等。另外,在一些附图中,信号导线用线表示。一些线可以是不同的以指示更具构成性的信号路径,可具有数字标号以指示构成性信号路径的数目,和/或可在一端或多端具有箭头以指示主要信息流向。然而,这不应以限制性方式来解释。相反,此类添加的细节可与一个或多个示例性实施例结合使用以促进更容易地理解电路。任何所表示的信号线,不管是否具有附加信息,实际上都可包括一个或多个信号,该一个或多个信号可在多个方向上行进,并且可用任何适合类型的信号方案来实现,例如利用差分对来实现的数字或模拟线路、光纤线路、和/或单端线路。
[0160]
示例尺寸/模型/值/范围可能已经被给出,但是实施例不限于此。随着制造技术(例如,光刻法)随时间变得成熟,预计能制造出更小尺寸的设备。另外,为了说明和讨论的简单起见并且为了避免使实施例的某些方面模糊,到ic芯片和其他组件的公知的功率/接地连接可在附图内示出也可不示出。此外,各种布置可以框图形式示出以避免模糊各实施例,并且这也鉴于关于此类框图布置的实现的具体细节高度依赖于实现实施例的计算系统这一事实,即这些具体细节应当落在本领域内技术人员的学识范围内。在阐述具体细节(例如电路)以描述示例实施例的情况下,对本领域内技术人员应显而易见的是,没有这些具体细节或对这些具体细节作出变型也可实践各实施例。描述因此被视为是说明性的而不是限制性的。
[0161]
术语“耦合的”在本文中可被用于表示所讨论的组件之间的任何类型的直接或间接关系,且可应用于电气的、机械的、流体的、光学的、电磁的、机电的或其他连接。另外,术语“第一”、“第二”等在本文中可仅用于便于讨论,并且不带有特定时间的或按时间顺序的意义,除非另有陈述。
[0162]
如在本技术和权利要求书中所使用的,由术语
“……
中的一个或多个”联接的项列表可意指所列项的任何组合。例如,短语“a、b或c中的一个或多个”可意指a;b;c;a和b;a和c;b和c;或a、b和c。
[0163]
本领域技术人员从前面的描述将领会,实施例的广泛技术能以各种形式来实现。因此,尽管已结合其特定示例描述了实施例,但实施例的真实范围不应当限于此,因为在研究附图、说明书和所附权利要求书之后,其他修改对于本领域技术人员将变得显而易见。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献