一种
保障
实时
系统
时间
约束
处理器
指令
扩展
赵秀嘉
179 北京智芯微电子科技有限公司实验室开放基金资助 收稿日期:2022-01-11;修回日期:2022-12-30 北京大学学报(自然科学版)第 59 卷 第 2 期 2023 年 3 月 Acta Scientiarum Naturalium Universitatis Pekinensis,Vol.59,No.2(Mar.2023)doi:doi:10.13209/j.0479-8023.2023.013 一种保障实时系统时间约束的处理器指令扩展 赵秀嘉1,2 李雷3 刘先华1,2,1.北京大学计算机学院,北京 100871;2.北京大学微处理器及系统教育部工程研究中心,北京 100871;3.北京智芯微电子科技有限公司,北京 100192;通信作者,E-mail: 摘要 采用软硬件协同技术,通过必要的硬件语义实现资源隔离,基于高效的任务调度保障不同关键级别任务满足时间约束,是当前混合关键系统设计的有效方法之一。本研究基于时序可预测的细粒度多线程处理器FlexPRET,扩展设计实现时序指令,并分别在硬件和编译器中添加对扩展指令的支持,使得程序在代码中对最大执行时间进行时序约束语义描述。实验评测表明,所实现的扩展指令可为用户提供更精细的时序控制。关键词 指令扩展;实时系统;混合关键系统;最坏执行时间 Instruction Extension Ensuring Time Constraints in Real Time Processor ZHAO Xiujia1,2 LI Lei3 LIU Xianhua1,2,1.School of Computer Science,Peking University,Beijing 100871;2.Engineering Research Center of Microprocessor&System,Peking University,Beijing 100871;3.Beijing Smart-Chip Microelectronics Technology Co.,Ltd.,Beijing 100192;Corresponding author,E-mail: Abstract Hardware software cooperation is one of the effective methods for the design of mixed criticality system,which realize resource isolation by necessary hardware semantics,and ensure that different critical tasks meet time constraints based on efficient thread scheduling.Based on a fine-grained multithreaded processor FlexPRET,this paper designs and implements some temporal instruction extensions,and realizes relevant supports in the processor and compiler respectively,so that the program can describe the timing constraint semantics of the worst-case execution time.Experiments show that the extended instructions can provide users with more accurate timing control.Key words instruction extension;real-time system;mixed criticality system;worst-case execution time实时系统指系统行为的正确性不仅取决于计算的逻辑结果,还取决于结果产生的时间的计算机系统1。目前,实时系统已广泛应用于航空电子、汽车、工业自动化和医疗等领域,人们越来越倾向于将多个复杂软件任务整合到一个硬件平台中,降低硬件成本,减小系统的尺寸、重量和功耗。这就要求单个处理器运行拥有不同重要性或安全性的任务,由此产生混合关键系统(mixed-criticality sys-tem,MCS)2。混合关键系统中各个任务的关键性级别不同,为防止任务或组件失败,系统必须保证不同的调度策略和有限级别,这就需要系统设计提供更好的隔离和调度。在不同的应用领域,关键级别的数量和定义各不相同,但最少可以定义为两个级别:安全关键级别(safety-critical)和非关键级别(non-critical)3。不同关键级的任务运行在同一硬件平台上,共享处理器时间、内存和网络等资源。对混合关键系统来说,高度集成的硬件平台需要保证不同关键级别任务对资源共享的灵活性和效率,满足任务各自的关键级别,同时需要减少资源共享导致的任务间的干扰,因此任务之间的隔离(isolation)至关重要。实现隔离的方式有硬件隔离、软件隔离以及软硬件结合北京大学学报(自然科学版)第 59 卷 第 2 期 2023 年 3 月 180 隔离,但现有的隔离方式存在资源利用率不足的问题。自 Vestal4首次提出混合关键系统的概念以及一种基于抢先式的固定优先级调度方法之后,研究工作集中在混合关键系统的调度问题上,并且将任务的执行时间视为确定值5。在实际情况,一个程序的执行时间受多种因素影响,最坏情况下的执行时间很难被界定。本文选择开放指令架构作为基础,面向实时领域需求开展处理器指令扩展研究,在资源隔离、线程调度和时间约束语义方面提供软硬件协同支持,为适用于用电、配电和调度领域的硬实时自主嵌入式 CPU 内核提供设计建议。1 相关研究 实时微处理器体系结构是微处理器领域的一个重要研究方向。与通用处理器追求最大吞吐量不同,实时处理器要求具有紧凑且可计算的最坏执行时间。传统实时处理器采用较为简单的处理器结构,避免复杂结构引入执行时间的不确定性。随着实时应用对处理器性能需求越来越高,实时处理器正逐渐向多线程与多核结构发展。在多线程执行场景下,共享资源竞争导致实时系统的确定性变差,给实时处理器体系结构带来更大的挑战。在隔离方面,多线程实时处理器主要研究多线程资源竞争问题,解决如何从微体系结构上为每个线程提供相对独立的资源,进而获得可预测的执行时间。多核实时处理器则主要研究多处理器核之间的资源竞争问题,如何将片内存储、片外存储和共享总线等资源有效分配给多个处理器核。有的设计采用硬件隔离实现,但难以充分利用硬件资源。美国亚特兰大大学的 DynOS、德国的Proteus、日本早稻田大学的 SPUMON 和北京航空航天大学的 RGMP 等都采用此类架构。为有效改善性能和能耗,也有一些方案采用异构多核。该架构在能效性方面得到改进,其软硬件整体架构仍类似上述的基于多处理器的双操作系统方案。国内外基于虚拟化方式的实时嵌入式操作系统隔离典型方案包括 VLX,OKL4 Microvisor,Xen on ARM,KVM/ARM,Xtratum,Xvisor 以及基于 Xen 的其他衍生优化方案。还有一些基于轻量虚拟化的混合操作系统解决方案,例如 RTAI,Linux/Rton,RTLinux 和基于L4 衍生出的 Fiasco 或者采用操作系统可适应性域(ADEOS)技术的 Xenomai 等。此外,还可以在硬件中增加新的模式,提供相应的软件支持,采用软硬件结合的方式解决隔离和资源调度。如 TrustZone,TLR,ViMoExpress,SafeG,ARMithril,TMM 以及RTZVisor 等。但是,此类设计在计算资源不足时,可能对普通应用或软实时任务产生消极影响。近年来,多线程逐渐应用于实时领域,通过在处理器设计中提供专门的实时支持,从而在保证处理器实时性的同时提高系统线程性能、线程灵活性和硬件资源利用率。将同时多线程处理器应用于实时领域的研究最早始于 2000 年前后,其主要思想是尽量保证某一线程不受其他线程的影响,被优先保护的线程则具有较高的性能,同时也具备一定的可预测性。有些研究面向硬件保障最差预估执行时间 WCET 展开,包括 Komodo,VISA,RVMP,SPEAR,JOP,PRET,DMT,ARPRET 和 ARPAMT 等。有些研究面向细粒度多线程支持展开,例如 PTARM,XMOS X1,Merasa 以及 FlexPRET 等。还有一些研究在软件调度资源技术方面进行优化,例如 IMA System,VxWorks 653 RTOS 和 RTSS-2009 等。混合关键系统调度可以分为固定优先级调度和动态优先级调度。固定优先级调度通过基于应答时间分析(response time analysis,RTA)和松弛时间调度(slack scheduling)以及周期转换(period transfor-mation)等来优化调度方法。动态优先级调度主要基于最早截止时间优先调度(earliest deadline first,EDF)的思想进行任务调度。混合关键系统还有一个问题是,常见的通用指令系统并未提供对程序的时序行为进行约束的指令,很大程度上是因为对时序行为的约束依赖于处理器微结构的设计以及软件工具链的实现。对时序行为做精确描述的硬件模型通常也不可用或难以实现。尽管设计人员可以通过硬件编程的定时器对程序的时序进行控制,但这种方法会受硬件定时器的实现以及配置方式和中断处理方式等因素的影响,可编程性也比较差。目前,虽然一些编程语言和编程模型(如 Ada,Real-Time Euclid 和 PTIDES 等)中包含时序控制的特性,但在指令系统中实现时序控制仍需要硬件来实现以及编译工具链的支持。指令系统中的时序指令比编程语言更加底层,可以为硬件设计提供更精确的实时语义。例如 Ip 等6提出一条时序指令 dead,赵秀嘉等 一种保障实时系统时间约束的处理器指令扩展 181 用于指定一段代码的最短执行时间。为实现这条指令,Ip 等6在处理器中添加多个专门用于计时的寄存器,dead 指令以这些寄存器作为目的操作数,接受源操作数作为计数值。当 dead 指令运行时,首先等待计时寄存器归零,然后将计数值重新写入计时寄存器中。dead 指令的效果相当于运行指定数量的空操作指令。在需要精确指定代码时序的程序中,相比手动插入多条空操作,使用该指令可以在有效地减少代码数量的同时,提供正确且精确的时序语义,但缺点是处理器无法利用空闲的时钟周期。Bui 等7进一步提出在指令系统层面可以表达的 4 种时序语义:1)保证代码块执行至少需要指定的时间;2)执行代码块,当执行时间超过约定时间时,代码执行完成后跳转;3)执行代码块,当执行时间超过约定时间时,立即跳转;4)保证代码块执行至多不超过指定的时间。Bui 等7还提出表达这 4 种语义的 6 条伪指令。set_time 和 delay_until 两条伪指令可以表达第 1 种语义;branch_expired 可以表达第 2 种语义;expection_on_expire 和 deactivate_ exception 配合可以表达第 3 种语义;对于第 4 种语义,Bui 等7指出不能在运行时保证代码块的最长执行时间,而是需要通过静态分析技术,在编译或链接时刻保证代码块的执行时间边界。Liu8将这 6 条指令的前 5 条精简为 4 条,并在基于 PTARM 的实时处理器中实现:使用 get_time 指令替代 set_time 指令获取当前时间,这样就可以使用 get_time 和普通分支指令实现 branch_expired。Antolak 等9提出多核时序可预测处理器,并添加 4 条时序指令。处理器为