实时嵌入式系统中断的管理与优化

2009-08-01 07:06
现代企业文化·理论版 2009年4期

张 军

摘要:文章通过对嵌入式内核中断管理技术的讨论,提出“中断前一后段处理”模型;利用单向量多中断处理映射技术,解决一些处理器中多个外部中断共用一个向量的问题,并在提出根据中断服务子程序对通用寄存器的需求而进行中断现场保护的策略。

关键词:中断管理模式;嵌入式实时系统;中断响应

中图分类号:TP3文献标识码:A

文章编号:1674-1145(2009)06-0126-02

一、概述

嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。在嵌入式系统的应用开发中,采和嵌入式实时操作系统(简称RTOS)能够支持多任务,使得程序开发更加容易,便于维护,同时能够提高系统的稳定性和可靠性。嵌入式实时系统中断管理技术直接影响到系统的实时响应性能。

二、关于嵌入式内核的中断管理模式的讨论

实时多任务操作系统是嵌入式应用开发的基础平台。嵌入式操作系统相当于一个通用而复杂的主控程序,为嵌入式应用软件提供更强大的开发平台和运行环境。因为嵌入式系统已经将处理器、中断、定时器、I/O等资源包装起来,用一系列的API提供给用户,应用程序可以不关注底层硬件,直接借用操作系统提供的功能进行开发,此时的嵌入式操作系统可以视为一个虚拟机。随着嵌入式实时系统的发展,为了方便对中断的处理,系统内核常接管中断的处理。根据系统内核的可抢占或者非抢占性,系统内核接管中断又有两种不同处理模式。

(一)嵌入式内核接管中断的处理机制

嵌入式内核接管中断的处理机制主要包括两个部分:面向应用的编程接口部分和面向底层的处理部分。面向用户应用的编程接口的任务之一是供支持用户安装中断处理例程。面向底层处理部分可以分为两个部分:中断向量表部分和中断处理部分。中断向量表部分主要指中断向量表的定位和向量表中表项内容的形式,最常见的形式就是在具体的向量位置存储的是一些转移程序,转到具体的中断处理部分;另一种形式也就是中断向量位置存放具体的中断处理程序,此仅针对向量号之间彼此有一定的距离,此距离足以存放中断处理程序。面向底层部分的中断处理部分,是整个嵌入式内核中断管理的核心。以下是嵌入式内核中一些专用的处理方式:(1)在嵌入式内核中一般有两个堆栈:系统栈和任务栈;(2)一般嵌入式内核有两种形式:抢占式和非抢占式;(3)在嵌入式内核中,中断时机和调度时机直接影响到系统的实时性。

(二)中断管理模型

1、中断前一后段处理模型。在前面嵌入式内核中断管理模式分析中,嵌入式内核一般采用中断统一接管思想,在中断统一接管中调用用户的中断服务程序。中断管理模式中的中断处理部分又可以细化,如嵌入式Hnux系统中关于中断管理机制中提出了“前半部”和“后半部”的处理思想。其实这种中断管理的思想把中断处理部分按照重要性分两部分,将必须要做的中断处理部分归为“前半部”,即这部分在中断处理部分实施;而将中断处理中可以延迟操作且影响不大的部分归为“后半部”,这部分在退出中断服务程序后实施。通过这样的中断管理思想减少的中断服务时间,为其他外部事件的中断响应提供了更多的时机。在实时内核中还有其他的中断处理机制,它们的思想都是尽量减少中断处理的时间。“中断前部”主要完成外部事件发生中断请求时,系统对其响应所完成的必要功能,如中断现场保护、数据预取和预放等;“置标”部分主要通知某个任务或者线程已有一个中断发生,且中断的前部已完成;“中断后部”并不是在中断服务程序里执行。丽是由接收到标记或者通知的任务或者线程来完成的,主要是完成本应在中断服务里完成的后继工作。

在此“中断前一后段处理模型”中,应该注意两个方面:一是如何划分“中断前部”和“中断后部”;二是要考虑“中断后部”何时执行,取决于用于完成“中断后部”功能的任务或者线程的优先级。

2、单向量多中断处理映射技术。不同嵌入式处理器体系中断向量的支持也不同。为了处理这种多个外部中断共用一个向量的情况,提出了单向量多中断处理技术。当外设中断触发时,首先定位到实向量位置,调用中断统一接口函数,中断统一接口函数对外设中断触发的参数进行测试,寻找到其对应的虚向量,从而触发虚向量处的回调函数,从而实现多个外部中断通过同一的实向量到多个虚向量的映射,解决了单向量多中断处理的问题。

三、实时嵌入式系统中断的优化

中断的实时性是实时系统的一个重要方面。中断响应时间是影响中断实时性的主要因素。中断响应定义为从中断发生到开始执行用户的中断服务代码来处理这个中断的时间。所有实时系统在进入临界区代码段之前都要关中断,执行完临界代码之后再开中断。中断延迟时间即是从发出中断请求到任务开中断的这段时间。保护中断现场有两个作用。首先是为了保护中断前任务的现场。其次,如果发生中断嵌套,还必须保护上层中断的现场。要让中断服务尽快得到处理,就必须减少中断响应时间。但中断延迟时间是由中断前任务决定的,在进入中断时只能通过尽量缩短中断现场保护的时间来达到减少中断响应时间,从而提高中断实时性。我们可以从中断现场的保护的角度对其优化。

(一)传统中断现场保护方法

对于现在大多数嵌入式操作系统,在进人中断时首先做的第一件事就是保护中断发生前的现场,即保存返回地址、程序状态字、堆栈指针以及所有通用寄存器到中断堆栈,以防止用户中断服务子程序对中断返回后现场的破坏。在处理器内核中在处理诸如任务切换和进入中断的现场保护的批量访存指令时,系统将等待,从而影响实时性。

(二)中断现场保护的优化策略

中断现场保护中,保护返回地址、程序状态字、堆栈指针是必需的。否则中断结束后将无法顺利返回。而保护通用寄存器的目的在于防止用户中断服务子程序使用其中的寄存器,造成对原有内容的覆盖而在中断返回后任务执行出错。因此在中断里对通用寄存器的保护完全可以取决于中断服务子程序对通用寄存器的使用情况,仅仅保存中断服务子程序中所用到的有限的几个通用寄存器,而不必保存所有通用寄存器。首先,每个中断服务子程序中所需要的通用寄存器是可知的。其次,在现有的嵌入式操作系统中,往往要求中断服务子程序尽可能的短小。因此,在大多数中断服务子程序中并没有用到所保护的全部通用寄存器,造成对其余通用寄存器的多余保护。

(三)u C/OS-II时钟中断现场保护优化

时钟中断是操作系统中比较重要的一个部分,也是实时性要求较高的部分。在时钟中断处理中,操作最多的集中在OS-TimeTick()和OSIntExit()这两个函数上。它们进行保护即可,从而能更进一步缩短中断响应时间,大大缩短中断响应时间,提高中断实时性。

四、结语

在这我们主要讨论了嵌入式实时系统中断管理技术及优化,从硬件体系和系统管理两方面阐述了影响中断性能的因素,而且从传统的中断现场保护保存所有寄存器的内容看,虽然使得程序的设计得到简化,但是同时造成了多余的寄存器保护,增加了中断响应的时间。有限中断现场保护策略能够根据具体中断服务中所需要使用的通用寄存器而进行相应的有限的保护,缩短了现场保护的时间,使用户中断服务能够尽早的到处理,提高了中断实时性。效率高的编译器能够在不牺牲代码效率的情况下使用尽可能少的寄存器来完成中断服务,从而减少了需要中断现场保护的寄存器数,达到提高中断实时性的要求。