首页> 中国专利> 基于PCI/PCIe总线多CPU系统启动方法及模块

基于PCI/PCIe总线多CPU系统启动方法及模块

摘要

本发明公开一种基于PCI/PCIe总线多CPU系统启动方法及模块,涉及自动控制领域。所述方法:预先建立数据结构,并选定每条总线组长CPU,主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;各总线上,完成初始化的组长CPU在主CPU的控制下,加载数据结构至本总线上其它从CPU;至全部CPU均初始化成功,完成所述系统的启动。大大提高系统启动速度;不用增加新的硬件,节省了成本。

著录项

  • 公开/公告号CN101876911A

    专利类型发明专利

  • 公开/公告日2010-11-03

    原文格式PDF

  • 申请/专利号CN200910249673.X

  • 发明设计人 金伟;赵先林;胡扬忠;邬伟琪;

    申请日2009-12-11

  • 分类号G06F9/445;G06F9/48;G06F13/20;

  • 代理机构北京集佳知识产权代理有限公司;

  • 代理人逯长明

  • 地址 310012 浙江省杭州市马塍路36号

  • 入库时间 2023-12-18 00:56:43

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-05-15

    授权

    授权

  • 2010-12-15

    实质审查的生效 IPC(主分类):G06F9/445 申请日:20091211

    实质审查的生效

  • 2010-11-03

    公开

    公开

说明书

技术领域

本发明涉及自动控制领域,特别涉及一种基于PCI/PCIe总线多CPU系统启动方法及模块。

背景技术

PCI(外部设备互连总线)总线或PCIe(PCI Express,高速外部设备互连总线)上可以连接好多设备,通常,在同一段总线内最多可接255个设备,每种设备最多只能有8个功能,不同的PCI总线之间的互连通过PCI to PCI桥接芯片实现。因此每个设备都有BUS号(总线号),DEV号(设备号),及FUNC号(功能号),一般而言,每个设备只有1个功能,即只有FUNC0。

目前,大型系统中常常会由几百甚至上千个CPU组成,如何让这些CPU全部尽快的进入工作状态,大大关系到整个系统的性能。现有的启动方法依靠在主控CPU上启用多线程的方法去初始化系统中的所有CPU,其中,主控CPU针对每个从CPU都启动一个线程,在各个线程中下载启动对应从CPU初始化所必须的二进制文件。

在实施本发明过程中,发明人发现现有技术中至少存在如下问题:现有多线程启动方法中,因为主控CPU的指令是一条一条顺序执行的,多线程在主控CPU上其实也是串行的。也就是说,虽然在宏观上看起来是多个线程是并行的,但是在微观上看仍然是串行的。因此这样仅靠主控CPU来承担整个系统的初始化任务会影响到整个系统的性能。

发明内容

为解决上述技术问题,本发明提供一种基于PCI/PCIe总线多CPU系统启动方法及模块。

本发明提供一种基于PCI/PCIe总线的多CPU系统启动方法,预先建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构,并在每条总线上选定至少一个从CPU作为该总线的组长CPU,所述方法包括:

主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;

主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;

各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;至全部CPU均初始化成功,完成所述系统的启动。

所述方法还包括:

主CPU初始化系统中其它从CPU,具体为:

主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

其它从CPU在初始化成功后,还包括:

初始化成功的从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU。

完成初始化的组长CPU或初始化成功的从CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU具体为:

完成初始化的组长CPU或初始化成功的从CPU作为请求CPU向主CPU发出请求,主CPU查找所述数据结构,根据请求CPU的PCI空间的基址和PCI拓扑位置,选出该请求CPU所在总线上的一个待初始化CPU,判断该待初始化CPU是否已经被其它CPU请求,是则重新选择一个待初始化CPU再次执行上述判断步骤,否则将该待初始化CPU作为被请求CPU,赋予该请求CPU初始化该被请求CPU的权利;请求CPU加载所述数据结构至被请求CPU后,继续向主CPU发出请求。

主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,所述通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。

所述主CPU将自身内存映射到PCI空间具体为:通过设置主CPU的用于映射到PCI空间的寄存器中相关参数,将自身内存映射到PCI空间。

在每条总线上选定设备号为0的从CPU作为该总线的组长CPU。

本发明还提供了一种基于PCI/PCIe总线的多CPU系统启动模块,包括:

数据结构建立单元,用于建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构;

组长CPU选定单元,用于在每条总线上选定至少一个从CPU作为该总线的组长CPU;

主CPU初始化单元,用于主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;

组长CPU初始化单元,用于主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;

其它从CPU初始化单元,用于各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;至全部CPU均初始化成功,完成所述系统的启动。

所述其它从CPU初始化单元还包括主CPU选择初始化子单元,用于主CPU初始化系统中其它从CPU,具体用于:

主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

所述其它从CPU初始化单元还包括赋权子单元,用于其它从CPU在初始化成功后,初始化成功的从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU。

所述其它从CPU初始化单元中,完成初始化的组长CPU或初始化成功的从CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU具体为:

完成初始化的组长CPU或初始化成功的从CPU作为请求CPU向主CPU发出请求,主CPU查找所述数据结构,根据请求CPU的PCI空间的基址和PCI拓扑位置,选出该请求CPU所在总线上的一个待初始化CPU,判断该待初始化CPU是否已经被其它CPU请求,是则重新选择一个待初始化CPU再次执行上述判断步骤,否则将该待初始化CPU作为被请求CPU;赋予该请求CPU初始化该被请求CPU的权利;请求CPU加载所述数据结构至被请求CPU后,继续向主CPU发出请求。

主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,所述通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。

所述主CPU初始化单元中,主CPU将自身内存映射到PCI空间具体为:通过设置主CPU的用于映射到PCI空间的寄存器中相关参数,将自身内存映射到PCI空间。

所述组长CPU选定单元具体用于在每条总线上选定设备号为0的从CPU作为该总线的组长CPU。

本发明提供的一种基于PCI/PCIe总线多CPU系统启动方法及模块,有益效果是:

本发明运用主CPU、各组长CPU等多CPU并行工作的方式,充分发挥了多CPU并行运行的效率,多CPU同时启动,分摊主控CPU的重任,这样可以大大提高整个系统的初始化速度,从而大大提高了系统启动速度;而且不用增加新的硬件,节省了成本。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一提供的一种基于PCI/PCIe总线的多CPU系统启动方法流程图;

图2为本发明实施例一中在主CPU的控制下,加载数据结构至本总线上其它从CPU方法流程图;

图3为本发明实施例二提供的一种优选的基于PCI/PCIe总线的多CPU系统启动方法流程图;

图4为本发明实施例二中主CPU工作流程图;

图5为本发明实施例三提供的一种基于PCI/PCIe总线的多CPU系统启动模块框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

实施例一

参见图1,为本发明实施例提供的一种基于PCI/PCIe总线的多CPU系统启动方法:

步骤S101:预先建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构,并在每条总线上选定至少一个从CPU作为该总线的组长CPU。

通常,预先建立的数据结构存放在主CPU的FLASH中。

其中,在每条总线上选定至少一个从CPU作为该总线的组长CPU,优选的可以是,在每条总线上选定设备号为0的从CPU,即CPU(BUSn,DEV0)作为该总线的组长CPU。

该多CPU系统启动的方法包括如下步骤:

步骤S102:主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间。

这里,主CPU自己启动后,把存在FLASH中的数据结构加载到自身内存中,本领域技术人员都知道,主CPU自己启动时,通常还包括将启动程序以及应用程序二进制文件等一并加载到自身内存中;并且把主CPU的内存映射到PCI的空间,CPU有PCI接口的话,一般都有把自己内存映射到PCI空间的寄存器,所谓映射,就是配置这些寄存器的相关参数,这样,可以使得PCI系统中其它CPU可以访问到主控CPU的内存空间。

其中,数据结构中通常包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息等,优选的,可以采用表1所示形式建立数据结构:

表1

  从CPU1所在PCI空间的基址  从CPU1状态信息,初始化信息  从CPU1的PCI拓扑位置  从CPU2所在PCI空间的基址  从CPU2状态信息,初始化信息  从CPU2的PCI拓扑位置   ……   ……

  从CPU1所在PCI空间的基址   ……  从CPUn所在PCI空间的基址  从CPUn状态信息,初始化信息  从CPUn的PCI拓扑位置

其中,从CPU所在PCI空间的基址和PCI拓扑位置,用于定位该从CPU在整个系统中的位置;从CPU状态信息用于标识该CPU是否初始化,当然,实际应用中,从CPU状态信息可以用于标识该CPU各种状态的汇总,不仅包含是否初始化,还包含其他必须的信息。从CPU的初始化信息为该CPU进行初始化的相关信息,也就是说,CPU可以利用自己对应的初始化信息进行初始化。

步骤S103:主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

通常,CPU的PCI拓扑位置可由(BUSn,DEVn)一个二元组来定义,BUSn表示位于第n条总线上,DEVn表示第n个设备。记作CPU(BUSn,DEVn)。

一般的系统构架会把主CPU放在BUS0上,所以一般有HOST CPU=CPU(BUS0,DEV0)。

以CPU(BUSn,DEV0)作为该总线的组长CPU,则在PCI通讯的基础上就可以实现本发明实施例提供的快速启动了。首先由主CPU把数据结构加载到CPU(BUS1,DEV0),然后不用等CPU(BUS1,DEV0)初始化完成,主CPU继续加载数据结构到CPU(BUS2,DEV0)。这样每个BUS的DEV0位置的CPU都在差不多同一时间初始化。这里要注意的是组长CPU初始化完成后不用等待其它组长CPU,直接执行下述步骤S104。

步骤S104:各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;至全部CPU均初始化成功,完成所述系统的启动。

参见图2,本发明实施例中,完成初始化的组长CPU在主CPU的控制下,加载数据结构至本总线上其它从CPU,具体包括如下子步骤:这里,完成初始化的组长CPU为请求CPU。

步骤S201:请求CPU向主CPU发出请求。

步骤S202:主CPU查找数据结构,根据请求CPU的PCI空间的基址和PCI拓扑位置,选出该请求CPU所在总线上的一个待初始化CPU。

步骤S203:主CPU判断该待初始化CPU是否已经被其它CPU请求,是则执行步骤S204,否则执行步骤S205。

S204:重新选择一个待初始化CPU,执行步骤S203的判断步骤。

S205:将该待初始化CPU作为被请求CPU,赋予该请求CPU初始化该被请求CPU的权利;请求CPU加载所述数据结构至被请求CPU后,继续向主CPU发出请求。

其中,主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,所述通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。以保证CPU之间互传信息不会互相覆盖,所以必须每个CPU一个缓冲区。这里的通讯指的是从CPU和主CPU之间的通讯,从CPU间不能通讯。表2是主CPU上建立的通讯数据结构:

表2

 从CPU1到主CPU通讯缓冲 主CPU到从CPU1通讯缓冲 从CPU2到主CPU通讯缓冲 主CPU到从CPU2通讯缓冲 …… …… 从CPUn到主CPU通讯缓冲 主CPU到从CPUn通讯缓冲

可见,本发明实施例提供的基于PCI/PCIe总线的多CPU系统启动方法,运用主CPU、各组长CPU等多CPU并行工作的方式,充分发挥了多CPU并行运行的效率,多CPU同时启动,分摊主控CPU的重任,这样可以大大提高整个系统的初始化速度,从而大大提高了系统启动速度,时间复杂度几乎是O(log2N),比传统的方式的时间复杂度O(N)要高效的多;而且不用增加新的硬件,节省了成本。

实施例二

参见图3,为本发明实施例提供的一种优选的基于PCI/PCIe总线的多CPU系统启动方法:

步骤S301:预先建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构,并在每条总线上选定至少一个从CPU作为该总线的组长CPU。

通常,预先建立的数据结构存放在主CPU的FLASH中。

其中,在每条总线上选定至少一个从CPU作为该总线的组长CPU,优选的可以是,在每条总线上选定设备号为0的从CPU,即CPU(BUSn,DEV0)作为该总线的组长CPU。

该多CPU系统启动的方法包括如下步骤:

步骤S302:主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间。

这里,主CPU自己启动后,把存在FLASH中的数据结构加载到自身内存中,本领域技术人员都知道,主CPU自己启动时,通常还包括将启动程序以及应用程序二进制文件等一并加载到自身内存中;并且把主CPU的内存映射到PCI的空间,CPU有PCI接口的话,一般都有把自己内存映射到PCI空间的寄存器,所谓映射,就是配置这些寄存器的相关参数,这样,可以使得PCI系统中其它CPU可以访问到主控CPU的内存空间。

其中,数据结构中通常包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息等,优选的,可以采用上述表1所示形式建立数据结构。

从CPU所在PCI空间的基址和PCI拓扑位置,用于定位该从CPU在整个系统中的位置;从CPU状态信息用于标识该CPU是否初始化,当然,实际应用中,从CPU状态信息可以用于标识该CPU各种状态的汇总,不仅包含是否初始化,还包含其他必须的信息。从CPU的初始化信息为该CPU进行初始化的相关信息,也就是说,CPU可以利用自己对应的初始化信息进行初始化。

步骤S303:主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

通常,CPU的PCI拓扑位置可由(BUSn,DEVn)一个二元组来定义,BUSn表示位于第n条总线上,DEVn表示第n个设备。记作CPU(BUSn,DEVn)。

一般的系统构架会把主CPU放在BUS0上,所以一般有HOST CPU=CPU(BUS0,DEV0)。

以CPU(BUSn,DEV0)作为该总线的组长CPU,则在PCI通讯的基础上就可以实现本发明实施例提供的快速启动了。首先由主CPU把数据结构加载到CPU(BUS1,DEV0),然后不用等CPU(BUS1,DEV0)初始化完成,主CPU继续加载数据结构到CPU(BUS2,DEV0)。这样每个BUS的DEV0位置的CPU都在差不多同一时间初始化。这里要注意的是组长CPU初始化完成后不用等待其它组长CPU,直接执行下述步骤S104。

步骤S304:各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

步骤S305:其它从CPU在初始化成功后,该从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU。并且,主CPU也同时在系统中选择其它从CPU进行初始化。至全部CPU均初始化成功,完成所述系统的启动。

其中,主CPU初始化系统中其它从CPU的步骤具体为:主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

在HOST CPU(主CPU,这里假设其设置在BUS0上)初始化完所有的组长CPU即CPU(BUSn,DEV0)后,其中n=1~bus max,则优选的,可以定义三种CPU类型:1.HOST CPU;2.所有已经被初始化的从CPU(BUSn,DEVm)n!=0;3.没有被初始化的CPU。

同一时刻由上面定义的前两类CPU来初始化其余未被初始化的CPU。CPU(BUSn,DEV0)负责初始化BUSn中的CPU,一旦CPU(BUSn,DEVm)被初始化成功,这个CPU就加入到第2种的CPU类型中,可以从主CPU获取初始化属于同一总线上其他剩下CPU的权利。例如:CPU(BUS1,DEV1)已经被CPU(BUS1,DEV0)初始化完成,则CPU(BUS1,DEV1)就和CPU(BUS1,DEV0)一起初始化本总线内剩下未初始化的CPU。这里有几个地方要注意的:系统中各个CPU的PCI地址已经通过HOST CPU初始化自身的时候传过来了,CPU(BUSn,DEVm)要去初始化别的CPU时必须先通过HOST CPU仲裁。由于HOST  CPU保持系统的各个CPU的当前初始化状态信息。这样通过HOST CPU仲裁就不会发生同时有多个CPU想初始化同一个CPU而产生冲突,造成二进制互相覆盖的问题,可以进一步提高系统启动的速率。HOST CPU在给其它CPU仲裁的同时也可以在系统内挑一个CPU去初始化,因为在整个系统中获取某个CPU的初始化权是通过HOST CPU的,所以HOST CPU可根据既定的策略和其他已经初始化了的CPU一起工作。

参见图4,针对主CPU而言,以完成初始化的组长CPU或初始化成功的从CPU为请求CPU,其工作流程如下:

步骤S401:当主CPU接收到请求CPU的请求时执行步骤S402。

请求CPU向主CPU发出请求主要依靠PCI内存读写以及PCI中断来实现,此时,当主CPU接收到请求时,会关闭请求或关闭中断,执行下面的步骤以处理该请求或中断。

步骤S402:主CPU查找数据结构,根据请求CPU的PCI空间的基址和PCI拓扑位置,选出该请求CPU所在总线上的一个待初始化CPU。

步骤S403:主CPU判断该待初始化CPU是否已经被其它CPU请求,是则执行步骤S404,否则执行步骤S405。

S404:重新选择一个待初始化CPU,执行步骤S203的判断步骤。

S405:将该待初始化CPU作为被请求CPU,赋予该请求CPU初始化该被请求CPU的权利。

此时,该请求处理完成,需要再次打开请求或中断,以便再次接收请求。

相应的,当请求CPU获得主CPU赋予其初始化被请求CPU的权利后,加载数据结构至被请求CPU该被请求CPU,继续向主CPU发出请求。

S406:继续在系统中选择其它从CPU进行初始化,并当主CPU接收到请求CPU的请求时执行步骤S402。

其中,主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,所述通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。以保证CPU之间互传信息不会互相覆盖,所以必须每个CPU一个缓冲区。这里的通讯指的是从CPU和主CPU之间的通讯,从CPU间不能通讯。上述表2是主CPU上建立的通讯数据结构。

可见,本发明实施例提供的基于PCI/PCIe总线的多CPU系统启动方法,运用主CPU、各组长CPU、已经初始化后的其它从CPU等多CPU并行工作的方式,充分发挥了多CPU并行运行的效率,多CPU同时启动,分摊主控CPU的重任,这样可以大大提高整个系统的初始化速度,从而大大提高了系统启动速度,时间复杂度几乎是O(log2N),比传统的方式的时间复杂度O(N)要高效的多;而且不用增加新的硬件,节省了成本。

实施例三

参见图5,本发明实施例提供一种基于PCI/PCIe总线的多CPU系统启动模块,包括:

数据结构建立单元501,用于建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构;

组长CPU选定单元502,用于在每条总线上选定至少一个从CPU作为该总线的组长CPU;

主CPU初始化单元503,用于主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;

组长CPU初始化单元504,用于主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;

其它从CPU初始化单元505,用于各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;至全部CPU均初始化成功,完成所述系统的启动。

优选的,所述其它从CPU初始化单元还包括主CPU选择初始化子单元,用于主CPU初始化系统中其它从CPU,具体用于:

主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。

优选的,所述其它从CPU初始化单元还包括赋权子单元,用于其它从CPU在初始化成功后,初始化成功的从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU。

其中,所述其它从CPU初始化单元中,完成初始化的组长CPU或初始化成功的从CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU具体为:

完成初始化的组长CPU或初始化成功的从CPU作为请求CPU向主CPU发出请求,主CPU查找所述数据结构,根据请求CPU的PCI空间的基址和PCI拓扑位置,选出该请求CPU所在总线上的一个待初始化CPU,判断该待初始化CPU是否已经被其它CPU请求,是则重新选择一个待初始化CPU再次执行上述判断步骤,否则将该待初始化CPU作为被请求CPU;赋予该请求CPU初始化该被请求CPU的权利;请求CPU加载所述数据结构至被请求CPU后,继续向主CPU发出请求。

本发明实施例中,主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,所述通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。

本发明实施例中,所述主CPU初始化单元中,主CPU将自身内存映射到PCI空间具体为:通过设置主CPU的用于映射到PCI空间的寄存器中相关参数,将自身内存映射到PCI空间。

优选的,所述组长CPU选定单元具体用于在每条总线上选定设备号为0的从CPU作为该总线的组长CPU。

上述图5所示的一种基于PCI/PCIe总线的多CPU系统启动模块,可以执行前述图1、图2、图3、或者图4及其实施例一或实施例二所示的方法,因而其工作流程在此不赘述。

可见,本发明实施例提供的基于PCI/PCIe总线的多CPU系统启动模块,运用主CPU、各组长CPU等多CPU并行工作的方式,充分发挥了多CPU并行运行的效率,多CPU同时启动,分摊主控CPU的重任,这样可以大大提高整个系统的初始化速度,从而大大提高了系统启动速度,时间复杂度几乎是O(log2N),比传统的方式的时间复杂度O(N)要高效的多;而且不用增加新的硬件,节省了成本。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括若干指令用以执行本发明各个实施例所述的方法。这里所述的存储介质,如:ROM/RAM、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号