TenAsys实时操作系统入门1 INtime体系结构2 INtime的安装使用3 INtime试用版3.0例程作者:sigwell试用版下载:/Intime1 INtime体系结构1.1 INtime概述目前,人们正在越来越多地选择Microsoft Windows XP 和Windows XP Embedded 操作系统来运行满足某种特定需求的专用应用程序。
Windows XP Embedded 与 Windows XP 桌面软件是基于相同的二进制文件,它们在许多方面都是可供选择的最佳平台。
但是,当应用需要操作系统提供严格的实时接口和功能时, Windows XP Embedded 和 Windows XP 由于自身的原因而无法满足设计者的要求。
针对这方面的需求,人们已经开发出很多面向 Windows XP 平台添加实时扩展的方案,向Windows XP 内核设备驱动程序级提供某种实时功能,但此类解决方案基本上都没有考虑开发环境的易用性和健壮性,也没有考虑和已有的广泛的Windows应用程序资源共享。
INtime软件不仅能在Windows环境中为应用程序添加时间确定性的行为,而且使那些实时应用程序能够达到健壮、可靠和可伸缩性。
TenAsys的设计使INtime能可靠的在Windows系统中运行,且不影响Windows的原来的应用,同时也保证Windows的重大错误不会传递给INtime而导致整个系统崩溃,甚至不影响其他应用程序(它们之间存在显式交互的情形除外)。
TenAsys INtime 软件所采取的方法是在加载 Windows 操作系统的同时加载一个实时操作系统,以便它们共享相同的 CPU 和中断硬件,但在其他方面相互独立。
每个操作系统都被封装为一个虚拟机,各自具有自己的描述符表、内存管理等等。
当实时活动必须发生时,计算机上下文将切换到该实时操作系统。
当这些活动完成后,计算机上下文将切换回Windows 操作系统。
因为INtime实时操作系统独立于 Windows 操作系统软件,所以可以增强运行实时进程的环境,以及添加附加功能以提高整个平台的健壮性。
添加INtime实时功能的平台的典型案例是将应用分成两种不同的部分:一些部分不需要实时服务,而利用 Windows XP 平台的功能;另一些部分需要实时内核的实时性能。
进程间通讯 (IPC) 服务从实时内核进行扩展,以使 Windows 应用程序能够共享对在实时内核上创建的对象的访问。
数据采集应用程序即为一个简单的例子,其中实时进程负责驱动硬件接口和处理收到的数据,而 Windows 进程提供操作员界面并显示结果。
这两种进程都可以用 Microsoft Visual Studio 工具开发,其中 C 和 C++ 由实时环境进行支持。
TenAsys Corporation 的 INtime 软件被设计为不仅能够向 Windows 平台添加实时功能,而且其添加这些功能的方式能够为实时应用程序提供可靠且可伸缩的平台。
如果将该解决方案与Windows XP Embedded 配合使用,则能够为您的嵌入式设备提供健壮的、可伸缩的、确定性的操作系统。
1.2 INtime基本架构INtime 是被设计为与Windows操作系统共享硬件平台的实时操作系统。
Windows中安装的组件包括一个Windows内核驱动程序和一些Windows服务。
该驱动程序管理用于运行内核和实时应用程序的内存,并且管理这两个系统之间的通讯接口。
一个Windows服务将实时内核加载到已分配的内存中,然后使上下文从 Windows 切换到 INtime内核。
INtime将创建一个低优先级线程,用于把Windows的任务压缩后放入该线程。
在INtime任务结束以后,该线程负责将计算机上下文切换回 Windows 系统。
因为该线程的优先级仅高于INtime Idle线程,低于所有其他实时线程。
所以,只要牵涉到Intime 实时内核任务在运行时,Windows任务都是处于等待状态。
在 INtime 上下文时,任何实时中断都被直接处理,并且所有其他中断都被屏蔽。
当上下文返回到 Windows 时,非INtime的中断将被解除屏蔽,以使其可以被 Windows 正常处理。
当在 Windows 上下文中发生实时中断时,将插入Windows IDT以引起到INtime上下文的上下文切换,以便可以处理中断。
系统计时器通常在 Windows 和 INtime 之间共享。
硬件计时器被改编以便按比Windows 要求的速率更高的速率中断,并且只根据需要调用 Windows 处理程序。
通常情况下,INtime 内核以高得多的速率(时间间隔可以低至 100μs)获得计时器中断,以便提供更细粒度的计时服务。
计时器处理优化能够避免在 Windows 和 INtime 之间进行不必要的上下文切换。
另外,Windows某些硬件抽象层 (HAL) 入口点被截获和监控,以防止Windows 内核执行某些不需要的操作,例如屏蔽实时中断或者更改硬件系统计时器频率。
INtime不是由通过修改或替换Windows的HAL.DLL文件实现硬件抽象层的入口点截获和监控的,而是通过修改已载入内存中的HAL.DLL实现的。
INtime 内核为实时虚拟机提供操作系统服务。
它提供此类内核通常会提供的实时服务,包括一个基于优先级的抢占式调度程序,该程序执行基于优先级的中断处理。
线程优先级的范围是从0(最高优先级)到 255(最低优先级),低于可配置的优先级阈值的线程可以与多个具有相同优先级的线程分享其时间片。
内核计划程序已经进行优化,以获得最佳的中断性能。
1.3 应用程序环境INtime 应用程序环境被设计为具有下列功能:¾每个进程都是其他对象(包括线程和物理内存)的容器。
由该进程所属线程创建的每个对象都由该进程所有,并且在进程终止时不再存在。
¾每个进程都具有一个与其他进程的地址空间隔离的平面虚拟地址空间。
进程中的代码以用户模式(IA 权限等级3)执行,从而防止意外访问系统对象和数据。
¾每个进程都可以直接访问处理器的输入/输出 (I/O) 空间,而且可以直接访问物理内存。
¾在任何进程中,都可以通过系统调用以及用户为中断处理程序和线程编写的代码来直接处理中断。
¾错误是按进程分别处理的。
默认情况下会挂起出错的线程,并且向全局邮箱中写入一个记录。
可以更改默认操作,以便能够在出错地址进入静态系统调试器或应用程序调试器。
进程还可以选择获得有关该进程中错误的通知。
¾提供了多个 API 以便进程可以使用系统服务。
下面的部分中将详细介绍这些 API。
¾通过将请求转发给Windows服务以执行所请求的操作,向实时应用程序提供 Windows 服务(对注册表、事件日志和文件系统的访问)。
1.4 实时 APIINtime 内核提供的标准 API 提供了适合于同步和通讯的对象,以及在进程之间(包括INtime 和 Windows 进程之间)共享内存的手段。
所有对象都通过句柄引用,并且所有句柄对于实时系统都是全局的。
实时 API 提供参数检查和内联状态报告。
¾进程(Process)进程拥有其他对象(包括其他进程)和物理内存。
当进程创建时,将向其分配一个内存池,它限制了可以分配给该进程的物理内存的数量。
尽管 INtime 内核使用分页硬件进行内存管理,但它并不采用请求调页功能。
因此,进程被限制在它可以分配的物理内存量的范围内。
进程还具有对象编录,可以在此命名对象。
可以按名称搜索该编录。
¾线程(Thread)线程总是由某个进程所有,并且线程所创建的对象由其进程所有.线程会被分配一个优先级,范围为从0到254,其中0是最高优先级。
¾信号量(Semaphores)这些同步对象由一个线程队列和一个计数器组成,类似于Microsoft Win32 信号量。
对象创建时,所有 INtime 线程队列都可以被指定为先入先出(FIFO)队列或优先级队列。
如果是FIFO队列,则线程按照等待顺序排队;如果是优先级队列,则线程的排队方式为优先级较高的线程出现在队头。
¾区域(Region)这些对象是单个单元信号量,带有防止优先级颠倒的保护。
它们采用标准的优先级提升技术,以避免这种情况。
另外,拥有区域的线程不能删除,除非它放弃该区域。
这些对象类似于 Win32 临界区。
¾邮箱(MailBox)这些对象由一个线程队列和一个消息队列组成。
邮箱可以将两种类型的消息排队。
消息可以是其他对象的句柄,也可以是最多包含 128 个字节的数据消息。
在 Win32 中没有直接等效的对象。
¾堆(Heap)堆对象类似于 Windows 堆。
它为应用程序提供动态内存源。
¾其他内存对象可以为内存区域创建一个句柄,并且随后将该句柄传递给另一个进程以进行映射。
然后,可以从这两个进程中访问该内存。
1.5 Windows接口支持¾Win32 API尽管Win32 API 缺少一些用于实时编程的有用功能,INtime 仍然提供了一个 Win32 API,以便方便地从 Windows 应用程序传输代码。
该实现是 Windows CE Win32 实现的丰富子集,包括 Win32 对象的有用子集 (WaitForMultipleObjects),并带有扩展以管理中断和外围设备互联 (PCI) 总线配置。
¾Windows API为 Windows 应用程序提供了 API,以使其能够共享在实时内核上创建的对象。
标准的实时对象和 Win32 对象都是可共享的,以便 Windows 和实时应用程序可以同步和共享数据。
阻塞调用由实时内核上的代理线程池处理。
¾ C 库与 C++ 支持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) 接口提供了标准驱动程序。