异质多处理器系统(heterogeneous multiprocessor)是将两种以上不同工作性质的处理器核心整合为一的处理器系统。它通常包含了一般用途处理器(general purpose processor)和特殊用途处理器(specific purpose processor)。随着片上系统soc(system on chip)及相关技术的成熟,已经可以将不同的处理器整合到一个芯片里,成为多处理器芯片。以多媒体应用为例,比较著名的异质多处理芯片有德州仪器公司的tms320dsc25、tms320dm270和tms320dm320。这些芯片都是由arm微核心和dsp微核心组成。传统的多处理器系统架构(如intel smp架构)是由多个处理芯片通过外部总线汇接而成,而多处理器片上系统架构是在单一芯片上包含了多个处理器核心。它能减少系统的功耗并使整个系统发挥最大的运算效能。
1 硬件平台
本设计采用的硬件平台是德州仪器公司的tms320dm270,它由两个微处理器核心arm7tdmi和tms320c5409组成。采用主从式架构,前者为主动端,后者为被动端。arm7t
dmi是32位的一般用途处理器,负责dm270系统的整体作和所有周边设备的控制。tms320c5409为16位的数字信号处理器,主要负责多媒体信号处理.如音视频的编解码运算等。arm可以经由dsp控制器重置或唤醒,还可对dsp发出不可屏蔽式的中断(non-masked interrupt)。
双处理器之间必须有良好的通信和数据交换机制.才能使系统在多进程环境下有效合作。在dm270中,arm端的dsp控制器控制数据传输,dsp端通过hpi[3](host post interface)与arm处理器沟通。两个微处理器使用hpib(host port interfaee bridge)相互连接。arm和dsp可向对方发出硬件中断,同时它们之间存在一段共享存储区。通过共享存储区映射机制和中断的搭配,双方可以传输信息和数据,并且可以在共享存储区存取双方共同定义的指令,使两端根据指令进行对应的动作。
2 arm端的dsp管理者
为配合dsp的工作,在arm端微核心(micro kernel)中设计了一个伺服进程,它负责arm与dsp的沟通及协调运行。该进程称为dsp管理者(dsp manager),如图1所示。
arm端的进程并不知道dsp处理器的存在,只知道dsp管理者在运行。当arm端的进程需要使用dsp进程所提供的数据处理服务时,只需向dsp管理者提出请求。dsp端的进程也不知道arm处理器的存在,dsp管理者把arm端的请求存放在共享存储区,由dsp的数据流核心读取这些请求,并交给相应的dsp进程。当请求被dsp进程接收后,dsp管理者还要负责把提出请求的arm端进程的数据存放在共享存储区,以便dsp端进程的读取和处理。因此arm与dsp沟通的效能取决于dsp管理者的执行效能。
dsp管理者接收arm端进程的数据处理请求。请求信息应该包括提出请求的arm端进程的id、dsp端服务进程的id、数据处理服务类型的ld以及相关参数。同时dsp管理者把这些请求信息打包封装为dsp端系统能识别的内容格式,再通过共享存储区交给dsp端的数据流核心。
由于真正维持系统运作的是arm端系统,dsp只是附属的处理系统,所以arm端的dsp管理者可以在系统正常工作的情况下更换dsp系统,以支持不同的dsp应用。
3 dsp端的数据流核心
dsp端的系统采用数据流核心(dataflow kernel)架构。传统系统核心架构中的进程切换由timer tick决定,但数据流核心中的进程却不受timer tick的影响,它们以数据驱动(data driven)的方式工作。
在dsp端的核心运行着多个不同类型的数据处理服务进程,这些进程在dsp启动时都被设为阻塞态(sleep)。因为此时没有任何数据可以用来驱动dsp服务进程的执行。当arm端开始传送数据处理请求到dsp端时,数据流核心会根据这些请求找到对应的dsp服务进程,并使其进入执行态(busy)。当该服务进程的数据处理任务完成后,其返回结果可能是新的数据处理请求,该请求同样也可以进入数据流核心。驱动其他服务进程的执行。所以整个核心的运行是根据数据流(arm端的数据和dsp进程自己产生的数据)的动向决定的。与基于timer tick的传统系统核心相比,只要某一服务进程不断地接收数据处理请求,并且所需的数据不断到达,该进程就可以一直拥有cpu的使用权,而无须进行时间片方式的进程切换,从而减少了系统资源的浪费,提高了dsp的处理效能。
dsp端的进程有执行和阻塞两种状态。进程的状态转移如图2所示。当cpu使用权切换给某个进程时,该进程的状态将被核心设定为busy并开始处理数据。当数据处理完后,数据流核心从数据请求队列drq(data request queue)中取出下一个请求。如果请求信息中指定的dsp服务进程与目前进程相同,则该进程的状态依旧为busy.否则核心便将目前进程的状态设定为sleep,同时开始进程切换,将请求信息中所指定的服务进程设定为busy。
3.1 进程队列状态寄存器
arm端系统和dsp端系统在共享存储区共同定义了16位的进程队列状态寄存器(process oue