1.1. POSIX接口
POSIX(可移植操作系统接口)是ISO/IEEE下的软件团体代表开发的标准。该标准的目的是实现多操作系统应用的源代码级移植。现下为实时操作系统提供的服务定义了一套接口(POSIX标准1003.1b,以前称作1003.4)。利用这些接口编程就会使应用从一个操作系统轻松的移植到另外一个操作系统上。
POSIX接口包括:
m 异步I/O
m 信号量
m 消息对列
m 内存管理
m 信号
m 调度
m 时钟
1.2. I/O系统
VxWorks的I/O系统对多种输入输出设备提供统一的存取机制。既可以调用基本的I/O函数:creat(),remove(),open(),close( ),read(),write(),和ioctl();也可以调用高层I/O函数,譬如printf(),scanf()。
VxWorks也提供了缓冲输入输出函数包(stdio),包含ANSI-C兼容函数,譬如fopen(),fclose(),fread(),fwrite(),getc()和putc()。在许多情况下,这些函数提高了输入输出的性能。
VxWorks的I/O系统也包含了POSIX兼容的异步输入输出:输入输出和任务的其它动作同时进行的函数库。
VxWorks包含下面设备的驱动程序:串行通信,磁盘,RAM磁盘,SCSI磁带,用于任务间通信的管道设备,以及网络设备。如果有必要的话,应用开发者还可以轻松的编写其它设备的驱动程序,加入VxWorks中。
VxWorks的I/O系统允许驱动程序完全控制如何执行用户请求的服务。驱动程序可以方便的实现不同的协议,唯一的设备特定的函数,甚至不同的文件系统,与输入输出系统毫无干涉。VxWorks提供了一些高层包可以让驱动程序方便的实现公共的设备协议和文件系统。
1.3. 本地文件系统
VxWorks包含几个本地文件系统来使用块设备(磁盘)。这些设备使用标准的接口以至可以方便的挂接在文件系统上。本地文件系统包含了SCSI磁带文件系统和CD-ROM文件系统。VxWorks的输入输出架构使得VxWorks系统可以同时具有多个不同的文件系统。
1.3.1. MS-DOS兼容文件系统
VxWorks提供dosFs文件系统,兼容MS-DOS文件系统。DosFs为了适应实时应用的各种需求提供了相当的弹性。主要特性如下:
m 树状的文件目录结构,允许在一卷上创建任意多个文件。
m 可以指定文件的连续存储,连续存储的文件可以提高性能,而非连续存储的文件可以充分利用磁盘空间。
m 与现在广泛使用的存取媒介兼容,在dosFs文件系统下创建的磁盘可以与用MS-DOS个人计算机创建的磁盘交互使用。MS-DOS下的硬盘可以被正确配置的dosFs文件系统识别。
m 文件名区分大小写,并且文件名的长度不受限制(MS-DOS文件系统下文件名长度约定为8字符+文件扩展名)。
dosFs为面向文件的设备驱动程序提供的服务在dosFsLib里实现。
1.3.2. RT-11兼容文件系统rt11Fs
rt11Fs文件系统兼容于RT-11操作系统。该文件系统一直被实时应用使用,因为该文件系统下的所有文件都是连续存储的。但是它缺少树状文件组织结构,树状文件组织结构对大容量磁盘是特别有用的。同时,呆板的连续存储空间分配会导致大量的磁盘碎片。所以,dosFs要优于rt11Fs。
VxWorks实现的rt11Fs文件系统可以对所有文件利用字节寻址进行随机存取。每一个打开的文件都有一块缓冲内存来优化对文件的读写。
rt11Fs为面向文件的设备驱动程序提供的服务在rt11FsLib里实现。
1.3.3. 裸碟文件系统
VxWorks提供简单的裸碟文件系统rawFs。rawFs将整个磁盘当作一个大文件。通过指定字节偏移rawFs可以读写磁盘的某一部分,并且做简单的缓冲。当仅需要简单,低级的磁盘输入输出操作时,rawFs有空间和速度的优势。
rawFs为面向文件的设备驱动程序提供的服务在rawFsLib里实现。
1.3.4. SCSC顺序文件系统:tapFs
VxWorks为不使用标准文件和目录结构的磁带设备提供tapFs文件系统。磁带象裸碟一样被看成是一个大文件。上层负责组织这个大文件里的数据。
tapFs为面向文件的设备驱动程序提供的服务在tapFsLib里实现。
1.3.5. CDROM文件系统
VxWorks为了让应用读写按照ISO9660文件系统标准格式化的CDROM设备提供了cdRomFs。初始化cdRomFs文件系统后,挂接cdRomFs到一个CDROM设备,就可以用POSIX标准的I/O调用来读CDROM。
1.3.6. 可替换的文件系统
在VxWorks下,文件系统不紧系于特定的设备或设备驱动。设备可以挂接到任意文件系统。你可以按照介于文件系统,驱动程序,VxWorks的输入输出系统之间的接口标准提供你自己的文件系统来使用标准设备。
1.4. 虚拟内存
VxWorks对有内存管理单元的板提供虚拟内存支持。绑定的虚拟内存支持能够使部分内存不缓冲,这在多处理器之间共享内存或使用DMA传输是非常有用的。
非绑定的虚拟内存支持是可选组件VxVMI提供的。VxVMI可以让应用创建文本段和可读的异常向量表,并且包含一套函数让用户来管理自己的虚拟内存场景。
1.5. 共享内存对象
下面的共享内存对象(可选组件VxMP提供)是用来在不同处理器上的任务间进行通信和同步用的。
l 共享信号量是用来同步不同处理器上任务的,同时也可以用作它们对共享数据结构的互斥访问。
l 共享消息对列是用来在不同处理器上任务之间传递消息。
l 共享内存管理是用来为不同处理器上的任务分配公共的内存空间。
1.6. 运行在目标机上的工具程序
在Tornado开发系统中,在主机上安装和执行整套的开发工具,详情参见Tornado用户指导。并且目标机上运行的外壳程序,符号表,模块上下载工具也可被配置入VxWorks系统中,例如创建动态配置的VxWorks运行系统。
1.7. C++开发支持
VxWorks支持C++开发,Tornado随带GNU的C++编译器。Tornado编译器提供可重入的异常处理。Tornado包含一新版的iostream库和SGI实现的标准模板库。Tornado的交互式开发工具调试器,外壳,和渐增模块加载工具都包含了对C++的支持。
而且你可以选购组件WIND基础类。WIND基础类包含下面的C++库。
VxWorks包装类
Rogue Wave的Tool.h++库
1.8. 工具库
VxWorks为应用开发者提供了常用用途的子函数。这些函数被组织为如下所描述的子函数库。我们希望你在开发过程中尽可能利用这些子函数。利用这些函数库既可以减少开发时间又可以减少应用的内存需求。
1.9. 中断处理支持
VxWorks提供处理硬件中断和软件陷阱的函数,不一定需要求助于汇编语言。VxWorks里有连接C函数到硬件中断向量和操纵处理器中断级别的函数。
1.10. 看门狗定时器
定时器可以让用户在指定时间间隔后重复执行自定义的C函数。当指定时间间隔过去后,超时函数在系统时钟的中断级被调用直到定时器被取消。定时器机制完全不同于内核的时延机制。
1.11. 消息LOG
VxWorks提供了简单消息LOG机制,可以让应用发送错误和状态消息到一专门LOG的任务,这一任务将该消息格式化并输出到系统里的LOG设备(譬如向系统控制台,磁盘,内存)。消息LOG机制可以在任务级或中断级使用。
1.12. 内存分配
VxWorks提供内存管理机制。内存动态分配,释放,在内存池重新分配一块内存。内存管理方案是一十分通用的方案,允许VxWorks管理多个独立的内存池。
1.13. 字符串格式化和扫描
VxWorks包含完整的字符串格式化和扫描的ANSI-C函数集。实现prinf()/scanf()基于格式化的编解码以及相关联的函数。
1.14. 线性和环形缓冲操作
bLib库包含象拷贝,填充,比较等的缓冲操作函数,这些函数在执行速度上都得到了优化。ringLib库包含常用的管理先进先出环形缓冲的函数,而且可以让一个读内存的任务和一个写内存的任务“同时”访问内存而不需要互锁内存访问权限。
1.15. 链表操作
lstLib库包含创建和所有操作双链表的函数。
1.16. ANSI C库
VxWorks提供ANSI X3.159-1989标准规定的所有C库。ANSI C定义了如下的库:assert, ctype, errno, float, limits, locale, math, setjmp, signal, stdarg, stdio, stddef, stdlib, string, 和 time.
头文件float.h, limits.h, errno.h, 和 stddef.h给出了ANSI C规定的申明和定义。下面列出了常用的库:
ansiCtype 字符操作的函数库。
ansiMath 三角函数,指数函数,对数函数。
ansiSetjmp 实现远程转移的函数库。
ansiStdarg 遍历不定长参数列表。
ansiStdio 输入输出流操作函数。
ansiStdlib 包括很多类型的函数,象类型转换,内存分配,和随机数产生函数。
sigLib 信号操作函数。
1.17. 性能估计
对VxWorks或应用的函数进行计时对了解和优化实时系统的性能是非常有用的。VxWorks提供了很多计时机制来帮助估计实时系统的性能。
VxWorks计时器可以对任何函数获一组函数的执行进行计时。因为系统时钟中断太缓慢而不能为快速执行的函数提供必须的时间精度。可以对一组函数进行多次重复计时直到一次的执行时间在合理的精度范围内。关于执行计时,详情参见timexLib.
VxWorks提供了spy工具。Spy工具可以提供每个任务的CPU使用时间,在中断级的CPU使用时间,空闲时间。时间以百分比或以毫秒显示出来。关于spy工具详情参见spyLib.
监测VxWorks系统功能更强大的工具是WindView,详情参见WindView用户指导。
1.18. 目标机代理
目标机代理遵照WDB协议,允许Tornado开发工具和VxWorks目标机连接。目标机代理是以tWdbTask任务的形式运行。Tornado目标机服务器发送调试请求到目标机代理。目标机代理根据调试请求信息控制和操纵VxWorks系统中的其它任务。
默认情况下,目标机代理和服务器通过网络通信。然而,你可以利用其它的可供选择的通信路径。关于默认配置和可选择的配置详情参见Tornado用户指导。
1.19. 板支持包
sysLib和sysALib是和目标机相关的库。这些库是VxWorks可移植的关键。他们为所有板的硬件功能提供了一致的软件接口。主要包括硬件初始化,中断处理和触发,硬件时钟管理,本地内存空间和总线内存空间的映射,内存排列等。
板支持包(BSP)包含启动ROM和其它启动方式。大部分都是从开发主机上导入运行映像。
1.20. VxWorks模拟器
VxWorks模拟器,VxSim,是一个模拟VxWorks目标机的程序,用作原型和测试环境。集成的VxSim允许运行一个模拟器。选购的VxSim加入了网络支持,允许模拟器利用网络工具通过Internet地址和主机通信(网络上的其它结点)。
VxSim是VxWorks的一个很重要的解决方案,在很多情况下,VxSim与运行在远端目标机上的真正的VxWorks系统具有一致的功能。你可以链入应用,重编VxWorks核,就象在其它的VxWorks跨平台开发环境中一样。所有的Tornado开发工具对VxSim同样适用。
VxSim与运行在目标机上的VxWorks的不同之处是:运行在主机上的VxSim是作为主机的一个进程。因为代码是在主机自己的CPU体系结构中,所以VxSim不能仿真指令。因为不能与目标机的硬件交互,所以VxSim不适合模拟开发设备驱动程序。然而VxWorks的任务调度在VxSim进程中实现了,是真正的基于优先级的抢占式任务调度。这意味着以可移植方式写的VxWorks应用,如果与硬件不关联或很少关联,可以在VxSim和VxWorks目标机上的方便的移植。
1.21. 客户服务
(略)
2. OS基础
2.1. 简介
现代实时操作系统都是基于多任务和任务间通信的概念。多任务允许实时应用被设计成多个相互独立的任务,每个任务有自己的执行线索和系统资源集;任务间通信允许任务通过同步和通信来协调他们的动作。在VxWorks,任务间通信机制有快速的信号量机制,消息和管道,以及网络透明传输Socket。
实时系统里的另一重要机制是中断处理。因为中断是通知系统外部事件的常用机制,为了快速响应中断,VxWorks的中断服务程序在特殊的运行环境中运行,不同于任务的运行环境。
本章主要讨论多任务内核,任务机制,任务间通信,中断处理机制,这些VxWorks运行环境的核心所在。
2.2. WIND特性和POSIX特性
POSIX标准扩展为实时内核定义了一套接口。为了增加应用的可移植性,VxWorks内核,包括了POSIX接口和VxWorks特定接口。
本手册用Wind限定符来标识为VxWorks内核Wind设计的特有功能。例如,在相应的章节里有Wind信号量和POSIX信号量。
2.3. 任务将应用设计成多个独立的,但是相互合作的程序是很有必要的。每个执行的程序称为任务。在VxWorks,任务对大部分系统资源有直接的,共享的存取权限。同时又维护一个足够控制任务执行线索的独立的运行环境。