- UID
- 852722
|
1 VxWorks基本的构成模块
高效的实时内核、兼容标准的POSIX、I/O系统、本机文件系统、文件I/O系统、TCP/IP网络协议栈、虚拟内存(可选单元VxVMI)、共享内存(可选单元VxMP)、驻留目标工具、WFC、工具库、性能优化、目标代理、BSP、仿真器等。
VxWorks采用微内核结构设计,内核主要分为三部分:多任务环境、原子信号量、系统时终响应。
VxWorks基本功能可分为如下几类:
1. 任务管理
2. 事件和异步信号服务
3. 信号量服务
4. 消息队列服务
5. 内存管理
6. 中断服务程序
7. 时钟管理和定时服务
8. 出错处理
下面详细描述:
1. 任务管理
什么要任务?任务是代码运行的一个映像。相当于Windows平台上的一个进程的概念。不过该任务只有一个线程。VxWorks不具体区分进程和线程。一个任务由一个TCB(任务控制块)来标识。调度程序使用TCB来管理任务调度。
VxWorks一个任务有四种状态,最基本的状态有以下四种:
就绪态、挂起态、休眠态、延迟态。
1.1任务调度:
Wind内核采用基于优先级的抢占式调度法作为它的默认策略。同时也提供轮转调度算法。VxWorks内核优先级划分为256级(0-255)。0为最高优先级,优先级255为最低。
TaskSpawn():创建新任务。
TaskInit():初始化一个新任务。
TaskActivate():激活一个已经初始化的任务。
TaskName():由任务号得到任务名。
TaskNameToId():由任务名到任务ID号。
TaskPriorityGet()
TaskIsReady()
TaskIsSuspended();
TaskTcb();
TaskDelete();
TaskSafe();
TaskSuspend();
TaskResume();
TaskRestart();
TaskDelay()
1.2VxWorks的系统任务:
1.根任务 TUsrRoot:系统首先执行根任务TUsrRoot,其入口点为文件Config/All/UsrConfig.C中的UsrRoot函数,它负责初始化VxWorks工具,并创建注册、异常处理、网络通信任务和TRlogind等任务。
2. 注册任务TLogTask:注册任务TLogTask被VxWorks模块用来传送不需要I/O操作的系统信息。
3. 异常处理任务TExcTask:异常处理任务TExcTask有最高优先级,它负责系统的异常情况出错处理,不能被挂起、删除或是改变优先级。
4. 网络通信任务TNetTask:网络通信任务TNetTask负责系统级任务的网络通信。
5. 目标代理任务 TWdbTask: 如果目标代理程序运行在任务模式,则目标代理任务TWdbTask被创建,用来响应主机目标服务器的请求。
6. 任务错误状态:主要是Errno的应用。
1.3 任务间的通信和同步机制
多任务间通信方式:
L 共享内存
L 信号量
L 消息队列和管道
L Socket和远程过程调用
L 二进制信息:用于异常处理
2. 中断机制
实时系统中硬件中断处理是至关重要的。VxWorks系统提供了灵活的中断处理机制。它为中断处理提供的系统调用如下:
IntConnect():将C函数和中断向量连接
IntCount():得到当前中断嵌套深度
IntLevelSet():设置程序的中断级别。
IntLock():使中断禁止。
IntUnlock():开中断
IntVecSet():设置异常向量
IntVecGet():得到异常向量
3. 定时管理机制
VxWorks提供了丰富的定时管理和时钟管理,具体包括以下几个方面:
维护系统日历时钟
在任务等待消息包、信号理、事件或内存段时的超时处理。
周期性或指定时间点唤醒或发送告警到一个任务。
处理任务调度中的时间片轮转。
VxWorks提供了以下系统调用:
TickAnnounce():通知系统内核时钟“滴答”;
TickSet():设定内核时钟计数器值
TickGet():得到内核时钟计数值
Timer_create:创建时钟
Timer_gettime():获得时钟给定值的当前剩余值
Timer_settime():设定时钟值
Timer_connect():连接用户函数和时钟信号
Timer_cancel():取消一个时钟
SysClkRateSet():设定系统时钟速率。
VxWorks还提供了看门狗定时器。(略)
4. 内存管理
5. I/O与文件系统
2 VxWorks系统开发基本方法:
2.1正确划分任务
功能内聚性
时间紧迫性
周期执行性
2.2防止任务异常
2.3正确运用函数的可重入性
2.4使用名称访问资源
2.5用户任务优先级确定 |
|