RTX(Reai-Time Extension)是美国VenturCom公司开发对Windows系统的实时扩展子系统。由硬件抽象层HAL(HardWare Abstract Layer)扩展、实时子系统RTSS(Reai-Time Subsystem)及实时开发工具库组成,如图2-2所示。
RTX实现了确定性的实时线程调度、实时环境和与原始Windows环境之间的进程间通信机制以及其他只在特定的实时操作系统中才有的对Windows系统的扩展特性。
RTX被实现为一套库的集合(动态库与静态库),RTSS作为WindoWs XP的内核设备驱动与HAL扩展(见图2-2)。子系统实现前面提到的实时对象和调度器。通过一套被称作RtWinAPI的实时API(RtWinAPI同时也被WindoWs CE和Phar Lap ETS支持),这套库提供了对这些对象的访问方法。RtWinAPI可以被标准Win32环境和RTSS环境调用。虽然在Win32环境中使用RtWinAPI不能提供在RTSS下的确定性,但是却可以允许应用程序在更加友好的Win32编程环境中开发而不是DDK环境。将Win32程序转化为RTX程序只需要重新链接一套不同的库而已。Windows XP服务控制管理器直接将RTX进程和动态链接库(DLL)的可执行映像装入内核的不分页内存中。
图2-2 RTX系统架构
(1)实时硬件抽象层(HAL) HAL是Windows XP系统提供的可被用来进行修改和扩展的资源的一部分。RTX修改HAL有以下3个目的:①在Windows XP和RTX线程之间增加独立的中断间隔;②实现高速时钟和定时器;③实现关闭处理程序。中断隔离意味着Windows XP线程和Windows XP管理的设备不可能中断RTSS,同时Windows XP线程也不能屏蔽RTSS管理的设备。HAL通过控制处理器级的中断屏蔽满足这些条件。当运行RTSS线程时,所有Windows XP控制的中断都被屏蔽掉。当Windows XP线程请求设置中断屏蔽时,作为实际管理中断屏蔽的软件,HAL确保没有任何RTSS中断被屏蔽。Windows XP提供的计时器的最小计时单位为1ms。RT-HAL将其降到了100ns并巨提供了同步(与计时器)的时钟。
(2)RTSS调度器 RTSS调度器采用抢占式策略实现优先级,它可以提升优先级以防止优先级倒置。RTSS环境提供了128种优先级,序号从0~127,0代表最低优先权。RTSS调度器总是在准备运行的线程中运行优先级最高的(当多个准备运行的线程处于同一优先级时,等待时间最长的线程最先运行)。RTSS线程会一直运行直到一个高优先级的就绪线程抢占它,或者它自动释放处理器进入等待状态,还有一种情况是分配给它的时间片用光(缺省值是无限)而另一个同优先级线程已经就绪。(www.daowen.com)
调度器在编码设计阶段就被设计为满足实时处理的需要。最重要的是它的操作是低延迟的,并巨不受它所管理的线程数影响。每个优先级都有自己的等待队列,是一个双向链表。这就使得对于链表的插入(表尾)和删除(表的任何位置)操作的执行时间独立于链表中的线程数。一个数组会纪录哪些链表当前是空的,这个数组是由高速的由汇编代码写成的子程序进行维护的。
当一个RTSS线程运行时,所有Windows XP管理的中断以及任何拥有低优先级的线程所管理的中断都一律被屏蔽掉。相反地,所有拥有高优先级的线程所管理的中断都不会被屏蔽,并巨允许其打断当前线程。除了这些设备中断,其他可以导致当前线程被中断的机制包括一个使得拥有高优先级的线程就绪定时器的到期,一个标明高优先级线程正在等待的同步对象信号(正在运行线程的同步对象)。
为了解决线程抢占的问题,RTSS采用了经典的优先级提升的解决方案。当一个低优先级线程拥有一个高优先级线程等待的对象时,在它拥有对象的时间内会被自动提升到较高的优先级别。
(3)动态链接库 提到Win32就不得不提到DLL库。RTSS支持Win32 DLL API(LoadLibrary函数,GetProcAddress函数)。现在,所有在RTSS的DLL中的静态和全局变量都被链接到其上任何RTSS进程所共享。
(4)使用VisualStudio创建RTX应用程序 通过RTX提供的头文件和库函数,RTX应用程序可以像其他任何Windows应用程序一样被Microsoft Visuai Studio编译和链接。Appiication wizard可以用来更改工程设置和创建源代码框架。从RTX5.1开始,Visuai Studio debugger可以像调试其他Win32进程一样调试运行RTX进程。进程与线程的变量和断点可以被设置和管理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。