处理器间共享内存实现方法与流程

文档序号:14519034阅读:1108来源:国知局
处理器间共享内存实现方法与流程

本发明涉及计算机技术领域,特别涉及处理器间的共享内存实现方法。



背景技术:

已有的共享内存式通信方式多数并不支持多个处理器,仅在处理器内部支持资源共享,即,处理器内部的多个处理器共用一个内存控制器,所有的处理器通过共用的内存控制器访问内存。这种方式可以实现高效率的资源共享,然而适用范围有限。

另一方面,已有的非共享内存式多处理器间通信方式在占用高速通信接口的同时还需要进行额外的内存读写操作来复制数据,不仅浪费了硬件接口资源,也浪费了处理器的运算资源。以这种方式共享资源效率低下,而且受限于通信接口的传输速率。



技术实现要素:

针对现有技术中多处理器计算机存在浪费处理器的运算资源、共享资源效率低下等不足,本发明要解决的技术问题是提供一种可实现高速通信及资源主效共享的多处理器间共享内存实现方法。

为解决上述技术问题,本发明采用的技术方案是:

本发明多处理器间共享内存实现方法,包括以下步骤:

根据选定使用的处理器准备相应的单处理器条件下的设计方案,以保证此设计在单处理条件下正常运行;

基于上述处理器设计方案进行扩展,通过添加一个可编程逻辑ic和一个共享内存,将多个单个处理器系统合并为一个含有多个处理器的系统;

每个处理器对应一个独立内存,使用从处理器内存起始地址开始至内存起始地址加上独立内存容量结束这一范围的地址访问独立内存;

所有处理器共用一个共享内存,使用从处理器内存起始地址加上独立内存容量开始至处理器内存起始地址加上独立内存容量再加上共享内存容量结束这一范围的地址访问共享内存;

可编程逻辑ic根据上述地址范围,切换选择使用处理器对应的独立内存或是共享内存;

当处理器需要访问共享内存时,通过检查一个选取的gpio引脚的电平高低来判断共享内存是否已被占用,如果没被占用,则改变gpio引脚电平状态后再对共享内存进行操作,操作结束后,处理器恢复gpio引脚的默认电平。

通过添加一个可编程逻辑ic和一个共享内存,将多个单个处理器系统合并为一个含有多个处理器的系统为:

添加一个可定制的可编程逻辑ic;

将可编程逻辑ic插入到处理器于内存之间,即可编程逻辑ic与每一个处理器和内存相连,处理器与内存不再直接相连;

添加一个容量为ss的共享内存rs连接至可编程逻辑ic,要求s+ss不能超过smax;

从每个处理器pi上选取一个gpio引脚gi,将上述gpio引脚连接至同一个网络,要求默认上拉;

经过上述扩展,将n个单个处理器系统合并为1个含有n个处理器的系统。

本发明具有以下有益效果及优点:

1.本发明方法提高了多个处理器间的通信速度,提高了多个处理器间的数据传输效率,且简化了共享数据的操作流程。

附图说明

图1为本发明方法涉及的n个单个处理器系统示意图;

图2为本发明方法中处理器的工作流程图。

具体实施方式

下面结合说明书附图对本发明作进一步阐述。

本发明多处理器间共享内存实现方法,包括以下步骤:

根据选定使用的处理器准备相应的单处理器(如图1所示),条件下的设计方案,以保证此设计在单处理条件下正常运行;

基于上述处理器设计方案进行扩展,通过添加一个可编程逻辑ic和一个共享内存,将多个单个处理器系统合并为一个含有多个处理器的系统;

每个处理器对应一个独立内存,使用从处理器内存起始地址开始至内存起始地址加上独立内存容量结束这一范围的地址访问独立内存;

所有处理器共用一个共享内存,使用从处理器内存起始地址加上独立内存容量开始至处理器内存起始地址加上独立内存容量再加上共享内存容量结束这一范围的地址访问共享内存;

可编程逻辑ic根据上述地址范围,切换选择使用处理器对应的独立内存或是共享内存;

当处理器需要访问共享内存时,通过检查一个选取的gpio引脚的电平高低来判断共享内存是否已被占用,如果没被占用,则改变gpio引脚电平状态后再对共享内存进行操作,操作结束后,处理器恢复gpio引脚的默认电平。

从每个处理器pi上选取一个gpio引脚gi,将上述gpio引脚连接至同一个网络,本实施例中要求默认上拉;

经过上述扩展,将n个单个处理器系统合并为1个含有n个处理器的系统。

可编程逻辑ic根据上述地址范围,切换选择使用处理器对应的独立内存或是共享内存为:

可编程逻辑ic接收来自处理器pi的信号,取出其中的地址部分ai-astart。

如果ai-astart小于s(流程图中标示为t时),可编程逻辑ic对信号不做任何处理,直接发送至私有内存ri;如果ai-astart大于等于s(流程图中标示为f时),将ai-astart减去s后发送至共享内存rs。

如图2所示,当处理器需要访问共享内存时,先检查gpio引脚gi的电平。如果gi为默认电平(如高电平),表明共享内存rs没有被占用,则处理器pi先将gi翻转拉低,再对共享内存rs进行操作;

操作结束后,处理器pi释放gi,恢复默认电平。在处理器pi翻转gngi的期间,其它处理器不可以使用共享内存rs,即禁止访问大于等于astart+s的地址。

上述流程保证在同一时刻只有一个处理器对rs进行操作。本实施例中,小于astart+s的地址为每个处理器私有,大于等于astart+s的地址由共享内存使用。

下面为本发明方法的具体应用实例。

组建一个包含有处理器p0、内存r0、处理器p1、内存r1、可编程逻辑ic以及内存rs的系统;

处理器p0、p1的gpio引脚g0、g1连接至同一网络;

处理器p0、p1均使用32位地址,地址空间范围为232=4gi,按字节寻址;

处理器p0、p1内存起始地址astart为0x40000000;

处理器p0、p1支持最大内存容量smax为2gib;

内存r0、r1、rs容量s均为1gib;

可编程逻辑ic对来自于处理器pi(i=0,1)地址小于1gi的信号不做处理,发送至对应的内存ri(i=0,1),将大于等于1gi小于2gi的地址减去1gi后发送给内存rs。

操作实例1:

p0向地址0x50000000写入32kib数据,同时p1从地址0x50000000读取32kib数据;

p0:判断所需访问地址0x50000000(a0)<0x40000000(astart)+1gi(s);

p0:访问地址0x50000000(a0);

p1:判断所需访问地址0x50000000(a1)<0x40000000(astart)+1gi(s);

p1:访问地址0x50000000(a1);

可编程逻辑ic:接收来自p0的信号;

可编程逻辑ic:判断信号中包含地址0x50000000(a0)-0x40000000(astart)<1gi(s);

可编程逻辑ic:输出信号至r0;

可编程逻辑ic:接收来自p1的信号;

可编程逻辑ic:判断信号中包含地址0x50000000(a1)-0x40000000(astart)<1gi(s);

可编程逻辑ic:输出信号至r1。

操作结果:

p0将32kib数据写入r0的0x10000000地址;

p1从r1的0x10000000地址读取32kib的数据;

p0与p1的数据相互独立。

操作实例2:

p0向地址0x90000000写入32kib数据,在p0写入完成前p1从地址0x90000000读取32kib数据;

p0:判断所需访问地址0x90000000(a0)≥0x40000000(astart)+1gi(s);

p0:检测g0电平为高;

p0:控制g0拉低电平;

p0:访问地址0x90000000(a0);

p1:判断所需访问地址0x90000000(a1)≥0x40000000(astart)+1gi(s);

p1:检测g1电平为低;

p1:取消访问操作;

可编程逻辑ic:接收来自p0的信号;

可编程逻辑ic:判断信号中包含地址0x90000000(a0)-0x40000000(astart)≥1gi(s);

可编程逻辑ic:将信号中包含的地址减去1gi(s);

可编程逻辑ic:输出信号至rs;

p0:完成访问操作;

p0:释放g0。

操作结果:

p0将32kib数据写入rs的0x10000000地址;

p1的操作被取消。

操作实例3:

p0向地址0x90000000写入32kib数据,在p0写入完成后p1从地址0x90000000读取32kib数据;

p0:判断所需访问地址0x90000000(a0)-0x40000000(astart)≥1gi(s);

p0:检测g0电平为高;

p0:控制g0拉低电平;

p0:访问地址0x90000000(a0);

可编程逻辑ic:接收来自p0的信号;

可编程逻辑ic:判断信号中包含地址0x90000000(a1)-0x40000000(astart)≥1gi(s);

可编程逻辑ic:将信号中包含的地址减去1gi(s);

可编程逻辑ic:输出信号至rs;

p0:完成访问操作;

p0:释放g0;

p1:判断所需访问地址0x90000000(a1)-0x40000000(astart)≥1gi(s);

p1:检测g1电平为高;

p1:控制g1拉低电平;

p1:访问地址0x90000000(a1);

可编程逻辑ic:接收来自p1的信号;

可编程逻辑ic:判断信号中包含地址0x90000000(a1)-0x40000000(astart)≥1gi(s);

可编程逻辑ic:将信号中包含的地址减去1gi(s);

可编程逻辑ic:输出信号至rs;

p0:完成访问操作;

p0:释放g1。

操作结果:

p0将32kib数据写入rs的0x10000000地址;

p1从rs的0x10000000地址读取32kib数据;

p0和p1通过共享内存rs交换了32kib数据。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1