嵌入式多线程处理器的执行控制设计方法的研究
2012-09-06张文波苑凌娇谭小波付立冬
张文波,苑凌娇,谭小波,付立冬
(沈阳理工大学信息科学与工程学院,辽宁沈阳110159)
在目前的单处理器系统中,多线程处理通常使用软件实现,即需依靠运行操作系统完成对线程调度的管理。这种设计方法继承了软件解决方法的很多优点,如线程调度机制灵活以及最大并发线程数量调整容易等,同时也存在很多不足。首先,依靠操作系统软件实现多线程操作会占用大量处理器时间,而且操作系统本身管理线程的运行、线程的切换操作以及线程工作现场的保护均需要指令代码来实现,在实现一次线程切换操作时,需要消耗大量的时间才能完成[1],这使得处理器执行用户线程的效率较低;其次,现今的大多数处理器结构是为单线程处理设计的,没有多线程环境下的硬件保护机制,因而仅依靠上层操作系统的调度实现多线程的运行,会存在安全漏洞;另外,用户对于多线程编程开发,也将存在需要依赖系统函数等实现较复杂的问题[2]。
特别是软硬件资源严重受限的嵌入式系统环境下,利用硬件设计一个嵌入式多线程调度处理器具有重要的现实意义,而执行控制单元的设计对整个处理器性能的影响又是至关重要的。为此,本文重点论述了多线程调度处理器执行控制单元的设计,该设计已经应用于一个通过FPGA实现的处理器中。
1 处理器执行控制
在这个处理器的流水线设计上,采用了二级流水线机制,因而在设计指令执行节拍控制电路时需要同时考虑两个因素:当前指令执行节拍的控制和流水线的控制[3-4]。
1.1 状态机实现指令节拍控制
解决处理器指令执行节拍控制的一种很好的方法是采用有限状态机(Finite State Machine)。有限状态机是指由寄存器和组合逻辑构成的,能够根据时序进行状态转移间的硬件时序电路,是协调相关信号完成特定操作的控制中心。有限状态机由三个部分组成:当前状态(Current State,简称CS)、下一个状态(Next State,简称NS)和输出逻辑(Output State,简称OS)。在有限状态机的设计中,通常,当前状态通过对一个N位触发器进行赋值实现,其输入信号是下一状态的输出,其输出将作为输出逻辑的输入;输出逻辑是状态机的外部输出信号,由外部输入和当前状态决定。结合有限状态机的这些特点,为了实现对译码电路及依靠时序控制的逻辑单元的控制,有限状态机成了最佳选择。
为此,在设计中采用摩尔型有限状态机,并结合VHDL语言对多线程处理器进行了描述。在此设计中,所有状态均使用VHDL语言来实现。由于VHDL[5-6]语句描述的是 FPGA 芯片中的实际逻辑通路,为了获得可综合的、高效的VHDL状态机描述,通常使用枚举类数据类型定义状态机的状态,并结合多进程方式描述状态机的内部逻辑,指令执行的状态机如图1所示。
图1 指令执行的状态机
每一个状态的跃迁在时间上均是在处理器主时钟脉冲的上升或下降沿处发生[7]。由于处理器的外部存储器芯片的操作速度可能远慢于处理器的执行速度[8],因而在该状态机中,设有“取指令准备状态(IFdelay)”与“存储器访问准备状态(MEMdelay)”。
处理器在上电后首先执行一次复位操作。复位操作结束后,处理器进入正常的执行过程,进入取指准备状态(IFdelay),而后在主时钟的上升沿进入取指(IF)和译码(DI)状态,在处理器的译码过程中,将会判断所执行的指令是否需要进行外存储器访问操作,如果需要访问外存,即memos信号为“1”,状态机的下一个状态将会进入存储器访问准备状态(MEMdelay),然后在主时钟的上升沿进入存储器访问状态(MEM)。若当前指令不包含访问外存的需求,处理器在译码后将直接进入执行操作状态(EX)和写回操作状态(WB)。在EX状态下,主要完成逻辑操作、数学运算操作、条件判断及跳转语句的地址运算等工作;而在WB状态下,运算的结果被写回处理器的通用寄存器中。
1.2 多周期流水线设计
因为本文所实现的处理器的工作频率为20MHz,速度远高于系统所使用的静态随机存储器,所以在进行访存操作如MEM和IF前需要增加一定的延时。在实现中,分别添加了访存准备节拍MEMdelay和IFdelay。这两个访存准备节拍会让处理器延迟三个晶振周期。其中,处理器执行每条指令都要经过一个IFdelay操作,这是因为本处理器的指令空间在片外的这个静态存储器中。由此可见,这种方法也在处理器的正常执行时形成一个了瓶颈。
因而,在设计处理器的流水节拍时,除了考虑流水路径的设计以外,还分析了如何可以更好协调处理器内部指令的流水执行以及访问存储器操作的同步问题。针对这个问题,提出了“多周期流水线设计”的流水设计模型。在传统的处理器流水线设计中,通常是将取指、译码、执行、写回等每一个节拍操作定义为流水线的一级。而在实现过程中,考虑到以上瓶颈问题,将处理器的流水线分为两级,每一级为四个晶振周期:第一级流水线包括取指准备IFdelay和取指IF操作,第二级流水线包括译码DI、执行EX和写回WB操作。
2 硬件多线程执行机制的实现
2.1 硬件多线程机制的实现
在硬件结构上,依据本文所实现的处理器只拥有一个处理器核心,它是按单位时间片(一个指令周期)依次调度多个线程的方式执行多线程。在每一个指令周期,处理器需要按顺序完成“恢复工作空间”、“执行当前空间中的指令”、“保护当前的工作空间”这三个步骤。
首先,每个线程的工作空间如指针寄存器及通用寄存器组等的保护,可以通过在处理器内部重复设置多组相同的资源,并划分为多个资源页实现,如图2中所示的GPR1、GPR2等。当处理器需要切换线程时,处理器将会以换页的方式对这些资源进行切换。这些资源的分页号,则是依靠处理器内的线程选择器所产生的线程号来控制。在实现过程中,需要重点考虑如何连贯地将这三个操作过程在最短的时间内顺序完成。
其次,在处理器执行过程中,某些内部资源并非一直需要使用,例如,通用寄存器只有在处理器的EX和WB节拍里才会使用。据此,可以通过适当排列操作顺序,以及在硬件结构上设置一些缓冲寄存器,来达到处理器中当前线程的执行、保护以及与下一线程工作空间的恢复操作并行执行的目的。
图2 硬件多线程处理器结构框图
2.2 线程选择模块的实现
本文所实现的处理器,每一个硬件线程都有唯一的线程号标识,在处理器内部,依靠这些线程号区分硬件线程。当前执行的线程号可以通过查询线程控制寄存器的最高三位来获得。
在多线程执行时,线程的执行顺序由线程选择器控制,它的结构原理图,如图3所示。
图3 线程选择器结构原理图
在这个选择器中包含一个线程选择列阵。列阵输出端输出的是下一个指令周期处理器将要执行的线程号。列阵的输入激励由两部分组成,分别为:线程控制寄存器中当前激活的线程标识和线程基数计数器的输出。
3 处理器工作空间的保护
在多线程下,处理器工作空间的保护实际就是对处理器内部各个公用的工作空间的保护。本文所实现的处理器中,线程切换时需要保护的部分如下:指针寄存器PC、堆栈指针寄存器SP、数据段指针寄存器DS、代码段指针寄存器CS、通用寄存器组、处理器状态字寄存器、内部私有存储器空间。
在具体实现上有两种方法:一种是页面管理法,另外一种是资源快速切换法。
图4 处理器工作空间的保护、恢复时序逻辑图
前一种方法是建立多个重复的需要保护的寄存器或存储器资源,处理器的硬件线程切换管理电路将这些寄存器、存储器按页分为单位管理,而每个线程只能访问某个特定页分中的资源。这种方法的特点在于,由于被保护的资源通过页面管理实现切换,不需要搬动被保护的寄存器或存储器中的数据,因而在执行时速度较快,同时控制电路也比较简单,但在设计中需要消耗掉大量的寄存器或存储器资源,在FPGA中进行底层布线实现时会影响布线的效果,使得处理器的工作主频降低。后一种方法是在处理器中额外设置一块高速静态存储器,当处理器需要切换资源时,利用硬件电路将要保护的寄存器中的内容存放到高速存储器当中。在这样的设计中,高速存储器可以放到存储器中的任何地方,而不一定是在被保护寄存器、存储器的模块中,这样在被保护的寄存器、存储器本身规模比较大的时候,有助于削减模块的规模,以达到较高的处理器执行频率;同时,最重要的是由于保护空间与被保护的资源在空间上分开,可以对被保护的寄存器、存储器添加特殊属性端口,而不需要将这些特性设计到高速存储器上。但这种设计方法也有它自身的缺点,如控制电路复杂,保护过程消耗时间较长等。
至于具体使用哪种方法,应根据在具体环境中实现的难易程度和所需要的切换速度来选择。在设计中,考虑到最大化地利用FPGA自身的结构特点,以及具体实现的方便,对通用寄存器、私有存储器空间采用第一种方法实现对其保护,而对PC、SP、CS、DS以及处理器状态字寄存器的保护采用第二种方法。图4给出了多线程的运行环境下,这些工作空间的保护以及恢复的操作时序。
4 系统性能分析
4.1 测试系统及测试工具
在测试过程中,使用如下三种系统:
(1)硬件多线程处理器系统:此系统是根据上面论述的方法设计的,处理器的工作主频为20MHz,配置有64Kbytes的程序存储器空间,最大支持8个硬件线程。
(2)WebitX操作系统:此系统最大支持8个任务。使用ATMEL公司AT90S8515 RISC单片机处理器,处理器工作频率 8MHz,系统配置有4Kbytes程序存储器空间。
(3)RMX51操作系统:此系统处理器为Intel公司的i8051处理器,工作频率12MHz。系统配置12Kbytes程序存储器空间。
4.2 测试内容及方法
由于上述三套系统的处理器的机器指令码、指令执行所需时钟周期数以及处理速度各不相同,所以直接比较绝对的处理时间并不准确。而采用用户线程执行比率的方法可以客观和准确地比较处理时间,消除绝对处理时间对处理器效率的影响。因而本文采用比较用户线程执行比率的办法。执行比率定义如下:
执行比率=多线程执行总时间/单个线程执行总时间;
执行效率=系统支持最大线程数/执行比率;
首先让三套测试系统都只运行一个线程,虽然测试程序代码各不相同,但功能是一样的:连续执行加1操作100次,分别测出各系统完成操作需要的时间。然后,让三套测试系统同时各执行8个线程,且每套系统中的所有线程执行的程序相同,不同系统的程序功能又是一样的,仍然是连续执行加1操作100次。
测试中,分别使用这三个系统的通用I/O端口作为测试程序执行状态的指示标志位。通过事先编写的程序,定义通用I/O口在系统初始化后为低,第一条代码运行前,将I/O置高,测试程序完全运行结束后,又将通用I/O置低。用逻辑分析仪抓取通用I/O口处于高电平的时间,可以得到测试程序的运行时间。
4.3 测试结果及分析
表1 系统测试结果
从表1中可以看出,对于硬件多线程处理器系统,由于线程的切换交由处理器硬件完成,并不需要执行线程切换程序指令,因而在8个线程同时执行的情况下,执行效率较高,总运行时间基本等于一个线程运行时间的8倍,各个线程能够各自独立地完成任务,并且得到了预期的结果。而对于操作系统软件实现的线程调度,虽然各个线程也能并发执行并得到正确的计算结果,但是,由于需要执行线程切换调度保护处理程序,在实际运行中将额外消耗较多的处理器时间,因此执行效率远小于1。通过以上分析可以看出,本设计所实现的硬件多线程处理器中执行控制机制在多线程条件下的执行效率较高,证明该设计是合理的。
5 结论
采用硬件实现线程的调度、资源的保护等功能,提高了系统多线程处理的效率及安全性,并降低了在多线程环境下程序开发的复杂性。随着对多线程处理能力需求的增长,在很多处理系统尤其是在自身处理能力较弱的嵌入式系统中,本文所提出的执行控制机制将在硬件多线程处理器的设计和实现中有着广泛应用。
[1]方建,石永山.数字电路的VHDL语言设计方法[J].光电技术应用,2006,3(21):38 -42.
[2]赵海,陈飞鸣.嵌入式Internet的体系结构及其ONDC模型的实现[J].东北大学学报(自然科学版),1999,20(3):257-260.
[3]张晨曦.计算机系统结构[M].北京:高等教育出版社,2008:47-192.
[4]喻之斌,金海,邹南海.计算机体系结构软件模拟技术[J].软件学报,2008,4(19):1052 -1068.
[5]宋红.计算机组成原理[M].北京:中国铁道出版社,2008:34-153.
[6]张慧,孙立香.VHDL程序设计的教学研究[J].科教导刊,2011(10):144-179.
[7]曾光裕,李清宝,王炜.计算机系统结构课程群建设[J].中国电子教育,2011(2):55 -59.
[8]张朝福,徐惠兴,楼铭达,等.基于AVR高速嵌入式单片机的ATSE控制器[J].智能电器及计算机应用,2009,13(3):18 -19.