VxWorks操作系统基础,操作系统原理 (ZZ)

 1 实时操作系统概述 3
1.1 实时操作系统 3
1.2 基本概念 3
2 VxWorks的系统综述 4
2.1 VxWorks 4
2.2 Tornado 6
3 VxWorks操作系统基础 7
3.1 VxWorks的任务 7
3.1.1 多任务 7
3.1.2 任务的状态迁移 8
3.1.3 Wind内核的任务调度 9
3.1.4 任务控制 9
3.1.5 任务扩展性 12
3.1.6 任务错误状态:errno 13
3.1.7 任务异常处理 14
3.1.8 共享代码和代码重入 14
3.1.9 VxWorks的系统任务 17
3.2 任务间通信 18
3.2.1 共享数据结构 18
3.2.2 互斥 18
3.2.3 信号量Semaphores 19
3.2.3.1 二值信号量 20
3.2.3.2 互斥信号量 22
3.2.3.3 计数信号量 23
3.2.3.4 信号量的特殊参数 24
3.2.4 消息队列 24
3.2.5 管道 26
3.2.6 跨网络的任务间通信 26
3.2.7 信号 26
3.3 中断服务代码 27
3.3.1 应用代码与中断连接 27
3.3.2 中断堆栈 28
3.3.3 ISRs的一些特殊限制 28
3.3.4 中断级别的异常 28
3.3.5 保持高中断级别 29
3.3.6 对高中断级别的ISRs的一些附加限制 29
3.3.7 中断与任务间的通信 29
3.4 看门狗计时器Watchdog Timers 29
4 VxWorks中的函数库: 30
4.1 TaskLib: 30
4.2 ErrnoLib: 30
4.3 SigLib: 31
4.4 LstLib: 31
4.5 MemLib: 32
注:本文档主要是对VxWorks内核的一个简单介绍;由于word经常把一句话的第一个字母变成大写,所以文中函数名的第一个字母的大小写可能不对。
1 实时操作系统概述
1.1 实时操作系统
在计算的早期开发的操作系统的最原始的结构形式是一个统一的实体(monolithic)。在这样的系统中,提供的不同功能的模块,如处理器管理、内存管理、输入输出等,通常是独立的。他们在执行过程中并不考虑其他正在使用中的模块,各个模块都以相同的时间粒度运行,即严格按时间片分时方式运行。
由于现代实时环境需要许多不同的功能,以及在这样的环境中存在的并发活动所引起的异步性和非确定性,操作系统变得更加复杂。所以早期操作系统的统一结构的组织已经被更加精确的内部结构所淘汰。

层次结构的起点----内核
操作系统的最好的内部结构模型是一个层次性的结构,最低层是内核。这些层次可以看成为一个倒置的金字塔,每一层都建立在较低层的功能之上。 内核仅包含一个操作系统执行的最重要的低层功能。正象一个统一结构的操作系统,内核提供了在高层软件与下层硬件之间的抽象层。然而,内核仅提供了构造操作系统其他部分所需的最小操作集。
对一个实时内核的要求。
一个实时操作系统内核需满足许多特定的实时环境所提出的基本要求,这些包括:
多任务:由于真实世界的事件的异步性,能够运行许多并发进程或任务是很重要的。多任务提供了一个较好的对真实世界的匹配,因为它允许对应于许多外部事件的多线程执行。系统内核分配CPU给这些任务来获得并发性。
抢占调度:真实世界的事件具有继承的优先级,在分配CPU的时候要注意到这些优先级。基于优先级的抢占调度,任务都被指定了优先级, 在能够执行的任务(没有被挂起或正在等待资源)中,优先级最高的任务被分配CPU资源。换句话说,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务。
快速灵活的任务间的通信与同步:在一个实时系统中,可能有许多任务作为一个应用的一部分执行。系统必须提供这些任务间的快速且功能强大的通信机制。内核也要提供为了有效地共享不可抢占的资源或临界区所需的同步、互斥机制。
方便的任务与中断之间的通信:尽管真实世界的事件通常作为中断方式到来,但为了提供有效的排队、优先化和减少中断延时,我们通常希望在任务级处理相应的工作。所以需要杂任务级和中断级之间存在通信。
性能边界:一个实时内核必须提供最坏情况的性能优化,而非针对吞吐量的性能优化。我们更期望一个系统能够始终以50微妙执行一个函数,而不期望系统平均以10微妙执行该函数,但偶尔会以75微妙执行它。
特殊考虑:由于对实时内核的要求的增加,必须考虑对内核支持不断增加的复杂功能的要求。这包括多进程处理,Ada和对更新的、功能更强的处理器结构如RISC的支持。
拥有其它名字的内核
许多商用化的内核支持的功能远强于上面所列的要求。在这方面,他们不是真正的内核,而更象一个小的统一结构的操作系统。因为他们包含简单的内存分配、时钟管理、甚至一些输入输出系统调用的功能。

1.2 基本概念
任务(TASK):任务是由计算机所执行的一项活动,它包括一个程序和于这个程序有关的数据、程序状态及计算机资源等。
进程(PROCESS):在UNIX操作系统里,任务被称作进程。
任务和进程都可以作为调度单位被内核调度执行,但在一些既有任务又有进程的系统里任务和进程是有区别的,主要表现在:任务可以直接对内层进行寻址,而进程不能,进程只能从其父进程里继承一些特定的属性,而任务却能和父任务在几乎相同的环境下运行。
任务的状态:包括运行、就绪、挂起、休眠等在内的任务所处的状态。
任务的调度:负责控制各个任务在各个任务状态之间的转换。
任务的控制块(TCB):任务控制块用来描述一个任务,每一个任务都与一个TCB相关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。此外,TCB还被用来存放任务的“上下文”(CONTEXT)。
任务的同步:对单个任务而言,同步就是使它能在指定的时间执行,对两个或两个以上的任务,同步是任务间需要协调执行的情况。
消息:消息机制使用一个被各有关进程共享的消息队列,进程之间经由这个消息队列发送和接收消息,并用来协调(同步)对共享资源的使用的方法。
管道(PIPE):是一个类似文件的结构,它用于同步读/写操作,使用系统调用PIPE可以产生一个管道并返回两个文件指针,一个用于读管道,一个用于写管道。
中断(Interrupt)和中断处理程序(Interrupt Service Routine):中断一般是指硬件中断,它用于通知操作系统特定外部事件的发生,中断响应速度对于实时系统是至关重要的。可以使用intConnect()函数把特定的ISR与某一中断联系起来。
信号(SIGNAL):它用来通知一个任务特定事情的发生,并立即调用相应的信号处理函数进行处理,它异步的改变任务的控制流程。信号与中断类似,每个信号通常需要和特定的信号处理程序绑定起来(调用sigaction()或signal())。信号通常用于错误或异常处理,用于通知一些硬件中断错误,如:总线错误、非法指令、浮点异常、被零除等。它也可以用于进程间通讯。
信号量(semaphore):很多方面类似一个全局变量,不同的是,对信号量的操作(Creat、Delete、Take、Give)都是特定的原子操作,是不可中断的。信号量主要用于进程间的同步和对共享资源的互斥访问。

2 VxWorks的系统综述
2.1 VxWorks
VxWorks 是美国 Wind River System 公司( 以下简称风河 公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似Microsoft Visual C,但是提供了更丰富的调试、防真环境和工具。
VxWorks操作系统有以下部件组成:
l 内核(wind):
n 多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)
n 任务间的同步
n 进程间通信机制
n 中断处理
n 定时器和内存管理机制
l I/O 系统
VxWorks 提供了一个快速灵活的与 ANSI C 兼容的 I/O 系统,包括 UNIX 标准的Basic I/O(creat(), remove(), open(),close(), read(), write(), and ioctl().),Buffer I/O (fopen(), fclose(), fread(), fwrite(), getc(), putc()) 以及POSIX 标准的异步 I/O。VxWorks 包括以下驱动程序:网络驱动、管道驱动、RAM盘驱动、SCSI驱动、键盘驱动、显示驱动、磁盘驱动、并口驱动等
l 文件系统
支持四种文件系统: dosFs,rt11Fs,rawFs 和 tapeFs
支持在一个单独的 VxWorks 系统上同时并存几个不同的文件系统。
l 板级支持包 BSP(Board Support Package)
板级支持包向VxWorks操作系统提供了对各种板子的硬件功能操作的统一的软件接口,它是保证VxWorks操作系统可移植性的关键,它包括硬件初始化、中断的产生和处理、硬件时钟和计时器管理、局域和总线内存地址映射、内存分配等等。 每个板级支持包括一个 ROM 启动(Boot ROM)或其它启动机制。
l 网络支持:
它提供了对其它VxWorks系统和TCP/IP 网络系统的"透明"访问,包括与BSD套接字兼容的编程接口,远程过程调用(RPC),SNMP(可选项),远程文件访问(包括客户端和服务端的NFS机制以及使用RSH,FTP 或 TFTP的非NFS机制)以及BOOTP 和代理ARP、DHCP、DNS、OSPF、RIP。无论是松耦合的串行线路、标准的以太网连接还是紧耦合的利用共享内存的背板总线,所有的 VxWorks 网络机制都遵循标准的 Internet 协议。
l 系列网络产品:
n WindNet SNMP
n WindNet STREAMS
n WindNet 第三方产品,包括 OSI、SS7、ATM、Frame Relay、CORBA、ISDN、X.25、
n CMIP/GDMO、分布式网络管理等。
这些产品扩展了VxWorks的网络特性,并增强了嵌入式处理器的网络特性
l 虚拟内存( VxVMI)与共享内存(VxMP)
n VxVMI 为带有 MMU 的目标板提供了虚拟内存机制。
n VxMP 提供了共享信号量,消息队列和在不同处理器之间的共享内存区域。
l 目标代理(Target Agent)
目标代理遵循 WBD(Wind Debug)协议,允许目标机与主机上的 Tornado 开发工具相连。在目标代理的缺省设置中,目标代理是以 VxWorks 的一个任务tWdbTask 的形式运行的。
Tornado 目标服务器(Target Server)向目标代理发送调试请求。调试请求通常决定目标代理对系统中其它任务的控制和处理。缺省状态下,目标服务器与目标代理通过网络进行通信,但是用户也可以改变通信方式。
l 实用库
VxWorks 提供了一个实用例程的扩展集,包括中断处理、看门狗定时器、消息登录、 内存分配、字符扫描、线缓冲和环缓冲管理、链表管理和 ANSI C 标准。
l 基于目标机的工具
在 Tornado 开发系统中,开发工具是驻留在主机上的。但是也可以根据需要将基于目标机的Shell 和装载卸载模块加入 VxWorks。

总之,VxWorks的系统结构是一个相当小的微内核的层次结构。内核仅提供多任务环境、进程间通信和同步功能。这些功能模块足够支持VxWorks在较高层次所提供的丰富的性能的要求。VxWorks与各部件关系如图所示:

图:VxWorks层次组织结构

2.2 Tornado
Tornado组成:
l Tornado一整套交叉开发工具
l VxWorks 实时操作系统
l 连接目标机与宿主机的通信选项
Tornado所提供的工具:
l WindConfig::
建立适合用户特性的 VxWorks 操作系统。
l Loader:
具有动态连接的装载器。
l CrossWind:
源程序(C 或 C++ 以及汇编程序等)的调试工具。
CrossWind结合了图形方式和命令行方式的最大特点。
最普通的调试方式,例如断点设置和程序执行控制可以通过便捷的点击方式实现。同样,程序显示框和数据侦察窗也提供了一个直接的可视窗口来观察应用程序中最关键的一部分。
l Browser:
可观察系统对象(任务、消息队列、信号量等)和存储器使用情况;
Browser汇总了应用进程,内存消耗和一个目标内存的映射。
通过 Browser,可观察信号量、 消息队列、内存分配、看门狗计时器、堆栈使用情况、 目标CPU使用率、对象模块结构和符号表以及每个任务的详细信息。
l WindSh:
提供从宿主机到目标机之间的一个命令shell,它可以解释执行内层目标中的几乎所有C语言函数或指令(it can interpret and execute almost all C-language expressions)。
l WindView:
系统可视诊断和分析工具。可观察各任务,中断程序之间的相互作用。它是在嵌入式系统应用开发期间的可视工具。
l VxSim:
快速原型仿真器。可在硬件设备未完成之前,在宿主机上对应用程序进行仿真分析。他可以在宿主机上模拟目标机的VxWorks操作系统环境,在许多方面他与目标机上的VxWorks系统能力是一样的,他们的区别主要在于:在VxSim里,内存Image是作为宿主机(Windows or UNIX)的一个进程执行,没有与目标硬件的交互,所以不适合于设备驱动的仿真。
l StethoScope:
实时数据图形监控器。收集数据,并将数据以图形方法显示出来。
l ObjectCenter:
C++ 开发环境。选用的是 GNU C++ 编译器,I/O 流库支 持 C++ 中的格式化 I/O。
Tornado调试模式:
l 系统模式
对整个应用系统进行调试,可在系统中设置断点等。调试中应用系统必须停下 来
l 任务模式(动态调试)
调试是针对系统中某一任务模块进行的,整个系统仍可保留在工作状态。

本文中重点介绍了VxWorks操作系统的多任务内核、任务调度、任务间的通信和中断处理机制等核心内容。

3 VxWorks操作系统基础
3.1 VxWorks的任务
在VxWorks中,一般的应用被组织成相互独立又相互协作的程序,每一个程序在运行时称作一个任务。在VxWorks中,任务不仅可以共享和快速访问大部分的系统资源,还保留着充分独立的上下文以实现单独的线程控制。

3.1.1 多任务
多任务为应用程序对多个离散的现实事件的控制和反应提供了基本的机制。VxWorks的实时内核wind提供了一个基本的多任务环境。内核按照一种调度算法交替运行各个任务,造成一种多个任务并行运行的假象,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值