1.1 引言
一说到软件系统,脑子里面就会闪现很多名词:
信息系统
桌面应用系统
实时系统
嵌入式系统
事件触发系统
时间触发系统
这些名字搞得脑子很乱,感觉都熟悉,又有些陌生,还是需要简单的介绍一下。
1.2 信息系统
信息系统 information system,简称IS,特别是商业信息系统,代表了大量的应用系统。尽管信息系统开发中所遇到的挑战与本专栏关注的问题有很大的不同,但是对这类系统有一个基本的了解对学习还是有很大的帮助。因为目前大多数嵌入式实时系统的开发方法都是根据信息系统的开发方法改编而来的。
计算工资报表的应用程序,就是一个基本的信息系统。
假设这个应用程序的使用用户根据员工的资料来打印公司的工资报表。各种票据的打印可能要花好几个小时。如果在财务年度的末尾要求做一套特别复杂的计算,打印工作就会被延迟几分钟,这就给打印工作带来了一些不方便。在后面的例子中将这些不方便和实时系统中的延迟可能造成的破坏性影响做一个对比。
信息系统往往和针对保存在磁盘中的大量数据所进行的存储与处理联系在一起。在20世纪60年代和70年代,一般使用COBOL这样的面向文档的语言来实现。现在,这样的系统仍在广泛应用,不过大多数是出于维护阶段,而很少使用类似语言做新的应用设计。
实现现代信息系统的更常用的方法是关系数据库(Relational database),通过SQL语言进行数据的存储和操作。关系数据库技术是建立在严谨的数据基础之上,成熟且安全。设计数显可靠的大型关系数据库系统不是意见简单的事,但开发用于家庭和小型企业的应用系统所需的技巧却挺简单。因此,像这样的小型关系数据库系统的实现不再称为一种专门的处理。现在,关系数据库的设计工具作为标准office软件包的一部分,一般PC都装有office软件。但是信息系统的设计人员又有新的要求。比如,除了传统的文字档案,许多医院希望能存储各种图形,比如ECG、X光、CT、MRI等设备的图像。
关系数据库系统可以用于存储图像、语音和波形,这种系统针对处理有限种类的数据类型而做的优化效果并不理想。这使得我们面向对象的数据库系统的兴趣逐渐增加。通常认为面向对象的数据库系统使用起来更灵活。
1.3 桌面系统
在许多信息系统中,桌面/工作站换将和通用桌面应用程序,如文字处理软件占主导地位。现代桌面环境的普遍特征是用户通过搞分辨率的图形屏幕、键盘、鼠标与应用程序交互。如下图所示。除了复杂的用户交互之外,桌面系统独特的特征是与之相关的操作系统,这些操作系统包含DOS、Windows、UNIX等。嵌入式系统的开发人员用到的操作系统一般都是LINUX或者RTOS等。
1.4 实时系统
大多数软件系统的用户都希望他们的应用程序能够快速响应,不同的是,对于大多数信息系统和一般的桌面应用程序而言,快速反应仅仅是个有用的性能,但是对于许多实时系统,实时性是一个必要的性能。比如下图所示的飞机自动驾驶系统。
假设飞机已经进入了所需要的航向,而系统为了使飞机保持航线必须做出频繁且有规律的变化来操作方向舵、升降舵、副翼和发动机的工作状态。
飞机自动驾驶系统的重要特点是需要以毫秒ms为时间标度,非常迅速地处理输入信息,并产生输出信息。因为即使方向舵偏转角度有微小延迟也能导致难以接受的飞机振动,极端条件下甚至会导致飞机坠毁。所以,飞机的自动驾驶系统是一个非常有代表性的实时系统。
在实践中为了验证飞行系统能够正确工作,仅仅保证尽可能快的处理是不够的。与其他许多实时系统一样,在实时情况下,主要性能是处理的确定性。这就意味着实时系统需要能够保证某个任务总是在特定的时间内完成,比如2ms内,或者在特定的时间间隔中去执行。如果处理过程不能满足和这个要求,那么这个系统就是个垃圾。
引用一个项目经理的话:我们建立了驻留在小型遥测计算机上的系统,该系统配备有各种各样的传感器来测量电磁场、温度、声音、机械损伤等。我们分析这些信号并通过以太网将这些信号传送到计算机。计算机安装在一根一米长的杆的一端,而杆的另一端是核装置。将他们一起放在地下的大洞中,当装置被引爆时,计算机在爆炸波到来前采集数据。爆炸后的钱2.25ms是最值得关注的。当然对于计算机来说闷在远未到达第三个ms之前,信号已经迅速平稳下来,我们认为这就是实时约束。
很明显,在这种情况下,实时系统必须及时完成数据采集,因为它没有第二次机会,这是个比较极端的例子,军工级别的实时系统就是这么硬,没有商量的余地。许多应用系统,比如前面的飞机自动驾驶系统,和这个核武器的信号采集系统是不一样的,需要对某个传感器的信号进行反复采样,经过数字处理之后产生适当的模拟输出信号。假设以1000HZ对输入信号进行采样,那么作为一个实时系统,就必须在1ms之内将结果计算出来。
所谓的实时系统,并不是要求快速处理,而是要求在规定的时间内能处理。
1.5 嵌入式系统
嵌入式系统普遍与实时系统是有关系的,但是嵌入式系统的分类与桌面系统一样。包括实时的和特殊的信息系统。嵌入式系统是一种包含至少一个可编程计算机(一般是单片机、DSP等处理器)的系统。嵌入式系统的应用非常广泛,如各种家电、厨房小家电、汽车、飞机等都用到嵌入式系统。
为了支持复杂的操作系统和应用程序,PC市场是由对更高性能的需求来驱动的,而嵌入式系统的市场却有着不同的需要。如在汽车工业中相关法规和技术改造意味着越来越多的汽车将包含嵌入式系统。有时候,引入这种系统主要是用来降低生产成本,比如用CAN通讯可以节省很多电缆,引入悬挂系统,可以大幅改善乘坐的舒适性和操作性。
汽车的信号灯电路就是一个非常简单的嵌入式系统。在这个系统中,需要通过方向盘旁边的开关控制各种车灯,使司机在转弯、变道、倒车、停车时,有灯光可以提示其他人。在有些国家,要求方向信号灯电路与尾灯共同起作用,有些地方需要信号灯电路与尾灯单独运行。如果一款汽车想在不同的国家销售,比如尊重国家的法规,使用嵌入式系统,就可以简单的解决这些问题,可以通过嵌入式软件,让尾灯系统和其他的灯系统共同作用也可以独立作用,修改软件比修改硬件的成本低多了。
1.6 事件触发系统
有很多应用系统被描述成事件触发的,比如现代桌面系统,各种各样的应用程序在运行中必须对鼠标、键盘的输入事件做出反应,用户希望这个反应是及时的,比如用键盘打字的时候,希望键盘敲下去,字就出来,而不是等一会再出来。
在嵌入式系统中,中断就是一个典型的事件触发行为。
什么是中断
从底层来看,中断是一种硬件机制,用来通知处理器发生了某件事情,这个事情有可能是内部的,比如定时器的溢出,也可能是外部的,比如各种通讯收到信息。
从上层的角度来看,中断提供了一种创建多重任务应用机制,也就是说从表面上看,系统可以在单个处理器上同时执行多个任务,下图给出了一个嵌入式中断处理的原理。
在上图,系统执行两个后台任务:任务1和任务2.在执行任务1器件,有一个中断产生,中断服务程序ISR1处理这个事件。在执行任务2器件,另外一个中断产生,这次由ISR2处理。
1.7 时间触发系统
与事件触发系统一样,时间触发系统既可以用于桌面系统,也可以用于嵌入式系统。下面的两个例子可以帮助理解时间触发系统与事件触发系统的差异。
医院里有一位医生,必须在一些护理人员的帮助下,24小时照管一些危重病人。医生有两个方案:
方案1:安排护理人员在某个病人出现严重问题的时候来喊医生,这就是时间触发解决方案。
方案2:把闹钟设置为每小时闹铃,当闹钟响的时候,医生就去探访病人,检查病人是否需要治疗,这就是时间触发的解决方案。
对于大多数的医生来说,事件触发系统更有吸引力,因为医生在晚上就可以好好的去睡觉了,有事情护理人员回来找的,大概率能睡好几个小时。如果用时间触发系统,那医生每隔一小时就起来看一下,晚上就别想睡了。
但是嵌入式系统里面的处理器是不需要睡觉的,采用时间触发就更好,把那个时间间隔调小一点,反正是处理器干活。
与安全相关的应用系统中,事件触发方法为首选,主要是因为系统的行为可以预计。在看看那个医生的例子,你就会明白为什么会这样。
假设采用事件触发,当有一个病人不舒服的时候,护理人员觉得是小问题,自己就能处理,就不喊医生了,几个小时后,有4个病人不舒服,护理人员忙不过来,就去喊医生,医生一看不得了,其中有两个病人有严重的并发症,马上进行手术,救活了其中的一个,另一个只好等死。
如果采用时间触发,因为每小时医生都会过来检查,小问题在恶化前就会得到及时的处理,不会因为等太久而产生悲剧。只是医生累点,但是病人的生命得到了保障。
在嵌入式系统中,医院的这种场合反应到事件驱动的应用系统中,就是同时发生了多个事件,或者说有多个中断。处理器同时只能处理其中的一个事件,或者中断。嵌入式工程是不要认为,中断事件不会被丢失,最少在51单片机的处理系统中,如果同时产生多个相同优先级的中断,某些中断就会被丢失。
需要处理同时发生的多个事件,不但增加了系统的复杂性,也降低了对时间触发系统在所有情况下的行为做出预计的能力。相比而言,时间触发系统中,设计人员能够通过仔细安排可控的顺序,保证一次只处理一个事件。
正如已经提到的,时间触发系统的可预测性使得这种系统成为安全相关的系统的首选,在这些系统中可靠性是关键的设计要求。然而,对可靠性的要求不仅仅局限于诸如飞机的自动驾驶系统,甚至低端的应用中也有要求,如闹钟,录像机,监控系统等。
除了提高可靠性之外,时间触发系统将有利于降低CPU的负荷,并减少存储器的使用量。因此,即使是小型嵌入式系统,采用时间触发的方式也是有好处的。
1.8 小结
本章介绍的时间触发系统,将在后面的章节继续完善细化。
下一章将讨论各种不同的软件模式。