INtime实时操作系统(RTOS)
For
Microsoft Windows XP
Microsoft Windows XP Embedded
Microsoft Windows XP Embedded with Service Pack 1
For
Microsoft Windows XP
Microsoft Windows XP Embedded
Microsoft Windows XP Embedded with Service Pack 1
引言
人们正在越来越多地选择 Microsoft Windows XP 和 Windows XP Embedded 操作系统来运行需要某种实时性行为的专用应用程序。Windows XP Embedded 与 Windows XP 桌面软件基于相同的二进制文件,它在许多方面都是可供选择的最佳平台,但 Windows XP Embedded 和 Windows XP 自己无法管理此类系统所需要的具有严格实时性要求,因此需要增强该平台的实时功能。在Windows XP 平台上添加实时扩展方案时,已有许多解决方案在 Windows XP 内核设备驱动程序提供了某种实时功能,但此类解决方案没有考虑到为用户提供可容易进行应用程序开发的应用环境,也没有考虑对于许多应用程序进行调用。TenAsys Corporation 出品的 INtime 软件可以做到不仅为应用程序增加实时性功能,并且使实时应用程序存在于强大、可靠和可调用资源的环境。
一 INtime简介
IRMX? RTOS 技术的发展已有25年以上的历史,非常的成熟、可靠。INtime以此技术为基础,它将强大的工业级控制与丰富的Windows功能相结合,从而使得应用程序能够充分利用所有Windows特性和成千上万现有的应用程序,而无需牺牲实时响应。使用TenAsys软件来执行实时Windows应用程序不仅能够降低软件的复杂性,而且还可以压缩冗余的硬件成本,显著地压缩了产品上市时间。
通过使用INtime软件,可获得非常精确且稳定的的微秒级响应时间,并丝毫不会降低安全性、可靠性和系统性能。正如Windows应用程序在用户模式下(ring3)执行时一样,通过INtime的保护模式编程模型来进行管理的实时应用程序也可在用户模式下执行,因而获得高稳定性。其他类型的解决方案要求实时应用程序在Windows内核中(ring0)完全无保护地运行,在这种情况下,可导致错误指针、栈溢出、页面错误等编程错误,这些将会十分明显的影响到实时环境和Windows环境的稳定性。但是,如果在INtime受保护的实时系统内部运行实时应用程序,就绝对不会发生这种问题。
TenAsys实时操作系统已在全球成千上万种应用程序中得到验证,并且至今已无故障运行了数百万小时。
二INtime 系统体系结构
INtime 是与 Windows 操作系统共享硬件平台的实时操作系统。Windows中安装的组件包括一个 Windows内核驱动程序和一些 Windows 服务。该驱动程序管理用于运行内核和实时应用程序的内存,并且管理这两个系统之间的通讯接口。
Windows将实时内核加载到已分配的内存中,然后使Context从 Windows 切换到 INtime 内核。将创建一个低优先级线程,其功能是将计算机Context切换回 Windows 系统。因为该线程将被所有其他实时线程占先,所以只要牵涉到实时内核,Windows 系统都是实时系统的空闲任务。 在 INtime中,任何实时中断都被直接处理,并且所有其他中断都在中断控制器被屏蔽。当Context返回到 Windows 时,这些中断将被解除屏蔽,以使其可以被 Windows 正常处理。当在 Windows Context中发生实时中断时,将插入 Windows IDT 以引起到 INtime Context的上下文切换,以便可以处理中断。
系统计时器通常在 Windows 和 INtime 之间共享。硬件计时器被改编以便以 Windows 要求的速率更高的速率中断,并且只根据需要调用 Windows 处理程序。通常情况下,INtime 内核以高得多的速率(时间间隔可以低至 100μs)获得计时器中断,以便提供更精确的计时服务。计时器处理优化能够避免在 Windows 和 INtime 之间进行不必要的Context切换。
某些硬件抽象层 (HAL) 入口点被截获和监控,以便防止 Windows 内核执行某些不需要的操作,例如屏蔽实时中断或者更改硬件系统计时器频率。HAL 文件不是由软件修改或替换的。
Ntime 内核为实时虚拟机提供操作系统服务。它提供此类内核通常会提供的实时服务,包括一个基于优先级的抢先式计划程序,该程序执行基于优先级的中断处理。线程优先级的范围是从 0(最高优先级)到 255(最低优先级),低于可配置的优先级阈值的线程可以与多个具有相同优先级的线程分享其时间片。内核计划程序已经进行优化,以获得最佳的中断性能。 得到的平台表现出良好的性能,最重要的是它的行为是可预测的。
INtime 是与 Windows 操作系统共享硬件平台的实时操作系统。Windows中安装的组件包括一个 Windows内核驱动程序和一些 Windows 服务。该驱动程序管理用于运行内核和实时应用程序的内存,并且管理这两个系统之间的通讯接口。
Windows将实时内核加载到已分配的内存中,然后使Context从 Windows 切换到 INtime 内核。将创建一个低优先级线程,其功能是将计算机Context切换回 Windows 系统。因为该线程将被所有其他实时线程占先,所以只要牵涉到实时内核,Windows 系统都是实时系统的空闲任务。 在 INtime中,任何实时中断都被直接处理,并且所有其他中断都在中断控制器被屏蔽。当Context返回到 Windows 时,这些中断将被解除屏蔽,以使其可以被 Windows 正常处理。当在 Windows Context中发生实时中断时,将插入 Windows IDT 以引起到 INtime Context的上下文切换,以便可以处理中断。
系统计时器通常在 Windows 和 INtime 之间共享。硬件计时器被改编以便以 Windows 要求的速率更高的速率中断,并且只根据需要调用 Windows 处理程序。通常情况下,INtime 内核以高得多的速率(时间间隔可以低至 100μs)获得计时器中断,以便提供更精确的计时服务。计时器处理优化能够避免在 Windows 和 INtime 之间进行不必要的Context切换。
某些硬件抽象层 (HAL) 入口点被截获和监控,以便防止 Windows 内核执行某些不需要的操作,例如屏蔽实时中断或者更改硬件系统计时器频率。HAL 文件不是由软件修改或替换的。
Ntime 内核为实时虚拟机提供操作系统服务。它提供此类内核通常会提供的实时服务,包括一个基于优先级的抢先式计划程序,该程序执行基于优先级的中断处理。线程优先级的范围是从 0(最高优先级)到 255(最低优先级),低于可配置的优先级阈值的线程可以与多个具有相同优先级的线程分享其时间片。内核计划程序已经进行优化,以获得最佳的中断性能。 得到的平台表现出良好的性能,最重要的是它的行为是可预测的。
1 应用程序环境
INtime 应用程序环境被设计为具有下列功能:
每个进程都是其他对象(包括线程和物理内存)的容器。由该进程所属线程创建的每个对象都由该进程所有,并且在进程终止时不再存在。
每个进程都具有一个与其他进程的地址空间隔离的平面虚拟地址空间。进程中的代码以用户模式(IA 权限等级 3)执行,从而防止意外访问系统对象和数据。
每个进程都可以直接访问处理器的输入/输出 (I/O) 空间,而且可以直接访问物在任何进程中,都可以通过系统调用以及用户为中断处理程序和线程编写的代码来直接处理中断。
错误是按进程分别处理的。默认情况下会挂起出错的线程,并且向全局邮箱中写入一个记录。可以更改默认操作,以便能够在出错地址进入静态系统调试器或应用程序调试器。进程还可以选择获得有关该进程中错误的通知。
INtime 应用程序环境被设计为具有下列功能:
每个进程都是其他对象(包括线程和物理内存)的容器。由该进程所属线程创建的每个对象都由该进程所有,并且在进程终止时不再存在。
每个进程都具有一个与其他进程的地址空间隔离的平面虚拟地址空间。进程中的代码以用户模式(IA 权限等级 3)执行,从而防止意外访问系统对象和数据。
每个进程都可以直接访问处理器的输入/输出 (I/O) 空间,而且可以直接访问物在任何进程中,都可以通过系统调用以及用户为中断处理程序和线程编写的代码来直接处理中断。
错误是按进程分别处理的。默认情况下会挂起出错的线程,并且向全局邮箱中写入一个记录。可以更改默认操作,以便能够在出错地址进入静态系统调试器或应用程序调试器。进程还可以选择获得有关该进程中错误的通知。
2 提供了多个 API 以便进程可以使用系统服务。下面的部分中将详细介绍这些 API。
通过将请求转发给 Windows 服务以执行所请求的操作,向实时应用程序提供 Windows 服务(对注册表、事件日志和文件系统的访问)。
实时 API
INtime 内核提供的标准 API 提供了适合于同步和通讯的对象,以及在进程之间(包括 INtime 和 Windows 进程之间)共享内存的手段。所有对象都通过句柄引用,并且所有句柄对于实时系统都是全局的。对象包括:
进程
进程拥有其他对象(包括其他进程)和物理内存。当进程创建时,将向其分配一个内存池,它限制了可以分配给该进程的物理内存的数量。尽管 INtime 内核使用分页硬件进行内存管理,但它并不采用请求调页功能。因此,进程被限制在它可以分配的物理内存量的范围内。进程还具有对象编录,可以在此命名对象。可以按名称搜索该编录。
线程
线程总是由某个进程所有,并且线程所创建的对象由其进程所有。线程会被分配一个优先级,范围为从 0 到 254,其中 0 是最高优先级。
信号量
这些同步对象由一个线程队列和一个计数器组成,类似于 Microsoft Win32 信号量。对象创建时,所有 INtime 线程队列都可以被指定为先入先出 (FIFO) 队列或优先级队列。如果是 FIFO 队列,则线程按照等待顺序排队;如果是优先级队列,则线程的排队方式为优先级较高的线程出现在队头。
区域
这些对象是单个单元信号量,带有防止优先级颠倒的保护。它们采用标准的优先级提升技术,以避免这种情况。另外,拥有区域的线程不能删除,除非它放弃该区域。这些对象类似于 Win32 临界区。
邮箱
这些对象由一个线程队列和一个消息队列组成。邮箱可以将两种类型的消息排队。消息可以是其他对象的句柄,也可以是最多包含 128 个字节的数据消息。在 Win32 中没有直接等效的对象。
堆
堆对象类似于 Windows 堆。它为应用程序提供动态内存源。
其他内存对象
可以为内存区域创建一个句柄,并且随后将该句柄传递给另一个进程以进行映射。然后,可以从这两个进程中访问该内存。
进程拥有其他对象(包括其他进程)和物理内存。当进程创建时,将向其分配一个内存池,它限制了可以分配给该进程的物理内存的数量。尽管 INtime 内核使用分页硬件进行内存管理,但它并不采用请求调页功能。因此,进程被限制在它可以分配的物理内存量的范围内。进程还具有对象编录,可以在此命名对象。可以按名称搜索该编录。
线程
线程总是由某个进程所有,并且线程所创建的对象由其进程所有。线程会被分配一个优先级,范围为从 0 到 254,其中 0 是最高优先级。
信号量
这些同步对象由一个线程队列和一个计数器组成,类似于 Microsoft Win32 信号量。对象创建时,所有 INtime 线程队列都可以被指定为先入先出 (FIFO) 队列或优先级队列。如果是 FIFO 队列,则线程按照等待顺序排队;如果是优先级队列,则线程的排队方式为优先级较高的线程出现在队头。
区域
这些对象是单个单元信号量,带有防止优先级颠倒的保护。它们采用标准的优先级提升技术,以避免这种情况。另外,拥有区域的线程不能删除,除非它放弃该区域。这些对象类似于 Win32 临界区。
邮箱
这些对象由一个线程队列和一个消息队列组成。邮箱可以将两种类型的消息排队。消息可以是其他对象的句柄,也可以是最多包含 128 个字节的数据消息。在 Win32 中没有直接等效的对象。
堆
堆对象类似于 Windows 堆。它为应用程序提供动态内存源。
其他内存对象
可以为内存区域创建一个句柄,并且随后将该句柄传递给另一个进程以进行映射。然后,可以从这两个进程中访问该内存。
实时 API 提供参数检查和内联状态报告。
Win32 API
尽管 Win32 API 缺少一些用于实时编程的有用功能,INtime 仍然提供了一个 Win32 API,以便方便地从 Windows 应用程序传输代码。该实现是 Windows CE Win32 实现的丰富子集,包括 Win32 对象的有用子集 (WaitForMultipleObjects),并带有扩展以管理中断和外围设备互联 (PCI) 总线配置。
尽管 Win32 API 缺少一些用于实时编程的有用功能,INtime 仍然提供了一个 Win32 API,以便方便地从 Windows 应用程序传输代码。该实现是 Windows CE Win32 实现的丰富子集,包括 Win32 对象的有用子集 (WaitForMultipleObjects),并带有扩展以管理中断和外围设备互联 (PCI) 总线配置。
Windows API
为 Windows 应用程序提供了 API,以使其能够共享在实时内核上创建的对象。标准的实时对象和 Win32 对象都是可共享的,以便 Windows 和实时应用程序可以同步和共享数据。阻塞调用由实时内核上的代理线程池处理。
为 Windows 应用程序提供了 API,以使其能够共享在实时内核上创建的对象。标准的实时对象和 Win32 对象都是可共享的,以便 Windows 和实时应用程序可以同步和共享数据。阻塞调用由实时内核上的代理线程池处理。
C 库与 C++ 支持
INtime 提供了美国国家标准局(与 ANSI 兼容)的 C 库,以及用标准模板库 (STL) 提供了对 EC++ (Embedded C++) ANSI 标准的支持。
INtime 提供了美国国家标准局(与 ANSI 兼容)的 C 库,以及用标准模板库 (STL) 提供了对 EC++ (Embedded C++) ANSI 标准的支持。
其他服务
提供了一个传输控制协议/网际协议 (TCP/IP) 的协议组,它派生于 BSD Net3 体系结构。为 Intel、3Com 和 Realtek 接口适配器提供了以太网驱动程序,并且为与 NE2000 兼容的 ISA 接口提供了以太网驱动程序。通过串行线路网际协议 (SLIP) 支持串行链路。 以开发工具包的形式提供了 USB 支持,以便开发 USB 客户端软件。为 Universal Host Controller (UHCI)、Open Host Controller (OHCI) 和 Enhanced Host Controller (EHCI) 接口提供了标准驱动程序。为一系列标准接口和行业接口提供了其他驱动程序。
提供了一个传输控制协议/网际协议 (TCP/IP) 的协议组,它派生于 BSD Net3 体系结构。为 Intel、3Com 和 Realtek 接口适配器提供了以太网驱动程序,并且为与 NE2000 兼容的 ISA 接口提供了以太网驱动程序。通过串行线路网际协议 (SLIP) 支持串行链路。 以开发工具包的形式提供了 USB 支持,以便开发 USB 客户端软件。为 Universal Host Controller (UHCI)、Open Host Controller (OHCI) 和 Enhanced Host Controller (EHCI) 接口提供了标准驱动程序。为一系列标准接口和行业接口提供了其他驱动程序。
可靠性功能
INtime 的用于增强可靠性的功能包括针对非灾难性系统错误的异常处理以及 Distributed System Manager (DSM) ,它可以监控 INtime 和 Windows 进程,并可以在 Windows 操作系统失败时进行检测和提供帮助。
异常处理
INtime 内核设计所关注的主要问题之一是提供处理系统异常错误(一般性保护错误、页面错误、堆栈错误等等)的非灾难性手段,并且尽量减少对实时内核和 Windows 系统的损害。因此,实时系统具有一个默认异常处理程序,该程序会向全局邮箱中写入一个记录,详细描述出错的线程及其环境,然后挂起出错的线程。可以从 INtime 或 Windows 系统中监控该邮箱,并且存在可以从错误记录中提取信息(包括寄存器转储、堆栈跟踪和相关调试信息)的工具。
Distributed System Manager
Distributed System Manager(“DSM”)是一个协作性多进程应用程序,用于管理整个 INtime 系统。任何进程(Windows 或 INtime)都可以选择监控任何其他参与协作的进程,或者被其他参与协作的进程监控。如果被监控的进程被删除,或者到该进程的通讯途径被中断,或者 Windows 系统或 INtime 系统被破坏,都会向监控进程发送通知消息。可以使用该服务来提供系统级完整性。
Windows 停止处理
DSM 的一个重要优点是它能够检测到 Windows 平台何时失败。如果出现这种情况,INtime 内核中的 DSM 软件将通知所有参与的进程 Windows 已经失败,并且还将负责调度 Windows 的线程挂起。此时,INtime 内核可以继续无限期地执行其进程,而这些进程可以选择在此情况下采取特殊操作,例如使外围设备进入已知状态。在稍后某个时刻,实时进程可以选择恢复 Windows 线程,并使 Windows 可以继续关闭和重置计算机。
可扩展性功能
INtime 操作系统能够支持复杂的大型应用程序。在上述共享体系结构中,已经发现典型的平台能够允许 INtime 内核消耗 CPU 带宽的 50% 到 60%,然后 Windows 图形用户界面 (GUI) 和其他服务才会开始受到不利影响。INtime 中独立内核的优势是可以将它重定位到另一 CPU 或另一平台,从而使应用程序能够随着其对平台的需求的增加而扩大规模。接口模式将从虚拟机体系结构更改为共享内存,然后又更改为物理通讯链路(如以太网或串行线路),但 Windows 和实时应用程序之间的软件接口不会改变。这样,无论选择了哪种硬件体系结构,都可以使用相同的二进制文件。
INtime 的用于增强可靠性的功能包括针对非灾难性系统错误的异常处理以及 Distributed System Manager (DSM) ,它可以监控 INtime 和 Windows 进程,并可以在 Windows 操作系统失败时进行检测和提供帮助。
异常处理
INtime 内核设计所关注的主要问题之一是提供处理系统异常错误(一般性保护错误、页面错误、堆栈错误等等)的非灾难性手段,并且尽量减少对实时内核和 Windows 系统的损害。因此,实时系统具有一个默认异常处理程序,该程序会向全局邮箱中写入一个记录,详细描述出错的线程及其环境,然后挂起出错的线程。可以从 INtime 或 Windows 系统中监控该邮箱,并且存在可以从错误记录中提取信息(包括寄存器转储、堆栈跟踪和相关调试信息)的工具。
Distributed System Manager
Distributed System Manager(“DSM”)是一个协作性多进程应用程序,用于管理整个 INtime 系统。任何进程(Windows 或 INtime)都可以选择监控任何其他参与协作的进程,或者被其他参与协作的进程监控。如果被监控的进程被删除,或者到该进程的通讯途径被中断,或者 Windows 系统或 INtime 系统被破坏,都会向监控进程发送通知消息。可以使用该服务来提供系统级完整性。
Windows 停止处理
DSM 的一个重要优点是它能够检测到 Windows 平台何时失败。如果出现这种情况,INtime 内核中的 DSM 软件将通知所有参与的进程 Windows 已经失败,并且还将负责调度 Windows 的线程挂起。此时,INtime 内核可以继续无限期地执行其进程,而这些进程可以选择在此情况下采取特殊操作,例如使外围设备进入已知状态。在稍后某个时刻,实时进程可以选择恢复 Windows 线程,并使 Windows 可以继续关闭和重置计算机。
可扩展性功能
INtime 操作系统能够支持复杂的大型应用程序。在上述共享体系结构中,已经发现典型的平台能够允许 INtime 内核消耗 CPU 带宽的 50% 到 60%,然后 Windows 图形用户界面 (GUI) 和其他服务才会开始受到不利影响。INtime 中独立内核的优势是可以将它重定位到另一 CPU 或另一平台,从而使应用程序能够随着其对平台的需求的增加而扩大规模。接口模式将从虚拟机体系结构更改为共享内存,然后又更改为物理通讯链路(如以太网或串行线路),但 Windows 和实时应用程序之间的软件接口不会改变。这样,无论选择了哪种硬件体系结构,都可以使用相同的二进制文件。
3 小结
TenAsys Corporation 的 INtime 软件被设计为不仅能够向 Windows 平台添加实时功能,而且其添加这些功能的方式能够为实时应用程序提供可靠且可伸缩的平台。如果将该解决方案与 Windows XP Embedded 配合使用,则能够为您的嵌入式设备提供强大的、可扩展的、确定性的操作系统。