基于Windows平台的实时信息处理方法

2020-06-29 12:14段红亮刘天博邵春收朱元元
计算机测量与控制 2020年6期
关键词:实时性线程串口

段红亮,2,刘天博,邵春收,王 鹏,朱元元

(1.北京航天长征飞行器研究所,北京 100076;2.西北工业大学 机电学院,西安 710072)

0 引言

大部分武器系统设备都是强实时性的,设备之间信息交互都有严格的时间限制,要求毫秒级或微秒级,甚至是纳秒级,所以主流的弹上设备均基于DSP、FPGA、单片机等架构或者是组合架构实现,也有少部分采用实时操作系统平台。地面测试设备用于武器设备的开发测试、出厂测试、上弹总装前后或者年度定检等等一系列测试工作,是所有武器必配设备,地面测试设备是武器设备的“诊断医生”,只有经过地面测试设备认证为“健康”的弹上设备才允许使用,地面测试设备的研制开发甚至要早于弹上设备。

地面测试设备与弹上设备进行通信和指令交互,完成功能测试等。微软的Windows操作系统由于具备良好通用性、图形用户界面以及众多的技术支持基础而成为武器地面测试设备的首选解决方案。目前绝大部分型号的地面测试设备为了兼顾成本和开发难度等因素,采用Windows+x86架构实现。但基于抢占式多任务调度策略就决定了Windows系统的非实时性属性,作为通用高性能操作系统而设计的操作系统,不能保证中断响应时间的确定性,也没有提供让线程获得确定执行时间的机制。在测试时地面测试软件上偶尔会出现某条指令超时的现象,这时就很难判断是弹上设备指令确实超时,还是由于地面测试设备非实时性而造成的时间误判。

针对Windows平台的非实时性问题,工业控制上一般采用RTX硬实时解决方案[1-2],RTX(Real-Time eXtension)是由美国IntervalZero公司开发的基于Windows平台扩展的实时控制解决方案,但需要单独购买RTX软件扩展包,且RTX信息处理软件独立于Windows平台需求单独开发,而武器地面测试设备由于生产量少、需求变化快等特点,成本与周期上不适于采用RTX[3]。文献[4]中提出了一种循环缓存处理方法来提高Windows系统的实时性,这种用空间换时间的方法在操作系统负载较小时一定程度上提高了实时性,但由于对缓存读写线程仍为操作系统的一个普通线程,在操作系统负载较大时,循环缓存处理方法的实时性不能得到保证。

文献[5]提出了一种Windows操作系统中的排他性线程独占技术,使用该线程可以独占一个CPU逻辑核,而不再受Windows任务管理器的调度,物理上将该逻辑核等效DSP使用,保证了信息处理的实时性。基于文献[5-7]的研究成果,面向武器地面测试设备,本文提出了一种实用的实时信息处理方法,可以实时处理以太网、串口等有线或无线I/O信息,该方法开发难度低、周期短且不增加设备成本。

论文结构如下:第1部分简要分析了Windows非实时性机理,第2部分详细阐述高精度软时钟技术及实现方法,第3部分地面测试软件的实时测试方法,第4部分介绍对本方法的有效性试验分析,最后一部分对全文进行了总结。

1 Windows非实时性机理

1.1 x86的指令集

x86的GPP架构本身不能实现纳秒级强实时性要求,这是通用CPU的CISC指令集决定的,有两个层次原因,首先是CISC指令集长短不一,所以占用CPU时钟周期不一;二是Intel在指令集中有很多优化算法,同一条汇编指令在同一个CPU的不同负载下可能会被编译成不同的汇编指令,目前Intel的CPU的时钟周期都是亚纳秒级,所以x86 CPU难以实现纳秒级的高精度定时,用于十纳秒级定时精度是普遍可以接受的。从目前的弹上设备所要求的毫秒级或微秒级实时性要求来看,x86 CPU架构本身的定时精度是可以忽略不计。

1.2 调度原理

Windows操作系统调度及响应时延的不确定性。以串口通信为例(并口、以太网口类似),地面测试设备与弹上设备的信息交互流程如图1所示,忽略弹上设备处理时延(或者假定为一个确定值)。

图1 信息流示意图

例如,有条指令要求弹上设备在100 ms内回复指令,那么处理过程如下:

1)测试软件打开某个串口,或在软件初始化时即打开这个串口,并配置串口参数;

2)当有个指令发送时,测试软件调用WinAPI串口函数,发送该指令,同时启动计时器,设置100 ms的超时值;

3)数据由用户态进入内核态,操作系统调度器需要将串口发送API指令调入到CPU任务队列中,当占用CPU当前时间片时,CPU执行该指令;

4)CPU将发送数据写入到串口Tx寄存器中,同时通知串口有数据到达,请发送;

5)串口通过物理层链路发送给DS设备,DS设备响应该指令后发送回令给串口;

6)串口接收回令数据,放入到Rx寄存器中,同时通知操作系统有数据到达,通知消息本身是放入到操作系统的消息队列中;

7)操作系统调度器在消息队列中读到串口的通知后,需要将串口接收API指令调入到CPU任务队列中,当占用CPU当前时间片时,CPU执行该指令;

8)CPU从串口Rx寄存器读取数据,交给测试软件,由内核态进入用户态;

9)测试软件根据数据协议解析该数据,确认为当前指令的有效回令后,停止计时器,同时判断计时器是否超100 ms。至此一个完整的信息交互结束。

Windows是基于消息响应机制的多线程的非实时性操作系统,尽管微软没有公开Windows操作系统内核,当通过一些公开资料和微软的技术文档可知,一个线程一旦调入到CPU中,那么最少占有一个时间片的时间长度才会有可能被调出,而一个时间片长为1/16 s。

在Windows的任务管理器的进程栏可以看到,假如用户未打开任何一个应用程序,操作系统都会有约100个进程在运行,地面测试软件运行时,也只是其中之一个进程。这些进程都有不同的优先级,所以当一个进程从进入CPU调度队列到占用CPU时间片,这个时间是不可预知的,这是Windows非实时性的最主要根源所在。具体到我们的串口收发数据流程中,第3)步和第7)步是时延不确定的最主要环节。

1.3 试验验证

本文进行了一项测试,当地面测试设备只运行测试软件,其他所有应用软件都停止(包括杀毒软件),程序循环发送指令,等待100 ms,若超时未收到回令则停止循环并报错,若正常则继续循环。测试6个小时左右,发生2次超时。

作为对比测试,在运行测试软件循环测试的同时,打开杀毒软件,进行全盘查杀病毒,测试1个小时左右,发生了12次超时。主要原因是杀毒时频繁的磁盘IO操作占用CPU资源,杀毒软件进程也需要大量占用CPU时间片,从而提高了与地面测试软件的碰撞冲突概率,造成了大量的超时现象。

2 高精度软时钟

高精度时钟源是实现信息实时处理的前提和基准。例如通信设备上多采用外部时钟源或卫星授时方法,而在地面测试设备上外挂时钟源或增加卫星授时模块的方法会显著增加复杂度和成本,不易实现。

为了使各种实时处理任务能在Windows平台上正确地执行,利用操作系统API函数实现软时钟是可行的。然而Windows目前提供的延时函数最小时间粒度都是ms级,且理想情况下精度仅能达到百ms级,所以直接调用API函数也不能保证时间精度。

对于单核CPU,Intel汇编指令RDTSC可以获得纳秒级的精度[8]。然而,这项技术不再适用于多核环境[9]。为了构造高精度的软件时钟,本文采用了文献[5]所提出的排他性线程独占技术,它为输出实时行为的特定任务分配一个独占的处理器内核。一个线程被创建并专用于在一个独占的CPU逻辑核上执行。该线程所做的一切就是调用RDTSC来计算当前系统时间。由于线程是不可中断的,这种方法为内核模式的实时过程获得了一个高精度的时钟实用程序。图2为构造这种时钟的伪代码。

图2 高精度时钟源伪代码

通过设置软件时钟,可以在每一个阈值时间段中执行一次TIME_OUT事件。例如,将阈值定义为1 ms或1 μs,在主频为2.8 GHz频率的CPU上,观察到实际的超时时间周期比阈值大几纳秒,这是合理的,因为在CPU中执行单个汇编指令所需的时间为纳秒级。所以本方法所生成的软时钟可以达到十纳秒级精度。

3 测试软件实时信息处理方法

3.1 测试软件实时性设计

为保证地面测试软件实时性,信息交互线程也采用排他性线程独占技术,独占一个CPU逻辑核,由于Intel的i5系列之后都是至少包含了4个物理核(单核双线程技术,等效为8个逻辑核),所以地面测试设备中被独占2~3个逻辑核后并不会显著操作系统的其他功能,如图3所示。

由图3可以看到,逻辑核3、5、7分别被3个线程独占,在运行中被独占的逻辑核的CPU使用率始终为100%,不会被操作系统任务管理器中断,从而保证了实时性。

信息交互线程在与弹上设备发生信息交互时,使用本文第2章所设计的高精度时钟源来作为时钟基准,可以精确计算出弹上设备回令是否超时。

3.2 测试软件高速计算设计

地面测试软件与弹上设备接口分为有线和无线接口两类,其中有线接口多为串口、并口、1553B接口和以太网口等,无线接口多为各类专用无线通信接口,如遥测系统无线接口等。

一般来说,有线接口的计算量不大,若地面测试软件与弹上设备接口为无线接口,无线通信协议的计算量是非常巨大的,尤其是物理层,包含了信道编码与解调、FFT等。一般来说,GPP的运算能力是不能胜任基带数字信号处理计算的,这也是为什么到目前为止商用无线通信都是用专用基带芯片的原因。为了突破这个计算瓶颈,可充分借鉴FPGA的原理,地面测试软件可将所有输入与输出结果映射为一个查找表(LUT),然后将LUT装载到CPU的二级缓存中。一方面节省了计算的时间开销,另一方面减少了查找的时间[10-14]。在通用CPU中,不同存储器的典型容量和访问时间如图4所示。

图4 通用存储器容量及访问时间

3.3 测试软件低时延传输设计

由图1可以看到串口在Windows平台下的信息流,是包含了多个环节。

在信息流中,每一个环节意味着数据的转移和传递,为了避免程度中内存拷贝所引入的处理时延,要在地面测试软件设计开发时尽可能多地采用数据“零”拷贝,即利用MDL(memory descriptor list)来进行内存操作,这样可显著减小信息传输时延,避免造成地面测试设备向弹上设备回令时超时。

4 实验结果与分析

用两台地面测试设备搭建试验场景。为不失一般性,测试设备之间采用串口(RS422)通信,两台测试设备均是Windows平台,安装了采用了本文所述实时信息处理方法的软件。试验方法如下:

1)测试设备1通过串口向测试设备2发送一个串口数据帧1,同时记录时间戳T1;

2)测试设备2收到数据帧1后,立即向测试设备1返回一个数据帧2;

3)测试设备1收到数据帧2后,记录时间戳T2,计算出时间差ΔT=T2-T1;

4)重复上述步骤1)~ 3),记录1 000次时间差数据;

5)打开测试设备1上杀毒软件,执行全盘扫描,重复上述步骤1)~4),记录1 000次时间差数据;

6)关闭测试设备1上杀毒软件,打开测试设备2上杀毒软件,执行全盘扫描,重复上述步骤1)~4),记录1 000次时间差数据;

7)同时打开测试设备1和测试设备2上杀毒软件,执行全盘扫描,重复上述步骤1)~4),记录1 000次时间差数据。

4次测试结果分别如图5所示。

图5 测试结果及对比

由测试结果分析,4次测试均值依次为12.2 μs,12.5 μs,12.1 μs,12.0 μs,相差不大。由图5可见,4次结果均方差也分布在2~4之间,数据一致性较好,从而证明了本方法的有效性。

5 结束语

面向Windows平台下的地面测试设备,本文提出了一种基于排他性线程独占技术和高精度软时钟技术的实时信息处理方法,可以实时处理以太网、串口等有线或无线I/O信息,该方法开发难度低、周期短且不增加设备成本。首先简要分析了Windows非实时性机理,进而详细阐述高精度软时钟技术和地面测试软件的实时信息处理方法,最后对本方法的有效性试验验证分析,测试数据一致性较好。

猜你喜欢
实时性线程串口
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
基于EM9000工控板高性能双串口通信模型设计与实现
MCS—51单片机中的多串口通讯技术的应用
计算机控制系统实时性的提高策略
可编程控制器的实时处理器的研究
基于B/S的实时用户行为检测管理系统设计与实现
微机串口的测试诊断
基于VC串口通信的实现