对多体系组件软件的系统管理模式加载程序和执行机制的制作方法

文档序号:6357169阅读:397来源:国知局

专利名称::对多体系组件软件的系统管理模式加载程序和执行机制的制作方法
技术领域
:本发明一般地涉及计算机系统,具体地涉及一种用于扩展处理器的系统管理模式(SMM)和其他类似模式的功能性的机制。
背景技术
:自从英特尔(Intel)公司推出386SL型处理器以来,作为一种被隐藏至操作系统、执行由基本输入输出系统(BIOS)或者固件加载的代码的操作模式,SMM一直用于IA32处理器。SMM是一种为处理像电源管理、系统硬件控制或者原始设备制造商(OEM)设计的专有代码这样的系统级功能而提供的特定用途操作模式。由于操作系统(OS)和软件应用程序不能看到,或者甚至不能访问它,所以该模式被认为是“隐藏的”。通过SMI(系统管理中断)信号触发,IA32处理器能够进入SMM。一种大致类似于SMI信号,被称为PMI(处理器管理中断)信号的相似信号被用于ItaniumTM类处理器。简化起见,这里SMI和PMI信号有时都被称为xMI信号。迄今,善用上述Intel处理器的SMM性能的大多数BIOS实现仅仅注册单段在建立BIOS过程中创建的代码,以支持对于使用BIOS的系统特殊的特定功能或者一系列功能。该代码包括IA32中的16位汇编和用于Itanium处理器的64位汇编。为响应所有xMI触发,用于这些遗留实现的单代码段自始至终运行着。现今的系统中没有注册或者执行第三方SMM代码的规定,因而不允许扩展SMM结构。但这种扩展经常是想要的。例如,如果原始设备制造商(OEM)或者BIOS厂商为指定平台提供的SMM代码提供的功能不足,开发者或者增值经销商(VAR)不得不要么许可来自BIOS厂商或者OEM的现有代码并试图将他们自己的逻辑移植至他们的SMM代码实现中,要么忍受这种不足,因为目前的SMM架构没有提供一种修改或者扩展单代码段提供的功能的替换方式。另外,现今在IA32处理器上的实现限于处理器的16位模式,因而限制了代码长度和对32位或者64位软件工程技术的合理利用。而且,由于SMM经常被用于芯片组工作区(例如,产生由于芯片组或者CPU中的设计或者制造缺陷引起的错误的和/或者不可预料的结果的CPU或者芯片组勘误表),这种关键软件更新的能力被BIOS厂商或者OEM的整体的BIOS实现控制了。在现今的环境中,大多数芯片组厂商选择让操作系统厂商利用OS驱动程序集成这种工作区。一般,SMM功能的BIOS更新实现上还存在问题,而且,由于通过自身的驱动模型,OS已经具有硬件可扩展性机制,所以BIOS厂商和OEM很少去积极提供这些类型的BIOS更新。结合附图,参考下面的详细描述,本发明的前述方面和伴随的许多优点更容易被意识到,同时也更好理解;其中图1是举例说明本发明的一个能使各种事件处理程序(eventhandler)加载进隐藏的内存空间并且被执行来响应一个SMI或者PMI(xMI)事件的示例性的实现的示意图;图2是举例说明当处理xMI事件时,本发明使用的逻辑的流程图;图3是举例说明当加载和开始系统管理模式(SMM)核心(Nub)的执行时,本发明使用的逻辑的流程图,该系统管理模式核心当处理器以SMM运行时,被用来管理事件处理;图4是举例说明SMM核心的各种功能和服务组件的方框图;图5是举例说明当注册事件处理程序时,本发明使用的逻辑的流程图;图6是举例说明当注册和安装存储在预引导处理过程中被扫描的固件卷(firmwarevolume)中的事件处理程序时,本发明使用的逻辑的流程图;图7是举例说明当注册用于服务ItaniumTM处理器的处理器管理中断(PMI)事件的事件处理程序时,本发明执行的操作的流程图;图8是举例说明当处理PMI事件时,本发明执行的操作的流程图;以及图9是适合实现本发明的个人计算机系统的示意图。具体实施例方式在下面的描述中,为了使本发明的实施例被彻底理解,会提供许多具体的细节。然而,相关领域的技术人员将认识到,缺少一个或者多个具体的细节,或者利用其他方法、组件等,本发明也能被实行。在其他情况下,没有详细地示出或者描述公知的结构或者操作,以避免混淆本发明的各种实施例的方面。本说明书中凡提及“一个实施例”或者“实施例”,表示结合该实施例描述的具体的特点、结构或者特征包括在本发明的至少一个实施例中。因此,本说明书中出现在各处的“一个实施例中”或者“实施例中”的字样,未必都是指同一个实施例。而且,在一个或者多个实施例中,具体的特点、结构或者特征可以以任何适当的方式结合。本发明提供了一种机制,使得以一个或者多个软件驱动程序方式的可执行内容能够被加载进Intel32位系列微处理器(即,IA-32处理器)的系统管理模式(SMM),或者用PMI信号触发的基于Itanium处理器的本机模式(nativemode)。在IA32SMM中代码的执行状态是被SMI信号初始化的,而在ItaniumTM处理器中该状态是被PMI信号触发初始化的;简化起见,这些一般都被称为SMM。该机制允许可能由不同方编写的多驱动程序被安装用于SMM操作。一个注册驱动程序的代理在EFI(可扩展固件接口)引导服务模式(即,操作系统启动前的模式)中运行,它由绑定驱动程序的CPU特定(CPU-specific)的组件和抽象xMI(PMI或者SMI)信号的芯片组控制的平台组件组成。提供这一系列功能的API(应用程序接口)分别被称为SMM基础(SMMBase)和SMM访问(SMMAccess)协议。在一般的SMM实现中,在交出控制权之前,SMM空间经常被平台软件/固件/BIOS通过硬件机制锁定;这样赋予固件抽象这种绑定的控制和安全的能力。相反,通过本发明提供的SMM访问协议,软件抽象使该设备的使用者不必知道和理解确切的硬件机制,因而使得驱动程序是跨平台可移植的。如以下提供的进一步详细介绍,本发明包括下面的特征一个供驱动程序使用的SMM中的库,包括I/O访问抽象和内存分配服务;一种以非SMM模式执行的与驱动程序和应用程序通信的方法;一个以给定频率周期性触发的可选择参数;一种在被加载进SMM过程中验证驱动程序的方法;一种关闭注册权的能力;一种在许多处理器接收xMI触发的多处理器环境中运行的能力;以及最后,将遗留IA32SMM代码当作一种特殊注册的事件处理程序来运行的能力。本系统的一个特点在于所有事件处理程序都在ItaniumTM本机处理器模式中运行,或者在IA32情况下,当以实模式(即,16位模式)运行可选择的遗留IA32处理程序时,在调用事件处理程序前,结构将使处理器进入32位平坦(flat32)模式。本发明的一个示例性实现的高级示图在图1中被描述。通过使用EFI结构该实现成为可能,该结构为操作系统和平台固件之间的接口定义了一新模型。接口由包含有与平台相关的信息的数据表组成,加上操作系统及其加载程序可用的引导和运行时间服务调用。同时,这些提供了引导操作系统和运行预引导应用程序的标准环境。产生SMM可扩展性结构的过程在方框10中被初始化,其中,用具体例子说明了SMM可扩展性结构。这包括在方框12中的安装EFISMM基础协议驱动程序。EFISMM基础协议,即SMM_BASE,是CPU特定的协议,由CPU驱动程序或者另一能够抽象IA32或者Itanium处理器的ISA特定(ISA-specific)的细节的代理公布。一旦被安装,SMM_BASE在方框14中公布SMM处理程序注册服务。该处理程序注册服务的公布使得遗留和附加的驱动程序在方框22中注册SMM事件处理程序,其中驱动程序被存储在各种存储设备上,包括EFI系统分区16和BIOS闪存芯片18,以及通过网络20被访问的存储设备上。除了这些类型的存储设备,驱动程序还可以保存在其他的实施本发明的计算机系统可访问的持久性存储设备上,包括基于主板的ROM、包含在附加的外设卡上的选项ROM、本地硬盘以及CDROM,这些都用固件卷23共同描述。(注意,EFI系统分区16、BIOS闪存芯片18和驱动程序6驻留的远程存储设备也可以包括固件卷。)如图1中描述的,这些驱动程序包括存储在EFI系统分区16中的遗留(legacy)驱动程序1和附加(add-on)驱动程序2、存储在BIOS闪存芯片18上的附加驱动程序3、4和5以及通过网络20由远程存储设备(例如,文件服务器)访问的附加驱动程序6。如这里用到的,术语“附加的”对应于没有被提供如该系统的原始设备制造商(OEM)所提供的计算机系统的原始固件的驱动程序和固件文件。在一种可选择的模式中,EFISMM基础协议驱动程序可以扫描各种固件卷来识别任何通过SMM为服务xMI事件而被指定的驱动程序。在一个实施例中,这些驱动程序通过它们的文件类型来识别,例如,作为例子的“DRIVER7.SMH”文件25对应附加驱动程序7。在EFISMM基础协议驱动程序的安装过程中,SMM核心24被加载进包括只用于SMM(SMM-only)内存空间的SMRAM26中。如以下被进一步详细解释的,当控制权被转移给SMM时,SMM核心24负责协调所有活动,包括为事件处理程序提供SMM库28,该库包括PCI和I/O服务30、内存分配服务32和配置表注册34。注册SMM事件处理程序是使处理程序能够执行被设计要执行的具体xMI事件服务功能的第一步。SMM事件处理程序包括一组代码(即,被编码的机器指令),该代码被系统处理器(CPU)执行时,以类似于中断服务例程的方式执行事件服务功能。一般,每个SMM事件处理程序将包含服务具体的硬件组件或者子系统,或者具体的一类硬件的代码。例如,SMM事件处理程序可以被提供来服务系统实时时钟引起的错误、I/O端口错误、PCI设备错误等。一般,给定的驱动程序和SMM事件处理程序之间可以有某种对应。然而,这并不是严格的要求,因为处理程序可以包括一系列从单个的驱动程序文件或者对象中提取的功能块。当服务于遗留驱动程序1的事件处理程序被注册时,它被作为遗留处理程序加载进SMRAM26中。遗留处理程序是一种事件处理程序,一般被提供了原始系统固件,并且代表处理xMI事件的传统机制。当各附加SMM事件处理程序在方框22中被注册时,它被加载进SMRAM26的附加SMM事件处理程序部分38;一旦所有的附加事件处理程序被加载,附加SMM事件处理程序部分28就包括一系列如方框42所描绘的对应于附加驱动程序2-7的事件处理程序。另外,当各SMM事件处理程序被注册时,也可能在方框44中选择性地被验证,以确保事件处理程序对计算机系统的具体的处理器和/或者固件的使用是合法的。例如,一种实现公共密钥的加密方法可以被使用。当SMM事件处理程序被注册时,它们也被加入由SMM核心24维护的处理程序列表46中。一旦所有的遗留和附加的SMM事件处理程序都已经被注册并被加载进SMRAM26中,而且正确的配置数据(元数据)被写入SMM核心24,则SMRAM被锁定,阻止另外的SMM事件处理程序注册。该系统现在已经准备好通过SMM处理各种xMI事件。参考图1和图2,用IA32处理器处理xMI事件的过程进行如下在方框54中,xMI事件信号48被CPU50接收。在IA32多处理器环境中,xMI事件信号被各处理器接收。一般,对于IA32处理器,xMI(SMI)事件可以是响应引起IA32处理器进入SMM的系统芯片组上的引脚、总线周期类型或者处理器间中断(IPI)的触发而产生的。对于ItaniumTM处理器,xMI事件可以是响应引起ItaniumTM处理器返回物理模式并执行为服务PMI事件而向PAL(处理器抽象层)注册的代码的系统芯片组上的引脚、总线周期类型或者IPI的触发而产生的。响应xMI事件,CPU50切换为SMM模式,并且将指令指针重新指向SMM核心24中的第一指令,SMM核心在这里开始执行,如方框55所提供的。在判断框56中,判断系统是否是多处理器系统。如果答案为“是”,所有处理器在方框57中被同步,因此,当被选定的处理器中的SMM核心被执行时,除了该选定的处理器(例如,预引导过程中被识别的第一处理器)之外,所有处理器都被停止。然后各CPU的机器状态在方框58中被CPU硬件和SMM核心24保存。接着,在判断框59中,判断是否存在已经被注册并加载的任何遗留16位处理程序。如果存在,对应于那些遗留处理程序的代码在方框60中被执行。然后,在方框61中机器执行模式被切换为Flat32保护模式。该保护模式包括具有未分页32位、基于零寻址的Flat32模式。一旦执行模式切换完成,本机32位处理程序被依次调度(dispatch),直至适当的事件处理程序被执行完毕以服务xMI事件,如图2中的开始循环和结束循环方框62和63以及图1中方框52提供的。在一个实施例中,事件处理程序被保存为从头到尾依次游历的链表,其中第一个事件处理程序被调度,另外的事件处理程序根据需要被调度。各事件处理程序包含有用来判断该处理程序是否是服务xMI事件的适当处理程序的第一部分代码,如判断框64提供的。这类典型的判断包括询问对应于该事件处理程序的硬件组件、子系统等,查看对象是否发生错误。如果错误已经发生,事件处理程序在方框65中被执行完毕,于是在返回框66中,它再返回一个代码至SMM核心,表示它已经服务了xMI事件。如果事件处理程序判断它的对应设备没有引起错误,它也返回一个代码至SMM核心表示这一点,并且SMM核心调度列表中的下一个事件处理程序。该过程被重复,直至适当的事件处理程序被执行。获悉xMI事件被处理,SMM核心恢复机器状态,并且执行对于该处理器/所有处理器适当的指令(对于IA32的RSM),以使处理器在方框67中返回至它(们)以前的处理模式。参考图3,用于IA32处理器的EFISMM基础协议驱动程序(SMM_BASE)通过下面过程安装。首先,在方框68中SMM_BASE::Initialize服务被调用。这是利用加载并输出该构造器的DXE(驱动执行环境)引导服务驱动程序来实现的。对应实例化驱动程序,当在保护模式中操作时,用于SMM核心24的启动代码在CPU缺省SMRAM地址处(0x3000段,偏移0x8000)被加载进SMRAM。然后,在方框69中,处理器模式在执行地址0x38000p处转换为实模式。接着,在方框70中,用于平台的SMRAM实现所允许的地址范围被确定和分配。通过利用SMM_BASE::Initialize驱动程序调用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRange方法可以得到该信息,如下所述。如果该驱动程序不存在,则缺省策略将会是缺省大小(对于IA32是128千字节和对于ItaniumTM是256千字节)的用于IA32处理器的0xA000段和用于ItaniumTM处理器的运行时间数据。地址范围被分配后,在方框71中SMM_ACCESS::Open服务被调用,并且在方框72中SMRAM的初始地址从缺省的CPU地址(0x38000p)被重新定位至平台地址。被重定位的代码将包括一个实模式组件和一个保护模式组件。实模式组件将包括进入SMRAM重定位地址的SMMEntry。在方框73中,该代码在必要的时候被执行以完成任何遗留服务,并将处理器切换为保护模式操作。然后,在方框74中控制权被交给SMM核心。如以上讨论的,当处理器以SMM运行时,SMM核心24负责协调活动。图4中用图描述了SMM核心24提供的各种功能和服务。这些功能和服务包括同步对于多处理器配置的所有处理器、保存机器状态,包括需要时的浮点注册,以及清空缓存,如功能框75、76和78所提供的。SMM核心也提供了将处理器模式由实模式切换为保护模式的模式切换功能80,如以上参考方框73所讨论的。模式切换功能80也能使能处理器的内部缓存。SMM核心24提供的其他功能包括在SMRAM26中建立调用栈,维护处理程序列表以及依次调用处理程序,如功能框82、84和86所描述的。SMM核心24通过SMM库28为各种事件处理程序提供一系列服务,包括PCI和I/O服务30,内存分配服务32和配置表注册服务34。另外,SMM核心24还提供在xMI事件被服务之后被实施的若干功能。如果计算机系统实施了多处理器配置,这些处理器通过功能88被释放。功能90还原处理器的机器状态,包括需要时的浮点注册。最后,功能92用来在系统中所有处理器上执行RMS指令。如以上讨论的,本发明提供了加载事件处理程序的两种机制(1)基于驱动程序的安装;和(2)从固件卷中自主加载。对于基于驱动程序的安装,通过DXE调度程序加载的驱动程序将安装SMM_BASE协议。SMM_BASE协议被安装后,公布一个使事件处理程序被注册和加载的接口。注册协议由EFI1.0说明书描述,它定义了一种在EFI环境中公布新的可调用的接口的机制。SMM_BASE协议公布实质上包括用EFI核心揭示在SMM-CIS(描述EFI2.0协议或者在预引导空间中抽象这种注册机制的API设置的EFI2.0文档或者SMM“组件接口说明”)中描述的API。EFI核心维护GUID/接口指针对的协议数据库。GUID包括接口的128位全球唯一ID。通过该机制,当SMM_BASE协议被安装后,希望安装事件处理程序的任何驱动程序都能应用EFI1.0的标准机制来发现SMM_BASE协议实例(通过核心服务“定位协议(LocateProtocol)”)或者向要被使得处于待命状态的EFI核心注册通知,其中在一个实施例中,事件处理程序是某些代码,可以是IA32或者ItaniumTM指令集中的PE32+二进制代码,或者是用于IA32的遗留16位处理程序代码。任一情况下,一旦SMM_BASE协议被安装,各种驱动程序可以排列接口指针至SMM_BASE实例(通过EFI1.0“处理协议(HandleProtocol)服务”),然后调用SMM_BASE::Register服务。使用SMM_BASE服务的驱动程序所用的二进制代码能从它自己的驱动程序映像、来自磁盘的文件或者网络来确定。文件可以在固件卷中或者在FAT磁盘分区上。通过SMM_BASE::Register服务,事件处理程序的注册更容易。该服务包括允许事件处理程序注册的DXE引导服务驱动程序。参考图5,注册事件处理程序的过程在方框100中开始,其中注册事件处理程序的请求通过SMM_BASE协议驱动程序从另一个引导服务驱动程序或者应用程序(即,驱动程序1-7)被接收。作为响应,在方框102中,利用IPI或者SMM_CONTROL协议,SMI被产生。利用ESP内存栈指针,自变量在内存栈被传送,似乎是调用另一处理程序。处理程序可以用C和生成的映像PE32+来编写。接着,在方框104中进行内存重定位,并且ST(来自EFI1.0的系统表)指针被指向SMST(系统管理系统表)的指针替换。接着,在方框106中,用SMM_ACCESS::Open服务,SMRAM被打开,它是通过SMM_ACCESS协议访问。下面的附录给出了SMM_ACCESS协议的进一步的细节。SMM_ACCESS::Open服务从基于非SMRAM的代码中抽象了内存控制器的程序指令,实现了SMRAM可见性。这使得SMM_BASE协议能将代码,例如SMM核心,复制和安装进SMRAM中。接着,在判断框108中,判断是否有足够的SMRAM可用来容纳事件处理例程。如果没有足够的SMRAM内存空间是可用的,逻辑进行到方框110,其中有一调用程序被使得处于待命状态。作为一个选择,响应被使得处于待命状态,调用程序可以用SMM_ACCESS::GetCapabilities和SMM_ACCESS::AcquireSmramRange方法来获得SMRAM中额外的内存空间。如果没有足够的SMRAM内存空间可用,在错误返回框114中,通过调用SMM_ACCESS::Close方法,SMRAM被关闭,并且向调用程序返回一个错误代码。如果判断为有足够的SMRAM内存空间可用,在方框116中,用于处理程序的SMRAM映像的内存缓冲区被分配。在判断框118中,判断分配是否成功。如果分配没有成功,逻辑进行到错误返回框114。如果分配成功,在方框120中,事件处理程序的映像被加载进先前被分配的SMRAM内存空间。然后在判断框122中,判断映像是否是有效的。如果不是,逻辑进行到错误返回框114。如果映像被验证是有效的,在方框124中,SMM核心24通过将其加入它的处理程序列表46中,注册该新的事件处理程序,并且在返回框126中,SMRAM被关闭,过程返回到调用程序。从固件卷中自主加载事件处理程序的机制并不依赖于使另一个驱动程序使用SMM_BASE接口和SMM_BASE::Register服务。不是使驱动程序初始化注册程序,而是在预引导过程中被具体化(materialize)的各种固件卷(FV)被扫描来找到包含有通过SMM_BASE驱动程序加载的事件处理程序的适当的驱动程序文件。固件卷是固件文件的集合。除了在固件文件头中的其他元数据,固件卷中的每一个固件文件都具有类型字段(TYPEfield)。一个被称为“SmmHandler”的新类型被包括在固件文件头内的类型字段的列举中。理解了固件卷和固件文件系统,实现和公布SMM_BASE接口的所有驱动程序都将知道ReadFile服务和这种新类型。参考图6,该机制开始于方框130,其中SMM_BASE驱动程序搜索预引导过程中在系统中被具体化的所有固件卷。如开始循环框和结束循环框132和134定义的,下面的逻辑被应用于这些固件卷的其中每一个。在判断框136中,判断固件卷是否包括任何与固件文件系统一致的固件文件。如果答案是“否”,逻辑循环返回检测下一个固件卷。如果找到了一个或者多个一致的固件文件,利用下面的过程,这些文件的其中每一个都被检测,如开始循环框和结束循环框138和140定义的。在判断框142中,SMM_BASE驱动程序检测当前文件的文件类型,以确定它是否是“SMMHandle”文件。如果不是,逻辑循环返回开始下一个文件的检测。如果文件类型是“SMMHandler”,在方框144中,SMM_BASE驱动程序分解固件文件节(section);节是固件文件内的内部打包机制。如方框146所提供的,如果一个节包含有PE32+可执行的映像,或者,如果SMM_BASE的实现是在支持加载遗留16位处理程序的IA32系统上,则在方框146中,SMM_BASE驱动程序将安装包含在节中的可执行映像或者遗留16位处理程序,其中PE32+是微软在可移动映像(PortableImage)说明(于“www.microsoft.com/hwdev/efi”张贴在互联网上)中描述的可移动可执行映像类型,它与实现SMM_BASE的机器类型是相同的(例如,计算机系统是IA32机器并且处理程序是IA32PE32+映像)。然后,逻辑以类似方式继续处理随后的固件文件和固件卷。一般,当从固件文件中自主加载处理程序时,SMM_BASE将假定以上提出的用于SMM_BASE::Register的自变量具有缺省值,例如浮点保存和MakeFirst==FALSE。一般,处理IA32处理器的SMI和Itanium类处理器的PMI包括类似过程。然而,也存在着一些区别。二者之间一个主要的区别是ItaniumTM处理器没有响应它的xMI信号触发而进入的专用CPU模式。相反地,ItaniumTM处理器仅仅提供一种将处理程序绑定进处理器的机制以处理PMI事件。这种绑定通过进入处理器抽象层(PAL)的注册调用来实现,其中PAL是Intel为所有Itanium平台构建器提供的固件,包括用来提供一致的固件接口以抽象处理器实现特定(processorimplementation-specific)的特征的Itanium结构的一部分。图7和图8示出了用ItaniumTM处理器注册处理程序和处理PMI事件的细节。注册过程在方框148中开始,其中EFI2.0SMM_BASE驱动程序加载64位版本的SMM核心。一旦加载了SMM核心,在方框150中,EFI用内存中的Nub的被加载映像调用PAL_PMI_ENTRYPOINT服务,该服务创建了进入Nub代码的入口点。在初始化过程中,PAL公布一系列被称为PAL_PROCS的服务。然后,这些PAL_ROCS中的一个被用于向适当的处理器特定(processor-specific)的资源,例如处理器的模型特定(processor’smodel-specific)的寄存器(MSR)注册入口点。由此,入口点的注册创建了处理器和通过SMM核心被访问的一系列PMI事件处理程序之间的绑定。参考图8,PMI事件处理于是可以如下进行。在方框154中,PAL_PMI事件处理程序接收PMI事件。然后,在方框155中,PAL_PMI事件处理程序调用SMM核心24,使得被选定执行可扩展PMI事件处理的处理器的处理被引导至以上已被注册的Nub入口点。在判断框156中,判断系统是否是多处理器系统。如果答案为“是”,在方框157中所有处理器被会合,由此,当被选定的处理器中的SMM核心被执行时,除了被选定的处理器(例如,预引导过程中被识别的第一处理器),所有处理器都被停止。然后,在方框158中,各CPU的机器状态被CPU硬件和SMM核心24两者保存。一旦处理器的机器状态已经被保存,本机64位处理程序被依次调用直至适当的事件处理程序被执行完毕来服务PMI事件,如开始循环框和结束循环框162和163所提供的。如前所述,在一个实施例中,事件处理程序被保存为从头到尾依次被游历的链表,其中第一个事件处理程序被调度,另外的事件处理程序根据需要而被调度。各事件处理程序包含有用来判断该处理程序是否是服务xMI事件的适当处理程序的第一部分代码,如判断框164提供的,该判断一般包括以前面讨论过的方式询问相应的硬件组件。如果当前被执行的事件处理程序被判断为是适当的处理程序,则在方框165中该处理程序被执行完毕,于是,在返回框166中它返回一个代码至SMM核心,表示已经服务了PMI事件。如果事件处理程序判断它不是适当的PMI事件的处理程序,它也返回一个代码至SMM核心表达这一点,并且SMM核心调度列表中的下一个事件处理程序。以类似于前面讨论的SMI事件处理的方式,该过程被重复直至适当的事件处理程序被执行。获悉PMI事件被处理,SMM核心恢复机器状态,并且执行对于处理器/所有处理器适当的指令(RSM),以使处理器在方框167中返回至它(们)以前的处理模式。实现本发明的示例机器参考图9,与实践本发明相关的适于使用的一般传统个人计算机200被举例说明。本发明的分布式平台固件结构也可以以类似方式在工作站、膝上型电脑和计算机服务器上实现。个人计算机200包括处理器机箱202,其中安装有软盘驱动器204、硬盘驱动器206、板上组装了包含有一个或者多个微处理器和存储器模块(二者都未示出)的适当集成电路的主板208以及电源(也未示出),如本领域的普通技术人员一般公知的。主板208还包括保存了BIOS固件基础部分的本地固件存储设备210(例如,闪烁电可擦除只读存储器(flashEEPROM))。为了方便访问通过网络214从远程固件存储设备212检索到的BIOS固件部分,个人计算机200包括一个网络接口卡216或者集成在主板208中的等价电路。网络214可以包括局域网(LAN)、广域网(WAN)和/或者互联网,并且可以提供个人计算机200和远程固件存储设备212之间的有线或者无线连接。该机器还包括显示器218,用于显示由个人计算机运行的软件程序所产生的以及在上电自检和其他方式的固件加载/执行的过程中通常会显示的图像和文本。鼠标220(或者其他指点设备)被连接至处理器机箱202背面的串口(或总线端口),发自鼠标220的信号被传输至主板208以控制显示屏上的光标,以及选择通过在个人计算机上执行的软件程序而显示在显示器218上的文本、菜单项和图像成分。另外,键盘222被耦联至主板,以使用户输入影响在个人计算机上执行的软件程序的运行的文本和命令。个人计算机200也可选择地包括光盘只读存储(CD-ROM)驱动器224,CD-ROM盘可以插入其中,使得盘上的可执行文件和数据能够被读出,以传输至个人计算机200的内存和/或者硬盘驱动器206上的存储器里。如果基础BIOS固件被保存在可重写设备上,例如flashEEPROM,更新BIOS固件基础部分的机器指令可以保存在CD-ROM盘上或者软盘上,由计算机的处理器读出并处理,以重写保存在flashEEPROM上的BIOS固件。可更新的BIOS固件也可以通过网络214加载。虽然本发明是结合实践它的优选方式和对其的修改来描述的,但是本领域的普通技术人员应理解,可以对本发明进行许多其他的在所附权利要求范围内的修改。所以,并不意味着本发明的范围是由以上的描述以任何方式来限定的,而是完全根据所附的权利要求来决定。附录用于IA32的SMM_ACCESS协议SMM_ACCESS协议被芯片组驱动程序,即82815芯片组的MCH驱动程序公布。该驱动程序抽象了内存控制器开、关和锁定SMRAM的能力。它还描述了用于SMRAM的可能区域,包括在0xA000处的遗留帧缓冲区的定位以及在物理DRAM(T-SEG)顶部附近的内存的定位。SMM_ACCESS协议的构造器应在ExitBootServices上注册一个回调(call-back)。SMM_ACCESS协议提供了以下功能SMM_ACCESS::Open该服务从基于非SMRAM的代码中抽象了内存控制器的程序指令,实现了SMRAM可见性。这使得SMM_BASE协议能将代码,例如SMM核心,复制和安装进SMRAM中。SMM_ACCESS::Close该服务从基于非SMRAM的代码中抽象了内存控制器的程序指令,禁止了SMRAM可见性。这使得SMM_BASE协议能阻止其他预引导代理查看基于SMRAM的内容。SMM_ACCESS::Lock该服务抽象了保SMRAM安全的硬件能力,以使以后的尝试不能成功开启该区域的可见性。SMM_ACCESS::GetCapabilities该调用为调用程序提供了可被用作SMRAM可用内存区域,其中调用程序很可能是SMM_BASE驱动程序。这是一个公布信息的只读报告服务。SMRAM中导致对这种存储解码的芯片组程序指令以及该区域的声明,通过获得所指的区域(见下一服务)而生效。SMM_ACCESS::AcquireSmramRange该服务提供了两种类型的功能。第一个是它是EFI2.0引导服务的调用程序可见的资源管理数据库。平台中可用的SMRAM的可能区域被GetCapabilities的服务SMRAM映射公布,并且该区域是可以被该服务请求使能的映射。该请求至少包括对驱动程序的所有权的更新,但是该调用还需要实际上使请求方式有效的芯片组程序指令。SMM_ACCESS::ReleaseSmramRange该服务提供了两种类型的功能。该请求至少包括释放区域所有权的对驱动程序的更新,但是该调用还需要实际上使请求方式无效的芯片组程序指令。权利要求1.一种用于扩展计算机系统中的处理器的被隐藏的执行和存储模式的方法,包括提供一种使事件处理程序能够被加载进被隐藏的内存空间中的机制,所述事件处理程序没有被保存在所述计算机系统的原始设备制造商提供的一组原始固件中,所述被隐藏的内存空间对于所述被隐藏的执行和存储模式是可访问的,但是对于所述处理器的其他操作模式是不可访问的;和响应引起所述处理器被切换为所述被隐藏的执行和存储模式的事件,执行所述事件处理程序,以服务所述事件。2.如权利要求1所述的方法,其中,所述被隐藏的执行和存储模式包括微处理器的系统管理模式(SMM)。3.如权利要求1所述的方法,其中,使能所述事件处理程序的加载和执行的所述机制包括提供一个被抽象的接口,所述接口使得对应于被保存在任何其中保存有所述一组原始固件的组件外部的事件处理程序的一组机器代码能够被加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述这组机器代码来服务所述事件。4.如权利要求3所述的方法,其中,被抽象的接口是在所述计算机系统的预引导过程中被公布的,以使驱动程序能够在加载所述计算机系统的操作系统之前加载对应于所述事件处理程序的所述这组机器代码。5.如权利要求1所述的方法,其中,使能所述事件处理程序的加载的所述机制包括扫描在所述计算机系统的预引导过程中被具体化的任何固件卷,以识别包含与所述处理器的所述被隐藏的执行和存储模式兼容的事件处理程序的任何固件文件的存在;将所述事件处理程序加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述事件处理程序来服务所述事件。6.如权利要求1所述的方法,还包括将事件处理程序管理服务加载进所述被隐藏的内存存储空间;向所述事件处理管理服务注册一个或者多个事件处理程序;将所述的一个或者多个事件处理程序加载进所述被隐藏的内存空间;响应引起所述处理器被切换到所述被隐藏的执行和存储模式的事件,将所述处理器的指令指针重定向,以开始所述事件处理程序管理服务的执行;和通过所述事件处理程序管理服务调度事件处理程序,以服务所述事件。7.如权利要求6所述的方法,其中,多个事件处理程序向所述事件处理管理服务注册,并被加载进所述被隐藏的内存空间,还包括创建所述多个事件处理程序的有序列表;调度第一个事件处理程序;判断所述第一个事件处理程序是否是服务所述事件的适当的事件处理程序,如果是,则将所述第一个事件处理程序执行完毕,以服务所述事件;否则调度所述列表中的下一个事件处理程序,并且判断该事件处理程序是否是适当的事件处理程序,重复该功能直至适当的事件处理程序被调度,由此该事件处理程序被执行完毕,以服务所述事件。8.如权利要求7所述的方法,其中,所述的多个事件处理程序中的每一个包括一组被所述处理器执行的机器代码,以服务引起所述事件的计算机系统中的硬件组件所产生的错误状态,和判断事件处理程序是否是服务所述事件的适当的事件处理程序,包括执行对应于最近被调度的事件处理程序的所述这组机器代码的第一部分,所述这组机器代码的第一部分询问对应于该事件处理程序的硬件组件,以判断所述错误状态是否是由该硬件组件引起的;和如果判断出所述错误状态是由其对应的硬件组件引起的,则完成所述事件处理程序的所述这组机器代码的执行,否则返回一个值至所述事件处理程序管理服务,表示该事件处理程序不是服务所述错误状态的适当的事件处理程序。9.如权利要求6所述的方法,还包括在所述事件处理程序被加载进所述被隐藏的内存空间之前对其进行验证。10.如权利要求6所述的方法,其中,所述一组原始固件包括一个或者多个遗留事件处理程序,还包括向所述事件处理管理服务注册所述的一个或者多个遗留事件处理程序;将所述的一个或者多个遗留事件处理程序加载进可以被所述被隐藏的执行和存储模式访问的所述被隐藏的内存空间;和通过所述事件处理程序管理服务,调度所述的一个或者多个遗留事件处理程序中的至少一个,以服务所述事件。11.如权利要求6所述的方法,其中,所述计算机系统包括多个处理器,还包括将所述事件处理程序管理服务加载进所述的多个处理器中被选定的一个处理器;响应所述事件,使所述被选定的处理器开始执行所述事件处理程序管理服务;在执行所述事件处理程序管理服务的过程中,同步除了所述被选定的处理器之外的其他所有所述的多个处理器,并且停止这些其他处理器中的每一个的各自当前操作的执行;在所述事件被适当的事件处理程序服务之后,将所有所述的多个处理器返回至以前的处理模式,以恢复它们各自操作的执行。12.如权利要求1所述的方法,还包括在适当的时候,响应所述事件而使作为机器代码保存在所述一组原始固件中的任何的遗留事件处理程序能够被执行,以服务所述事件。13.一种用于扩展计算机系统中的微处理器的系统管理模式(SMM)的方法,包括在所述计算机系统的预引导过程中,公布一个接口使得被保存在其中保存有一组原始固件的组件的外部的驱动程序能够提供一组包括被加载进系统管理模式内存(SMRAM)中的事件处理程序的机器代码,所述系统管理模式内存在系统管理模式中对于所述微处理器是可访问的;响应系统管理模式触发事件,将所述微处理器切换为系统管理模式;和执行所述事件处理程序以服务系统管理模式触发事件。14.如权利要求13所述的方法,还包括将事件处理程序管理服务加载进系统管理模式内存;向所述事件处理管理服务注册一个或者多个事件处理程序;将所述的一个或者多个事件处理程序加载进系统管理模式内存;响应系统管理模式触发事件,将所述微处理器的指令指针重定向,以开始所述事件处理程序管理服务的执行;和通过所述事件处理程序管理服务调度事件处理程序,以服务所述事件。15.如权利要求14所述的方法,其中,多个事件处理程序被向所述事件处理管理服务注册,并被加载进系统管理模式内存,还包括创建所述多个事件处理程序的有序列表;调度第一个事件处理程序;判断所述第一个事件处理程序是否是服务系统管理模式触发事件的适当的事件处理程序,如果是,则将所述第一个事件处理程序执行完毕,以服务所述事件;否则调度所述列表中的下一个事件处理程序,并且判断该事件处理程序是否是服务系统管理模式触发事件的适当的事件处理程序,重复该功能直至适当的事件处理程序被调度,由此该事件处理程序被执行完毕,以服务该系统管理模式触发事件。16.如权利要求14所述的方法,还包括在所述事件处理程序被加载进系统管理模式内存之前对其进行验证。17.如权利要求14所述的方法,其中,所述一组原始固件包括一个或者多个遗留事件处理程序,还包括向事件处理管理服务注册所述的一个或者多个遗留事件处理程序;将所述的一个或者多个遗留事件处理程序加载进系统管理模式内存;和通过事件处理程序管理服务,调度所述的一个或者多个遗留事件处理程序中的至少一个,以服务对应于系统管理模式触发事件的遗留事件。18.如权利要求13所述的方法,还包括扫描在所述计算机系统的预引导过程中被具体化的任何固件卷,以识别包含与所述微处理器的系统管理模式兼容的事件处理程序的任何固件文件的存在;将所述事件处理程序加载进系统管理模式内存;以及执行所述事件处理程序,以服务所述系统管理模式触发事件。19.一种处理处理器中的平台管理中断(PMI)的方法,包括将平台管理中断事件处理管理服务加载进所述处理器可访问的内存;为所述平台管理中断事件处理管理服务注册入口点;通过所述平台管理中断事件处理管理服务使得一个或者多个平台管理中断事件处理程序成为所述处理器可访问的;和响应所述平台管理中断事件,引导所述处理器在其入口点开始执行所述平台管理中断事件处理管理服务,其中,所述平台管理中断事件处理管理服务的执行完成了以下功能调度所述的一个或者多个平台管理中断事件处理程序中的至少一个,以服务平台管理中断事件。20.如权利要求19所述的方法,其中,通过公布使能平台管理中断事件处理程序向所述平台管理中断事件处理管理服务注册的注册接口,所述的一个或者多个平台管理中断事件处理程序成为所述平台管理中断事件处理管理服务可访问的。21.如权利要求20所述的方法,其中,多个事件处理程序向所述平台管理中断事件处理管理服务注册,还包括创建所述的多个事件处理程序的有序列表;调度第一个事件处理程序;判断所述第一个事件处理程序是否是服务所述平台管理中断事件的适当的事件处理程序,如果是,则将所述第一个事件处理程序执行完毕,以服务所述事件;否则调度所述列表中的下一个事件处理程序,并且判断该事件处理程序是否是服务所述平台管理中断事件的适当的事件处理程序,重复该功能直至适当的事件处理程序被调度,由此该事件处理程序被执行完毕,以服务所述平台管理中断事件。22.如权利要求19所述的方法,其中,所述计算机系统包括多个处理器,还包括将所述平台管理中断事件处理程序管理服务加载进所述的多个处理器中的被选定的一个处理器;响应所述事件,使所述被选定的处理器开始执行所述平台管理中断事件处理程序管理服务;在执行所述事件处理程序管理服务的过程中,同步除了所述被选定的处理器之外的其他所有所述的多个处理器,并且停止这些其他处理器中的每一个的各自当前操作的执行;在所述平台管理中断事件被适当的事件处理程序服务之后,将所有所述的多个处理器返回至以前的处理模式,以恢复它们各自操作的执行。23.一种机器可读的介质,具有多个保存在其上的机器指令,当在计算机系统中被处理器执行时,进行下面的操作提供一种使事件处理程序能够被加载进被隐藏的内存空间中的机制,所述事件处理程序没有被保存在所述计算机系统的原始设备制造商提供的一组原始固件中,所述被隐藏的内存空间对于所述处理器的被隐藏的执行和存储模式是可访问的,但是对于所述处理器的其他操作模式是不可访问的;和响应引起所述处理器被切换为所述被隐藏的执行和存储模式的事件,执行所述事件处理程序,以服务所述事件。24.如权利要求23所述的机器可读的介质,其中,使能所述事件处理程序的加载和执行的所述机制包括提供一个被抽象的接口,所述接口使得对应于被保存在任何其中保存有所述一组原始固件的组件外部的事件处理程序的一组机器代码能够被加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述这组机器代码来服务所述事件。25.如权利要求23所述的机器可读的介质,其中,使能所述事件处理程序的加载和执行的所述机制包括扫描在所述计算机系统的预引导过程中被具体化的任何固件卷,以识别包含与所述处理器的所述被隐藏的执行和存储模式兼容的事件处理程序的任何固件文件的存在;将所述事件处理程序加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述事件处理程序来服务所述事件。26.如权利要求23所述的机器可读的介质,其中,所述的多个机器指令的执行还进行下面的操作将事件处理程序管理服务加载进所述被隐藏的内存空间;向所述事件处理管理服务注册一个或者多个事件处理程序;将所述的一个或者多个事件处理程序加载进所述被隐藏的内存空间;响应引起所述处理器被切换到所述被隐藏的执行和存储模式的事件,将所述处理器的指令指针重定向,以开始所述事件处理程序管理服务的执行;和通过所述事件处理程序管理服务调度事件处理程序,以服务所述事件。27.如权利要求26所述的机器可读的介质,其中,多个事件处理程序向所述事件处理管理服务注册,并被加载进所述被隐藏的内存空间,并且所述的多个机器指令的执行还进行下面的操作创建所述多个事件处理程序的有序列表;调度第一个事件处理程序;判断所述第一个事件处理程序是否是服务所述事件的适当的事件处理程序,如果是,则将所述第一个事件处理程序执行完毕,以服务所述事件;否则调度所述列表中的下一个事件处理程序,并且判断该事件处理程序是否是适当的事件处理程序,重复该功能直至适当的事件处理程序被调度,由此该事件处理程序被执行完毕,以服务所述事件。28.一种计算机系统,包括在其上保存有一组原始固件的主板;被可操作地耦联至所述主板,其中保存有多个机器指令的内存;和与内存连接的处理器,用于执行机器指令以进行下面的操作提供一种使事件处理程序能够被加载进被隐藏的内存空间中的机制,所述事件处理程序没有被保存在所述计算机系统的原始设备制造商提供的一组原始固件中,所述被隐藏的内存空间对于所述处理器的被隐藏的执行和存储模式是可访问的,但是对于所述处理器的其他操作模式是不可访问的;和响应引起所述处理器被切换为所述被隐藏的执行和存储模式的事件,执行所述事件处理程序,以服务所述事件。29.如权利要求28所述的计算机系统,其中,使能所述事件处理程序的加载和执行的所述机制包括提供一个被抽象的接口,所述接口使得对应于被保存在任何其中保存有所述一组原始固件的组件外部的事件处理程序的一组机器代码能够被加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述这组机器代码来服务所述事件。30.如权利要求28所述的计算机系统,其中,使能所述事件处理程序的加载和执行的所述机制包括扫描在所述计算机系统的预引导过程中被具体化的任何固件卷,以识别包含与所述处理器的所述被隐藏的执行和存储模式兼容的事件处理程序的任何固件文件的存在;将所述事件处理程序加载进所述被隐藏的内存空间;当所述处理器在所述被隐藏的执行和存储模式中运行时,将所述处理器的指令指针重定向,以执行所述事件处理程序来服务所述事件。全文摘要本发明公开了一种使以一个或者多个软件驱动程序或者固件卷方式的可执行内容能够被加载进微处理器的系统管理模式(SMM)或者基于Itanium处理器的本机模式的方法和系统。该机制允许可能由不同方编写的多个驱动程序被安装用于这些操作。一个注册由驱动程序提供的事件处理程序的代理在EFI引导服务模式中运行,它由绑定了驱动程序的CPU特定的组件和抽象对应事件触发条件的xMI(PMI或者SMI)信号的芯片组控制的平台组件组成。从而,通过除了OEM之外的其他方编写的附加驱动程序,各种处理器的SMM模式和Itanium处理器的本机模式的功能能够从系统的BIOS厂商的计算机系统被扩展。文档编号G06F9/48GK1636190SQ02809670公开日2005年7月6日申请日期2002年5月9日优先权日2001年5月11日发明者文森特·齐默申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1