我在芯片上有两个CPU,它们有一个共享内存.这不是SMP架构.芯片上只有两个带有共享内存的CPU.
第一个CPU上有一个类Unix操作系统,第二个CPU上有一个Linux操作系统.
第一个CPU完成一些工作,这个工作的结果是一些数据.在第一个CPU完成其工作后,它应该告诉另一个CPU作业已完成,第二个CPU必须处理此数据.
处理处理器间通信的方式是什么?我应该使用什么算法来做到这一点?
任何有关它的文章的参考将不胜感激.
解决方法:
这一切都取决于硬件.如果你拥有的是共享内存,而没有其他通信方式,那么你必须使用某种类型的轮询.
你的两个处理器都运行linux吗?他们如何处理共享内存?
一个好的解决方案是使用链表作为fifo.在这个fifo上你放了数据描述符,比如地址和大小.
例如,你可以有一个输入和输出fifo,并像这样:
>处理器A进行一些计算
>处理器A在输出fifo上推送数据描述符
>处理器A在输入fifo上等待数据描述符
>循环
>处理器B在输出fifo上等待数据描述符
>处理器B使用数据
>处理器B在输入fifo上推送使用过的数据描述符
>循环
当然,困难的部分在于锁定.可能你应该重新表述你的问题,强调这不是’标准’SMP.
如果您没有原子测试并且在内存上设置了位操作,我猜你必须采用一种方案,其中某些内存区域只为一个处理器写入,而只读取另一个处理器.
编辑:请参阅Hasturkun答案,了解将消息从一个处理器传递到另一个处理器的方法,使用有序写入而不是原子性来提供对某些预定义数据的序列化访问.