异质多处理器系统(Heterogeneous Multiprocessor)是将两种以上不同工作性质的处理器核心整合为一的处理器系统。它通常包含了一般用途处理器(General Purpose Processor)和特殊用途处理器(Specific Purpose Processor)。随着片上系统SoC(System on Chip)及相关技术的成熟,已经可以将不同的处理器整合到一个芯片里,成为多处理器芯片。以多媒体应用为例,比较著名的异质多处理芯片有德州仪器公司的TMS320DSC25、TMS320DM270和TMS320DM320。这些芯片都是由ARM微核心和DSP微核心组成。传统的多处理器系统架构(如Intel SMP架构)是由多个处理芯片通过外部总线汇接而成,而多处理器片上系统架构是在单一芯片上包含了多个处理器核心。它能减少系统的功耗并使整个系统发挥最大的运算效能。
1 硬件平台
本设计采用的硬件平台是德州仪器公司的TMS320DM270,它由两个微处理器核心ARM7TDMI和TMS320C5409组成。采用主从式架构,前者为主动端,后者为被动端。ARM7TDMI是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 Oueue Status Register),每一位代表DSP端一个进程的状态,所以DSP端最多有16个数据处理服务进程。若DSP端的数据流核心将寄存器的某一位设为O,则表示与该位对应的DSP进程有能力处理新的数据处理请求;若设为1,则表示与该位对应的DSP进程没有能力处理新的请求。
DSP管理者通过查看该寄存器,可以知道DSP端的某些进程已不能接收新的数据处理请求,它就会使ARM端的相关进程停止向这些DSP进程发出请求。这样可以充分利用DSP的资源,降低DSP端的系统负担。
3.2 数据流核心的进程调度策略
核心中的进程调度策略是根据数据流架构上进程运行状态变化的规律设计的。其工作方式是将ARM端对DSP端的数据处理请求利用环行队列(Circular Queue)的架构以FIFO的方式排序,并存入DRQ中。该策略的特点是DSP端的每一个进程都预先指定最多可以拥有DRQ空间的数目,等级越高的进程拥有DRQ使用空间就越多,证明其可以处理更多的数据请求。该策略将传统系统核心中进程优先级(Priority)的概念转化为进程可以处理数据请求的多少。进程等级越高,能处理的数据请求也越多,同时占用CPU的执行时间也较长。LDE(Local Data Element)是DSP端每一个进程都有的参数,它表示DSP进程在执行过程中还可以接收多少个数据处理请求。LDE的初始值由系统定义。整个DRQ空问的大小由所有DSP进程的LDE预设最大值的总和决定。
当DSP端的数据流核心取得ARM端的数据处理请求时,根据请求我到指定的DSP端进程,把该进程的LDE减1,然后进行相应的数据处理。如果LDE被减至0,则DSP端数据流核心把该DSP进程在进程队列状态寄存器中所对应的状态位设为1.以通知DSP管理者该进程不能再接收新的请求,分配给该进程的所有DRQ空间都已被使用。此后,随着DRQ中的数据请求逐渐被处理,使得该进程的DRQ空问再出现剩余时,数据流核心会把进程队列状态寄存器中所对应的状态位设为0,通知DSP管理者可以再次向该DSP进程发送数据处理请求。
如图3所示,DRQ是环行队列结构,存储所有的请求信息。DRQ有两个指针:Tail指向DRQ没有被使用的空间;Head指向DRQ中将被处理的请求。LDE有三个元素EA、EB、EC,代表DSP的进程A、B、C分别可使用的DRQ个数。数据流核心接收请求RB后,调度算法将EB减1,并且通过Tail指针将请求RB加入DRQ中。当系统需要处理请求时,调度算法由Head指针取出请求并交由适当的DSP进程处理。
4 共享存储区管理
本设计将DM270系统平台中的一段32KB大小的存储区作为ARM和DSP的共享存储区。该存储区由DSP管理者负责管理。由于TMS320C5409的存储单位是字节,所以规定它所访问的共享存储区地址为OxS000~0xBFFF;而ARM7TDMI的存储单位是字,所以规定它能访问的共享存储区地址为0x50000~0x57FFF,共享存储区分配如图4所示。共享存储区分为32个存储块,每块大小为1024B。前两个字节为共享存储块的状态标志位,其值为0代表此存储块闲置,1代表此存储块已被使用。存储块中剩下的1022B用来存放数据。DSP管理者将所有ARM端需要DSP处理的数据都存储到这32个存储块上。
当32个存储块全部被使用或者数据处理请求中所指定的DSP进程的LDE为0时,DSP管理者向ARM端提出该请求的进程阻塞,防止因不断地提出请求而造成系统资源的浪费。当所指定的DSP进程数据处理结束后,DSP端的数据流核心将该进程阻塞,并对DRQ空间和进程队列状态寄存器作相应调整,然后主动释放该DSP进程使用的共享存储块,同时向ARM端发出中断信号。DSP管理者接收到此中断信号后,根据进程队列状态寄存器判断出请求所指定的DSP进程已经可以开始处理数据了,让刚才在ARM端被阻塞的进程继续运行.并把数据写入共享存储块,以便DSP进程读取和处理。当存在闲置的存储块并且数据处理请求所指定的DSP进程的LDE不为0时,DSP管理者可直接将ARM端进程的数据写到共享存储块,以便相应的DSP进程读取和处理。
5 DSP端系统的热抽换
DSP系统的更换技术对多媒体应用而言非常重要。如果DSP端需要播放不同格式的影片,则必须把整个DSP端系统更换以支持不同格式的解码器。因此在系统设计中使用了热抽换技术。传统热抽换技术的定义是动态地把系统中的核心层部分更换,在不重新开机的情况下,进程还可以正常工作。而本设计的热抽换是更换整个DSP端的系统,同时维持ARM端进程的正常工作。为了实现热抽换,必须在某段静态存储区存放多个版本的DSP系统程序。本设计中,这些程序被存放到DM270的Flash Memory中,ARM端的档案系统负责维护和管理这部分内容。
DSP系统的热抽换过程如下:①DSP端要把那些由于没有进行数据处理而陷入阻塞的DSP进程全部释放,否则当DSP端系统更新后,这些进程会因为永远不能再得到相应的数据,而造成永久阻塞,形成系统资源浪费;②ARM端的DSP管理者会清空所有的共享存储区,同时阻塞ARM端的所有用户进程;③ARM端的档案系统将从Flash Memory中读取所需的DSP系统档案并将它加载到DSP的内存;④DSP端系统启动,DSP管理者唤醒ARM端所有被阻塞的进程,为更新后的DSP系统服务。
ARM端的系统负责整个系统的正常运行,同时将数据处理请求和相关数据传送给DSP,而不管这些数据如何被DSP使用;DSP端只负责数据的处理,而不管数据的来源和用途。这种架构关系保证了DSP系统的热抽换是安全可靠的,不会破坏系统的正常运行。
本文以DM270平台为基础,设计了DSP端的数据流核心和ARM端的DSP管理者。与传统的、基于时间片的多进程系统核心相比,数据流核心的进程是靠数据驱动的方式工作的。它能有效地减少进程的切换.节约系统资源,使DSP可以更加专注于多媒体数据的处理。