1.INtime概述
自从Microsoft公司推出Windows操作系统以来,Windows已经成为目前世界上用户最多,且兼容性最强的操作系统。随着电脑硬件和软件系统的不断升级,微软的Windows操作系统也在不断升级,从16位、32位到64位操作系统。从最初的Windows 1.0到大家熟知的windows3.1 、windows3.2、Windows95、NT、97、98、2000、Me、XP、Server、Vista、Windows 7、Windows 8、Windows 8.1、Windows 10等Windows各种版本的持续更新,微软一直在尽力于Windows操作系统的开发和完善。
作为Windows和Intel的合作伙伴,TenAsys公司也一直紧随Windows的升级,推出兼容最新版Windows的实时操作系统INtime 6.x。
今天,越来越多的系统工程师在设计中依赖于虚拟化技术。随着更新的、更强大的多核CPU平台的出现,设计者们有更多的机会使用虚拟技术去强化设备的性能、降低设备的成本以及简化最终的解决方案。但是,不是所有的嵌入式虚拟技术都满足用简单的方法就能实现嵌入式实时解决方案。
TenAsys集35年在嵌入式实时操作系统上的开发经验,持续提供独立、创新、交互的系统方案,正如Windows和INtime同时并行地运行在相同的硬件平台所展示的那样。TenAsys嵌入式虚拟化技术采用明确分区、非对称多处理(AMP)、自动平衡负载实现具有易用性、扩展性、高效性和精确性的实时解决方案。
TenAsys集成Intel、Microsoft以及其它众多的专业硬件和软件合作商的最先进技术,提供可扩展、可配置、低费用的解决方案。通过TenAsys的解决方案,开发者可以充分利用TenAsys合作商的专长、经验和设计能力,以助于他们自己的设计能最优化,产品尽快地推向市场。
TenAsys INtime和Windows运行在同一台PC中,无需像其它嵌入式系统那样需要准备另外一台开发计算机。INtime既可以在单核CPU中和Windows共享运行,也可以在多核CPU中指定独占若干核运行。INtime独占CPU核运行时,同时独占分配的内存空间及I/O资源。INtime分布式实时操作系统可充分利用CPU中的所有核运行实时应用, 而无需Windows的参与(无界面、存储需求的情况)。INtime通过全局对象的进程间通信(IPC)完成和Windows主机和节点的进程间互操作,所有的进程都运行在受保护的用户模式(Ring 3),内存最大可达4GB空间。
TenAsys INtime软件不仅能在Windows环境中为应用程序添加时间确定性的行为,而且使那些实时应用程序能够达到健壮、可靠和伸缩性。TenAsys的设计使INtime能可靠的在Windows系统中运行,且不影响Windows的原来的应用,同时也保证Windows的重大错误不会传递给INtime而导致整个系统崩溃,甚至不影响其他应用程序(它们之间存在显式交互的情形除外)。
TenAsys INtime 软件所采取的方法是在加载 Windows 操作系统的同时加载一个实时操作系统,以便它们共享相同的 CPU 和中断硬件,但在其他方面相互独立。每个操作系统都被封装为一个虚拟机,各自具有自己的描述符表、内存管理等等。当实时活动必须发生时,计算机上下文将切换到该实时操作系统。当这些活动完成后,计算机上下文将切换回Windows 操作系统。 因为INtime实时操作系统独立于 Windows 操作系统软件,所以可以增强运行实时进程的环境,以及添加附加功能以提高整个平台的健壮性。
INtime和Windows进程都可以用 Microsoft Visual Studio 工具开发,其中 C 和 C++ 由实时环境进行支持。INtime 6.X支持的开发调试环境有Visual C++ 6、Visual Studio.NET 2003、Visual Studio.NET 2005、Visual Studio.NET 2008、Visual Studio.NET 2010、Visual Studio.NET 2012、Visual Studio.NET 2013及Visual Studio.NET 2015。
INtime支持下列任意32 bit或64 bit的Windows版本:
l Windows 10
l Windows 8.1
l Windows 8
l Windows 7
l Windows Vista (SP1及以后)
l Windows XP (SP3及以后)
l Windows Server: 2012 R2, 2012, 2008 R2, 2008, 或2003 R2 (SP2及以后)
l 以上Windows的嵌入式版本
2.INtime基本架构
计算机硬件的虚拟化技术已经发展了几十年。IBM是最早使用计算机硬件虚拟技术的公司,当时是为了满足以前的软件应用能够运行在新的计算机硬件。虚拟机管理器(VMM)负责管理虚拟化硬件,又称超级管理程序,它类似计算机硬件仿真器外的超薄隔离层。计算机硬件仿真器能仿真CPU指令集、关键的硬件元素、操作系统调用以满足系统应用。硬件仿真器和虚拟机的主要不同在于虚拟机可以建立在虚拟硬件之上,即虚拟机的硬件是不需要真实硬件对应的。
1997年TenAsys公司开发了基于Intel架构硬件平台上的INtime实时操作系统。在不对Windows做任何修改的前提下,INtime将Windows系统移到INtime实时任务列表的最低优先级上运行(例如:IDLE任务)。这种“双系统、单平台”的结构(图1)安排使开发者能够方便的在同一硬件平台上构建稳定的嵌入式实时操作系统,在满足系统精确控制的需求的同时,提供系统级监视、企业级连接和其它复杂的用户接口功能。
在Windows中,INtime作为保护模式下的操作系统,和Windows共享硬件CPU等资源。两个保护模式下的操作系统运行在单个平台上的虚拟系统称为“静态虚拟模式”。系统启动时,Windows首先启动,INtime将自己的启动部分插入到硬件和Windows之间。INtime需要使用的内存、I/O硬件对Windows则是不可见的。所有的用户接口I/O,诸如视频、键盘、鼠标依然归属于Windows管理。Windows不能意识到INtime操作系统及任务进程的存在,即使它已经被INtime降低到INtime任务列表的最低优先级。
传统的虚拟机有其自身的不足。对一般的通用操作系统,诸如Windows或Linux,传统的虚拟机对CPU和I/O资源的分配采用公平的策略。传统的虚拟机是为解决网络性能的问题而设计,即为了充分利用服务器资源和简化客户端的开发维护,它不能支持实时系统和I/O应用的时间精确调度。传统虚拟机支持的设备包括CPU、RAM、磁盘、显示器、键盘、鼠标和网络接口,一般不能支持更多的其它设备。由于部分I/O设备很难在多个虚拟机之间复用,它们也就不能被访问。
作为Intel®微架构的虚拟技术(VT)使INtime使用传统的静态虚拟模式实现实时性成为可能。Intel的VT较传统虚拟机增加了VMX根模式,它使用超级模式访问CPU硬件。超级模式能够拦截任何VMX根模式之外的任何操作系统的执行过程,而无需对上层操作系统有任何预设内容的了解。VT虚拟技术,既可以执行Ring 0下直接控制CPU资源的保护模式操作系统,又能提供VMM能完成虚拟中断功能,这是实时系统应具备的基本特征。
结合VT技术的多核CPU构建的虚拟模式称为“动态虚拟模式”。动态虚拟模式能同时隔离和管理通用操作系统和实时操作系统。与静态虚拟模式不同,动态虚拟模式使用“预启动”技术掌管硬件平台的控制权,通用和实时操作系统在虚拟机构建完成后再启动。这样,它既可支持更广泛的操作系统,又可在某操作系统出现故障需要重启时不影响其它的操作系统的运行。
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(最低优先级),低于可配置的优先级阈值的线程可以与多个具有相同优先级的线程分享其时间片。内核计划程序已经进行优化,以获得最佳的中断性能。
3.应用程序环境
INtime 应用程序环境被设计为具有下列功能:
Ø 每个进程都是其他对象(包括线程和物理内存)的容器。由该进程所属线程创建的每个对象都由该进程所有 ,并且在进程终止时不再存在。
Ø 每个进程都具有一个与其他进程的地址空间隔离的平面虚拟地址空间。进程中的代码以用户模式(IA 权限等级 3)执行,从而防止意外访问系统对象和数据。
Ø 每个进程都可以直接访问处理器的输入/输出 (I/O) 空间,而且可以直接访问物理内存。
Ø 在任何进程中,都可以通过系统调用以及用户为中断处理程序和线程编写的代码来直接处理中断。
Ø 错误是按进程分别处理的。默认情况下会挂起出错的线程,并且向全局邮箱中写入一个记录。可以更改默认操作,以便能够在出错地址进入静态系统调试器或应用程序调试器。进程还可以选择获得有关该进程中错误的通知。
Ø 提供了多个 API 以便进程可以使用系统服务。下面的部分中将详细介绍这些 API。
Ø 通过将请求转发给Windows服务以执行所请求的操作,向实时应用程序提供 Windows 服务(对注册表、事件日志和文件系统的访问)。
4.实时 API
INtime 内核提供的标准 API 提供了适合于同步和通讯的对象,以及在进程之间(包括 INtime 和 Windows 进程之间)共享内存的手段。所有对象都通过句柄引用,并且所有句柄对于实时系统都是全局的。实时 API 提供参数检查和内联状态报告。
Ø 进程(Process)
进程拥有其他对象(包括其他进程)和物理内存。当进程创建时,将向其分配一个内存池,它限制了可以分配给该进程的物理内存的数量。尽管 INtime 内核使用分页硬件进行内存管理,但它并不采用请求调页功能。因此,进程被限制在它可以分配的物理内存量的范围内。
进程还具有对象编录,可以在此命名对象。可以按名称搜索该编录。
Ø 线程(Thread)
线程总是由某个进程所有,并且线程所创建的对象由其进程所有.线程会被分配一个优先级,范围为从0到254,其中0是最高优先级。
Ø 信号量(Semaphores)
这些同步对象由一个线程队列和一个计数器组成,类似于Microsoft Win32 信号量。对象创建时,所有 INtime 线程队列都可以被指定为先入先出(FIFO)队列或优先级队列。如果是FIFO队列,则线程按照等待顺序排队;如果是优先级队列,则线程的排队方式为优先级较高的线程出现在队头。
Ø 区域(Region)
这些对象是单个单元信号量,带有防止优先级颠倒的保护。它们采用标准的优先级提升技术,以避免这种情况。另外,拥有区域的线程不能删除,除非它放弃该区域。这些对象类似于 Win32 临界区。
Ø 邮箱 (MailBox)
这些对象由一个线程队列和一个消息队列组成。邮箱可以将两种类型的消息排队。消息可以是其他对象的句柄,也可以是最多包含 128 个字节的数据消息。在 Win32 中没有直接等效的对象。
Ø 堆(Heap)
堆对象类似于 Windows 堆。它为应用程序提供动态内存源。
Ø 其他内存对象
可以为内存区域创建一个句柄,并且随后将该句柄传递给另一个进程以进行映射。然后,可以从这两个进程中访问该内存。
5.Windows接口支持
Ø Windows API
为 Windows 应用程序提供了 API,以使其能够共享在实时内核上创建的对象。标准的实时对象和 Windows对象都是可共享的,以便 Windows 和实时应用程序可以同步和共享数据。阻塞调用由实时内核上的代理线程池处理。
Ø C 库与 C++ 支持
INtime 提供了最新的 C 和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) 接口提供了标准驱动程序。为一系列标准接口和行业接口提供了其他驱动程序。
6.可靠性功能
INtime 的用于增强可靠性的功能包括针对非灾难性系统错误的异常处理以及 Distributed System Manager (DSM) — 它可以监控 INtime 和 Windows 进程,并可以在 Windows 操作系统失败时进行检测和提供帮助。
6.1异常处理
INtime 内核设计所关注的主要问题之一是提供处理系统异常错误(一般性保护错误、页面错误、堆栈错误等等)的非灾难性手段,并且尽量减少对实时内核和 Windows 系统的损害。因此,实时系统具有一个默认异常处理程序,该程序会向全局邮箱中写入一个记录,详细描述出错的线程及其环境,然后挂起出错的线程。可以从 INtime 或 Windows 系统中监控该邮箱,并且存在可以从错误记录中提取信息(包括寄存器转储、堆栈跟踪和相关调试信息)的工具。
6.2 分布式系统管理
Distributed System Manager(“DSM”)是一个协作性多进程应用程序,用于管理整个 INtime 系统。任何进程(Windows 或 INtime)都可以选择监控任何其他参与协作的进程,或者被其他参与协作的进程监控。如果被监控的进程被删除,或者到该进程的通讯途径被中断,或者 Windows 系统或 INtime 系统被破坏,都会向监控进程发送通知消息。可以使用该服务来提供系统级完整性。
6.3 Windows 停止处理
DSM 的一个重要优点是它能够检测到 Windows 平台何时失败。如果出现这种情况,INtime 内核中的 DSM 软件将通知所有参与的进程 Windows 已经失败,并且还将负责调度 Windows 的线程挂起。此时,INtime 内核可以继续无限期地执行其进程,而这些进程可以选择在此情况下采取特殊操作,例如使外围设备进入已知状态。在稍后某个时刻,实时进程可以选择恢复 Windows 线程,并使 Windows 可以继续关闭和重置计算机。
7.可伸缩性功能
INtime 操作系统能够支持复杂的大型应用程序。在上述共享体系结构中,已经发现典型的平台能够允许 INtime 内核消耗 CPU 带宽的 50% 到 60%,然后 Windows 图形用户界面 (GUI) 和其他服务才会开始受到不利影响。INtime 中独立内核的优势是可以将它重定位到另一 CPU 或另一平台,从而使应用程序能够随着其对平台的需求的增加而扩大规模。接口模式将从虚拟机体系结构更改为共享内存,然后又更改为物理通讯链路(如以太网或串行线路),但 Windows 和实时应用程序之间的软件接口不会改变。这样,无论选择了哪种硬件体系结构,都可以使用相同的二进制文件。