基于PCI总线的多处理器协同机制研究
2017-07-10张旭
DOI:10.19392/j.cnki.16717341.201720060
摘要:本文对基于PCI总线互连体系架构下的多CPU协同工作的通信机制进行了研究与分析,并针对共享内存访问冲突的问题,提出了一种总线仲裁结合访问隔离的方案来解决这一问题。
关键词:PCI总线;多CPU互连;共享内存;中断
目前,在军事、轨道交通、能源电力及航空航天等领域,对计算机系统的安全性、可靠性及处理能力具有较高的要求。由于传统的单CPU系统在信息的获取、处理及控制等方面的能力有限,对于高实时、高安全等复杂的工作任务,其能力略显不足。因此,多CPU的结构,协同完成数据的输入、处理、控制、输出等工作,相比于单CPU工作,能够有效的提高系统的安全性及处理能力。
多个CPU通过一定的方式进行互连,通过CPU间的数据传输和共享进行协同工作,能够最大化的调度和分配每个CPU的资源,提高处理器的性能,达到最优的资源利用率。要达到这样的目标,需要对CPU的互连方法进行正确的选择,其关键所在,就是要使用高效的CPU间通信机制。因此,本文就是研究一种基于PCI总线的多CPU互连协同工作的实现方法,并提出一种同步互斥机制来保证数据的访问的安全性。
1 多CPU互连的方法
1.1 基于PCI总线互连的优势
嵌入式多处理器的互连,具有多种方式,如以太网、PCI总线、以及双口RAM等等。本文选择采用基于PCI总线的方式实现多个CPU互连,完成协同工作的目的。之所以选择PCI总线的方式,是因为PCI总线是一种仲裁型并行总线,为32/64位地址数据复用总线,支持突发传输和即插即用,具有兼容性好、传输速度高等优点。
1.2 基于PCI总线互连的系统结构
基于PCI总线互连的系统结构如图1所示。
如上图所示的多个CPU通过PCI总线实现互连。其中,CPU(A)提供一块内存区域作为共享内存,用于各CPU之间的数据交互。CPU(A)负责共享内存的初始化、管理等工作,并以本地内存的形式直接进行访问。其它CPU则要通过PCI总线对共享内存进行访问。
2 基于PCI的多CPU通信机制的实现
在此种互连结构中,共享内存在同一时间内可能会有多个CPU进行访问,出现资源争抢的情况,这样会导致系统故障的发生。因此,如何在避免冲突的产生,实现效率的最大化,是本系统结构的难点所在。本文通过数据传输、通知机制和互斥机制三个方面来解决这一问题。
2.1 数据传输机制实现
在基于PCI总线的互连结构中,每个CPU端都有各自的地址空间,并且有各自独立的RAM。每一端的CPU都能够对其地址空间内的RAM进行访问。那么如果总线上的某个CPU要访问CPU(A)上的共享RAM,只有通过地址映射才能实现,即将目标区域映射到本地地址空间上。地址的映射是通过PCI桥实现的。
基于内存映射的数据传输过程如下:
CPU(A)在初始化时,在其RAM中分配一块区域作为共享内存,然后通过对PCI桥进行配置,把共享内存映射到PCI域的地址空间。而其它的CPU则通过PCI桥,将PCI地址空间映射到本地RAM地址空间,从而各节点可以通过访问PCI地址来访问共享内存。但是,由于本地RAM为PCI设备开辟的映射空间是有限的,不能一次性完成所有地址的映射,因此,要采用一种叫做“加窗映射”的机制。CPU在本地RAM的中,为PCI创建一个窗口,一次只将一段PCI地址映射到窗口中,当要访问的PCI地址不在窗口中时,则将窗口移动到指定地址范围。PCI地址空间映射如图2所示。
2.2 通知机制的实现
只有数据的传输机制,还不能高效的进行通信。还需要一种高效的通知机制来实现数据发送方和接收方之间的同步。当一个CPU完成数据的发送之后,应该有某种方法通知其他CPU有数据可用;同样当数据接收完成以后,接收方也要通知发送方可写入新的数据。本文采用电平触发方式话,只需要一次中断即可,当发送端数据写入完成以后,向接收端发送一个中断触发电平,接收端读取完数据以后将该电平拉倒非触发状态即可,具有较高的效率。通知机制的具体的工作过程如图3所示:
2.3 互斥机制的实现
互斥机制用来解决同一时间多个CPU同时访问共享内存造成访问冲突的问题。CPU(B)、CPU(C)和CPU(D)三个CPU是通过PCI总线访问共享内存的,而PCI总线在同一时间只允许一个CPU取得控制权,PCI总线可以通过仲裁机制来合理分配总线带宽,保证同一时刻只能有一方访问。所以,我们可以通过总线仲裁来避免B、C、D这三个CPU访问冲突的发生。
但是,CPU(A)访问共享内存是不通过PCI总线的,CPU(A)随时可能和另外三个CPU中的一个发生访问冲突的问题。因此,本文提出一种总线仲裁结合访问隔离的方案来保证访问的互斥。总线仲裁通过硬件完成,数据区隔离通过软件完成。
2.3.1 PCI总线的仲裁机制
PCI总线仲裁方式不是基于时间片的,而是基于访问的。因此,对于某个PCI主设备来讲,其每次在总线上进行访问时都要提出仲裁要求。PCI总线采用独立的请求仲裁方案,其结构如图4所示。
图中,PCI总线仲裁器上连接有4个设备,各设备之间没有任何的控制关系。当仲裁器接收到各设备的请求时,会通过仲裁算法对设备进行选定,并发送总线授权信号GNT到选定设备;设备只有在获取总线的控制权后,才能够进行一次交易。
2.3.2 访问隔离实现方式
为了防止CPU(A)和另外三个CPU之间对共享内存访问的冲突,本文采用了分时访问的隔离方式,来保证某一时间片内只能有一个CPU具有共享内存的访问权。
要实现这一机制,首先要为共享内存建立一个自旋锁,每个CPU要访问共享内存前都要先通过CPU(A)来获取自旋锁状态。实现的具体方法是:当某一个CPU需要访问共享内存时,先向CPU(A)发送一个中断请求,CPU(A)收到中断以后,检查自旋锁是否被占用,没被占用的话则通知请求方可以访问共享内存,完成一次握手操作;请求方通过PCI总线在规定时间内完成共享内存的读写操作,自旋锁进入占用状态,以防止其它CPU访问到共享内存;执行完后释放自旋锁。
3 总结
本文通过对比分析,阐述了基于PCI总线的多处理互连方法的优势。根据基于PCI总线互连结构中所存在的问题,从数据传输、通知机制和互斥机制三个方面对基于PCI的多CPU通信机制的实现方式进行了详细的描述,并提出一种总线仲裁结合访问隔离的方案来解决共享内存访问冲突的问题。此方法具有使用灵活、处理效率高和安全的特点。
参考文献:
[1]万绵涛.基于PCI互连的嵌入式多处理器系统通信机制研究[D].华中科技大学,2012.
[2]孔帅帅.基于嵌入式多核处理器的通信及中斷问题的研究[D].电子科技大学,2011.
[3]沈雪峰.多CPU系统的中断机制[D].电子科技大学,2009.
[4]刘培宁,杨玉华,李连云,陈涵生,陈红诣.基于PCI总线的共享内存底板网络[J].计算机工程,2006(6):246247.
作者简介:张旭(1988),男,硕士,软件设计师,研究方向:嵌入式系统应用。