CN101876911B - 基于PCI/PCIe总线多CPU系统启动方法及模块 - Google Patents
基于PCI/PCIe总线多CPU系统启动方法及模块 Download PDFInfo
- Publication number
- CN101876911B CN101876911B CN 200910249673 CN200910249673A CN101876911B CN 101876911 B CN101876911 B CN 101876911B CN 200910249673 CN200910249673 CN 200910249673 CN 200910249673 A CN200910249673 A CN 200910249673A CN 101876911 B CN101876911 B CN 101876911B
- Authority
- CN
- China
- Prior art keywords
- cpu
- initialization
- data structure
- bus
- pci
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种基于PCI/PCIe总线多CPU系统启动方法及模块,涉及自动控制领域。所述方法:预先建立数据结构,并选定每条总线组长CPU,主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;各总线上,完成初始化的组长CPU在主CPU的控制下,加载数据结构至本总线上其它从CPU;至全部CPU均初始化成功,完成所述系统的启动。大大提高系统启动速度;不用增加新的硬件,节省了成本。
Description
技术领域
本发明涉及自动控制领域,特别涉及一种基于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拓扑位置 |
...... |
...... |
...... |
从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、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种基于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将自身内存映射到PCI空间具体为:
主CPU将数据结构加载到自身内存,通过设置主CPU的寄存器的相关参数,将主CPU自身内存映射到PCI空间,使得PCI系统中其它CPU可以访问到主控CPU的内存空间。
2.根据权利要求1所述的基于PCI/PCIe总线的多CPU系统启动方法,其特征在于,所述方法还包括:
其它从CPU在初始化成功后,该从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU;并且,主CPU也同时在系统中选择其它从CPU进行初始化,具体为:
主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。
3.根据权利要求1或2所述的基于PCI/PCIe总线的多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发出请求。
4.根据权利要求1或2所述的基于PCI/PCIe总线的多CPU系统启动方法,其特征在于,主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。
5.根据权利要求1或2所述的基于PCI/PCIe总线的多CPU系统启动方法,其特征在于,在每条总线上选定设备号为0的从CPU作为该总线的组长CPU。
6.一种基于PCI/PCIe总线的多CPU系统启动模块,其特征在于,包括:
数据结构建立单元,用于建立包括各从CPU初始化信息、所在PCI空间的基址和PCI拓扑位置、及状态信息的数据结构;
组长CPU选定单元,用于在每条总线上选定至少一个从CPU作为该总线的组长CPU;
主CPU初始化单元,用于主CPU将数据结构加载到自身内存,并将自身内存映射到PCI空间;所述主CPU初始化单元具体用于:主CPU将数据结构加载到自身内存,通过设置主CPU的寄存器的相关参数,将主CPU自身内存映射到PCI空间,使得PCI系统中其它CPU可以访问到主控CPU的内存空间;
组长CPU初始化单元,用于主CPU加载所述数据结构至各总线的组长CPU;各总线的组长CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;
其它从CPU初始化单元,用于各总线上,完成初始化的组长CPU在主CPU的控制下,加载所述数据结构至本总线上其它从CPU;其它从CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息;至全部CPU均初始化成功,完成所述系统的启动。
7.根据权利要求6所述的基于PCI/PCIe总线的多CPU系统启动模块,其特征在于,所述其它从CPU初始化单元还包括赋权子单元,用于其它从CPU在初始化成功后,初始化成功的从CPU获取主CPU赋予其初始化其所在总线上其它从CPU的权利,并在主CPU的控制下,按照组长CPU初始化其它从CPU的步骤初始化其所在总线上的其它从CPU;
所述其它从CPU初始化单元还包括主CPU选择初始化子单元,用于主CPU初始化系统中其它从CPU,具体用于:
主CPU查找数据结构中的状态信息,选出一个待初始化CPU,加载数据结构至该待初始化CPU;该待初始化CPU在接收到所述数据结构后,依据所述数据结构中本CPU的初始化信息启动初始化,并在初始化成功后通知主CPU更新本CPU的状态信息。
8.根据权利要求6或7所述的基于PCI/PCIe总线的多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发出请求。
9.根据权利要求6或7所述的基于PCI/PCIe总线的多CPU系统启动模块,其特征在于,主CPU与各从CPU之间的通讯通过PCI内存读写及PCI中断实现,通讯格式为共享缓冲格式,且保证主CPU与各从CPU的缓冲区不重叠。
10.根据权利要求6或7所述的基于PCI/PCIe总线的多CPU系统启动模块,其特征在于,所述组长CPU选定单元具体用于在每条总线上选定设备号为0的从CPU作为该总线的组长CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910249673 CN101876911B (zh) | 2009-11-04 | 2009-12-11 | 基于PCI/PCIe总线多CPU系统启动方法及模块 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910209359 | 2009-11-04 | ||
CN200910209359.9 | 2009-11-04 | ||
CN 200910249673 CN101876911B (zh) | 2009-11-04 | 2009-12-11 | 基于PCI/PCIe总线多CPU系统启动方法及模块 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101876911A CN101876911A (zh) | 2010-11-03 |
CN101876911B true CN101876911B (zh) | 2013-05-15 |
Family
ID=43019473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910249673 Active CN101876911B (zh) | 2009-11-04 | 2009-12-11 | 基于PCI/PCIe总线多CPU系统启动方法及模块 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101876911B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033768B (zh) * | 2010-12-10 | 2013-10-30 | 杭州海康威视数字技术股份有限公司 | 多cpu系统的启动方法及多cpu系统 |
CN102646045B (zh) * | 2012-03-08 | 2016-02-10 | 杭州海康威视数字技术股份有限公司 | 多处理器系统及其并行启动方法 |
CN106294277A (zh) * | 2015-12-29 | 2017-01-04 | 北京典赞科技有限公司 | 一种基于pcie总线的smp计算系统 |
CN106020898A (zh) * | 2016-05-30 | 2016-10-12 | 华讯方舟科技有限公司 | 一种多处理器设备的软件升级方法及系统 |
CN106970891B (zh) * | 2017-03-17 | 2021-04-30 | 阿里云计算有限公司 | 一种微处理器与外设交互的方法、装置及系统 |
CN108153553A (zh) * | 2018-01-23 | 2018-06-12 | 郑州云海信息技术有限公司 | 一种高端服务器启动方法、系统、装置及计算机存储介质 |
CN113553101B (zh) * | 2021-07-27 | 2022-09-02 | 上海信昊信息科技有限公司 | 加载频率可变的pcie交换芯片端口寄存器初始化方法 |
CN116205199B (zh) * | 2023-05-04 | 2023-07-18 | 阿里云计算有限公司 | 芯片验证方法、装置、电子设备、存储介质以及程序产品 |
CN116974636B (zh) * | 2023-08-03 | 2024-04-26 | 上海合芯数字科技有限公司 | 多路互联系统及其总线接口初始化方法、装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5938765A (en) * | 1997-08-29 | 1999-08-17 | Sequent Computer Systems, Inc. | System and method for initializing a multinode multiprocessor computer system |
US6178445B1 (en) * | 1998-03-31 | 2001-01-23 | International Business Machines Corporation | System and method for determining which processor is the master processor in a symmetric multi-processor environment |
CN1525353A (zh) * | 2003-09-17 | 2004-09-01 | 中兴通讯股份有限公司 | 多处理器系统及其共享引导模块的方法 |
CN1916849A (zh) * | 2006-09-04 | 2007-02-21 | 华为技术有限公司 | 一种多处理器系统的初始化方法和多处理器系统 |
-
2009
- 2009-12-11 CN CN 200910249673 patent/CN101876911B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5938765A (en) * | 1997-08-29 | 1999-08-17 | Sequent Computer Systems, Inc. | System and method for initializing a multinode multiprocessor computer system |
US6178445B1 (en) * | 1998-03-31 | 2001-01-23 | International Business Machines Corporation | System and method for determining which processor is the master processor in a symmetric multi-processor environment |
CN1525353A (zh) * | 2003-09-17 | 2004-09-01 | 中兴通讯股份有限公司 | 多处理器系统及其共享引导模块的方法 |
CN1916849A (zh) * | 2006-09-04 | 2007-02-21 | 华为技术有限公司 | 一种多处理器系统的初始化方法和多处理器系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101876911A (zh) | 2010-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101876911B (zh) | 基于PCI/PCIe总线多CPU系统启动方法及模块 | |
CN103078747B (zh) | PCIe交换机及其工作方法 | |
CN104750510A (zh) | 一种芯片启动方法及多核处理器芯片 | |
US20070106879A1 (en) | Semiconductor device | |
US10002103B2 (en) | Low-pin microcontroller device with multiple independent microcontrollers | |
US11029746B2 (en) | Dynamic power management network for memory devices | |
US8095742B2 (en) | Microcomputer with address translation circuit | |
KR20170141205A (ko) | Dsp 엔진 및 향상된 컨텍스트 스위치 기능부를 구비한 중앙 처리 유닛 | |
CN103345407A (zh) | 控制电路、连通控制器、连通控制方法及主板 | |
US20160267046A1 (en) | Low-Pin Microcontroller Device With Multiple Independent Microcontrollers | |
US9280493B2 (en) | Method and device for enumerating input/output devices | |
CN102253844B (zh) | 一种启动处理器的方法和设备 | |
CN104199699A (zh) | 程序加载方法、芯片启动方法、装置及主控设备 | |
CN103530254A (zh) | 多节点系统的外部设备互联枚举方法和装置 | |
US20140164659A1 (en) | Regulating access to slave devices | |
US7827333B1 (en) | System and method for determining a bus address on an add-in card | |
CN102622274A (zh) | 计算机装置及其中断任务分配方法 | |
US7356630B2 (en) | Processor control device for stopping processor operation | |
US9223697B2 (en) | Computer reprogramming method, data storage medium and motor vehicle computer | |
CN101582037A (zh) | 共享基本输入输出系统的方法及其刀锋服务器与计算机 | |
US10503523B2 (en) | Technologies to improve system boot performance and reliability | |
KR20170062835A (ko) | 공유 자원을 효율적으로 관리하는 데이터 처리 시스템 | |
US20090144523A1 (en) | Multiple-simd processor for processing multimedia data and arithmetic method using the same | |
US8176303B2 (en) | Multiprocessor communication device and methods thereof | |
US10503541B2 (en) | System and method for handling dependencies in dynamic thread spawning for a multi-threading processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |