E002_Vxworks
VxWorks使用说明书

VxWorks使用说明书1、概述VxWorks操作系统的集成环境叫Tornado。
T ornado集成环境提供了高效明晰的图形化的实时应用开发平台,它包括一套完整的面向嵌入式系统的开发和调测工具。
Tornado环境采用主机-目标机交叉开发模型,应用程序在主机的Windows环境下编译链接生成可执行文件,下载到目标机,通过主机上的目标服务器(T arget Server)与目标机上的目标代理(Target Agent)的通信完成对应用程序的调试、分析。
它主要由以下几部分组成:VxWorks高性能的实时操作系统;* 应用编译工具;* 交互开发工具;下面对T ornado集成环境的各组件功能分别介绍:* Tornado开发环境Tornado是集成了编辑器、编译器、调试器于一体的高度集成的窗口环境,同样也可以从Shell窗口下发命令和浏览。
* WindConfig:T ornado系统配置通过WindConfig可选择需要的组件组成VxWorks实时环境,并生成板级支持包BSP的配置。
通过修改config.h可以实现WindConfig的所有功能,并且,可以实现WindConfig不能实现的功能。
* WindSh:Tornado外壳WindSh是一个驻留在主机内的C语言解释器,通过它可运行下载到目标机上的所有函数,包括VxWorks和应用函数。
Tornado外壳还能解释常规的工具命令语言TCL。
WindSh不仅可以解释几乎所有的C语言表达式,而且可以实现所有的调试功能。
它主要有以下调试功能:下载软件模块;删除软件模块;产生任务;删除任务;设置断点;删除断点;运行、单步、继续执行程序;查看内存、寄存器、变量;修改内存、寄存器、变量;查看任务列表、内存使用情况、CPU利用率;查看特定的对象(任务、信号量、消息队列、内存分区、类);复位目标机。
* 浏览器Tornado浏览器可查看内存分配情况、任务列表、CPU利用率、系统目标(如任务、消息队列、信号量等)。
VxWorks操作系统基础(适合初学者阅读)2024新版

系统库(System Library)
提供一系列操作系统服务,如文件操作、网络协议栈等。
驱动程序(Device Drivers)
与硬件设备交互,实现对硬件设备的控制和管理。
内核组成及作用
内核组成及作用
01
内核的主要作用包括
02 管理系统资源,如CPU、内存、I/O设备等 。
06
VxWorks文件系统操作指南
文件系统类型及特点介绍
RAM-based File System
基于RAM的文件系统,读写速度快,但数据在 关机后丢失。
TrueFFS
Wind River特有的闪存文件系统,提供磨损均 衡和掉电保护功能。
ABCD
DOS File System (dosFs)
兼容MS-DOS的文件系统,支持FAT12、FAT16 和FAT32格式。
01
VxWorks操作系统概述
VxWorks操作系统定义
VxWorks是一款由美国风河公司( Wind River)开发的嵌入式实时操 作系统(RTOS),专为需要实时响 应和高可靠性的应用而设计。
VxWorks提供了丰富的中间件和开发 工具,支持多种处理器架构和硬件平 台,广泛应用于航空、航天、通信、 医疗、工业自动化等领域。
在ISR中处理完中断事件后, 需要及时清除中断标志,避 免重复处理。
中断优先级设置和嵌套处理
01
VxWorks支持多级中断优先级,高优先级的中断可以打断低优先 级的中断处理。
02
中断优先级可以通过配置文件或动态调整进行设置,以满 足不同应用场景的需求。
03
在处理中断时,如果发生更高优先级的中断请求, VxWorks会自动保存当前中断的上下文信息,并跳转到更 高优先级的中断处理程序中。处理完成后,再恢复之前中 断的上下文信息并继续执行。这种机制称为中断嵌套处理 。
vxworks 使用案例

vxworks 使用案例VxWorks是一款实时操作系统(RTOS),广泛应用于嵌入式系统、工业控制、航空航天、军事等领域。
以下是一些VxWorks的典型使用案例:1. 嵌入式设备:VxWorks可用于各种嵌入式设备,如智能家居、无人驾驶汽车、工业机器人等。
在这些设备中,VxWorks可以提供实时性能、低功耗和紧凑的系统资源占用。
2. 航空航天:VxWorks在航空航天领域有着广泛应用,如飞行控制系统、卫星通信系统、航空电子设备等。
在这些系统中,VxWorks需要具备高可靠性、实时性和强大的内存管理能力。
3. 军事系统:VxWorks在军事领域也有广泛应用,如导弹控制系统、雷达系统、指挥控制系统等。
在这些系统中,VxWorks需要满足严格的性能、安全性和可靠性要求。
4. 工业控制:VxWorks可用于各种工业控制系统,如生产线自动化、智能仪表、传感器等。
在这些系统中,VxWorks可以提供实时性能、稳定性和易于扩展的特性。
5. 医疗设备:VxWorks在医疗设备中有广泛应用,如超声波设备、心电监测设备、手术机器人等。
在这些设备中,VxWorks需要具备高可靠性、实时性和良好的兼容性。
6. 通信设备:VxWorks可用于通信设备,如交换机、路由器、基站的控制系统等。
在这些设备中,VxWorks需要提供高性能、低功耗和稳定的系统运行。
7. 汽车电子:VxWorks在汽车电子领域也有广泛应用,如发动机控制系统、刹车控制系统、车载信息娱乐系统等。
在这些系统中,VxWorks 需要满足功能安全、实时性和低功耗的要求。
总之,VxWorks作为一款实时操作系统,在众多领域发挥着重要作用。
其高性能、实时性、可靠性和易用性使得它成为许多嵌入式系统和实时控制应用的首选操作系统。
vxworks使用过程中的100个疑问与解答

vxworks使用过程中的100个疑问与解答1. VxWorks是什么?VxWorks是一种实时操作系统(RTOS),由美国Wind River公司开发,适用于嵌入式系统。
2. VxWorks有哪些特点?VxWorks具有高度可靠性、实时性、可移植性和可扩展性等特点。
3.如何安装VxWorks?安装VxWorks需要下载安装包,然后按照安装指南进行安装。
4.如何创建VxWorks任务?可以使用taskSpawn函数来创建任务,指定任务的入口函数、优先级等参数。
5. VxWorks如何进行任务间通信?任务间可以使用消息队列、信号量、共享内存等机制进行通信。
6.如何调试VxWorks程序?可以使用Wind River公司的调试工具Wind River Workbench进行调试。
7. VxWorks支持哪些开发语言?VxWorks主要支持C和C++开发,也可以使用汇编语言和Java等。
8.如何加载和运行VxWorks程序?VxWorks程序可以通过TFTP、FTP等网络协议加载到目标设备上,然后使用命令运行。
9. VxWorks是否支持多任务?是的,VxWorks支持多个任务的同时运行,并通过任务调度器进行任务切换。
10.如何实现任务间的同步?可以使用信号量、事件标志等机制实现任务间的同步。
11. VxWorks中如何实现中断处理?VxWorks提供了中断服务例程(ISR)和处理器驱动程序(DPC)来处理中断。
12.如何列出VxWorks系统中的任务?可使用taskShow命令列出系统中所有任务的详细信息。
13.如何获取任务的优先级?可以使用taskPriorityGet命令获取任务的优先级。
14.如何设置任务的优先级?可以使用taskPrioritySet命令设置任务的优先级。
15.如何控制任务的时间片轮转?可以使用taskDelay命令来控制任务的时间片轮转。
16.如何查看VxWorks系统的中断信息?可以使用intShow命令来查看系统中的中断信息。
vxWorks学习笔记

vxWorks学习笔记vxWorks学习笔记2006-07-20 11:141.VxWorks开发方式:交叉开发,即将开发分为主机(host)和目标机(target)两部分。
类似于dos下C语言程序的开发。
合并开发的优点:简单缺点:资源消耗量大,CPU支持,非标准体系的支持host (Tornado) target(vxWork) 小程序模块vxWorks实际采用开发模式Tornado提供:编辑,编译,调试,性能分析工具,是vxWorks 的开发工具vxWorks:面向对象可以剪裁的实际运行操作系统2.vxWorks启动方式<1>Rom方式 (vxWork_rom)vxWorks直接烧入rom<2>Rom引导方式(bootrom+vxWorks)其中bootrom烧入rom,vxWorks可以通过从串口,网口,硬盘,flash等下载!这里的bootrom不是开发环境中的bootable,在开发环境里bootable指的是vxWorks,downloadable指application3.调试<1>attach用来在多任务调试时将调试对象绑定到某个任务<2>任务级调试(attach taskName)单个任务的调试不会影响到其他任务的运行,主要用来调用户的应用程序。
全局断点:在调另一任务或本任务时,系统运行本任务断点,则停下。
各任务要配合使用。
任务断点:调本任务时,系统运行到本任务断点,则停下。
如果没有attach到本任务,不起作用。
一次性断点:跑到一次之后自动删除。
<3>系统级调试(attach system)把所有task和系统core、中断看成一个整体,可用于调试系统和中断。
对中断调试,如果不是系统级调试,无论是那种断点都不起作用!wdbAgent不在调试范围内,当任务级调试时工作在中断方式,系统级调试工作在轮询方式。
!可是使用命令行方式的调试,参看crossWind教程。
VxWorks网络驱动配置及分析

VxWorks网络驱动配置及分析VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一种是END 网络驱动,是VxWorks独有的,根据VxWorks MUX接口编程,不过END驱动在底层也要转换成BSD的形式.VxWorks网络驱动可参见VxWorks网络驱动1.BSD4.4网络驱动设置.网络设备驱动的调用主要在/target/src/config/usrNetwork.c文件中,下面说明BSD4.4驱动在VxWorks系统调用.主要调用过程如下:VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot()=======>>target\src\config\usrNetwork.c文件中的usrNetInit( )通过数组表netIf[]初始化相应的BSD网卡驱动.在usrNetwork.c中的调用过程如下:usrNetInit()函数中调用usrNetIfAttach():#ifdef INCLUDE_BSDif (!attached){if ( (usrNetIfAttach (pNetDev, params.unitNum, pBootString) !=OK))return (ERROR);attached = TRUE;}#endif /*INCLUDE_BSD*/usrNetIfAttach ()函数中调用数组表usrNetIfTblfor (pNif = usrNetIfTbl; pNif->ifName != 0; pNif++){if (strcmp (buf, pNif->ifName) == 0)break;}网络BSD驱动数组表usrNetIfTbl在文件/target/src/config/usrNetwork.c中的定义初始化:...LOCAL NETIF netIf [] = /* 网络接口,定义网卡驱动 */{/* 下面是定义包含的各种网络驱动 */#ifdef INCLUDE_DC /* 从DEC 芯片启动,即系统有NVRAM存在,现在已过时*/{ "dc", dcattach, (char*)IO_ADRS_DC, INT_VEC_DC, INT_LVL_DC,DC_POOL_ADRS, DC_POOL_SIZE, DC_DATA_WIDTH, DC_RAM_PCI_ADRS,DC_MODE },#endif /* INCLUDE_DC */#ifdef INCLUDE_FEI /* 如果定义了INCLUDE_FEI,初始化Intel 网卡 */{ "fei", feiattach, (char*)FEI_POOL_ADRS, 0, 0, 0, 0},#endif /* INCLUDE_FEI */#ifdef INCLUDE_EX /* Excelan 网卡 */{ "ex", exattach, (char*)IO_ADRS_EX, INT_VEC_EX, INT_LVL_EX,IO_AM_EX_MASTER, IO_AM_EX },#endif /* INCLUDE_EX */#ifdef INCLUDE_ENP /* CMC 网卡 */{ "enp", enpattach, (char*)IO_ADRS_ENP, INT_VEC_ENP, INT_LVL_ENP, IO_AM_ENP },#endif /* INCLUDE_ENP */...}设置方法:从以上可以看出BSD网络驱动只需在BSP配置文件config.h中将网络(#define INCLUDE_NETWORK)BSD网卡宏定义(#define INCLUDE_xxx)和一些I/O参数(一般不需要)加入,则在文件usrNetwork.c中进行相应的初始化.如: 在VxWorks加入支持intel的网卡驱动.在config.h中加入"#define INCLUDE_FEI".主要网卡定义如下:#define INCLUDE_ENE /* include Eagle/Novell NE2000 interface */#define INCLUDE_ELT /* include 3COM EtherLink III interface */ #define INCLUDE_ESMC /* include SMC 91c9x Ethernet interface */#define INCLUDE_FEI /* include Intel Ether Express PRO100B PCI */#define INCLUDE_ELC /* include SMC Elite16 interface */#define INCLUDE_EEX /* include INTEL EtherExpress interface */#define INCLUDE_EEX32 /* include INTEL EtherExpress flash 32 */#define INCLUDE_EX /* include Excelan Ethernet interface */ #define INCLUDE_ENP /* include CMC Ethernet interface*/#define INCLUDE_SM_NET /* include backplane net interface */ #define INCLUDE_SM_SEQ_ADDR /* shared memory network auto address setup */#define INCLUDE_EL_3C90X_END /* 3com fast etherLink XL PCI */#define INCLUDE_LN_97X_END /* AMD 79C972 END DRIVER */....2.END网络驱动设置.END网络设备的初始化主要通过定义在文件configNet.h中的一个数组表实现.初始化网络时muxDevLoad()会按这个表的定义把end初始化安装到VxWorks 系统.主要调用过程:VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot()=======>>target\src\config\usrNetwork.c文件(该文件初始化TCP/IP)中 usrNetInit(BOOT_LINE_ADRS)(该函数作用是添加MUX END)========>>pcooki = pCookie =muxDevLoad(pDevTbl->unit,.....)其中pDevTbl在BSP网络配置文件configNet.h中定义.END_TBL_ENTRY endDevTbl[]={...},该表定义了网络设备的具体参数.configNet.h部分定义如下所示:#define DEC_LOAD_FUNC dec21x40EndLoad /* 定义加载网络设备的入口程序*/#define DEC_BUFF_LOAN 1/* 网络设备硬件的物理定义数据串,一般BSP已经定义,不到必要时,无需更改*//** <devAdrs>:<PCIadrs>:<ivec>:<ilevel>:<numRds>:<numTds>:<memBase>: \ * <memSize>:<userFlags>*/# define DEC_LOAD_STRING"0x81020000:0x80000000:0x12:0x12:-1:-1:-1:0:0x80800000"IMPORT END_OBJ* DEC_LOAD_FUNC (char*, void*);/* 网络END设备表 */END_TBL_ENTRY endDevTbl [] ={ 0, DEC_LOAD_FUNC, DEC_LOAD_STRING, DEC_BUFF_LOAN, NULL, FALSE}, { 0, END_TBL_END, NULL, 0, NULL, FALSE},};设置方法:由以上可看出在VxWorks添加END网络驱动1.在文件config.h中添加"#define INCLUDE_NETWORK"和"#defineINCLUDE_END".2.在configNet.h中加入END驱动的入口函数"#definexxx_LOAD_FUNC xxxxxEndLoad"和一些相关的初始化字符串.这样就会在生成BSP包含END/MUX,系统网络初始化调用函数muxDevLoad()会更据这个表初始化END网络.文件configNet.c关于END驱动初始化的主要内容:#ifdef INCLUDE_ENDIMPORT int ipAttach ();IMPORT END_TBL_ENTRY endDevTbl[]; /* 定义这个表 */#endif /* INCLUDE_END */..........#ifdef INCLUDE_ENDint count;END_TBL_ENTRY* pDevTbl; /* END设备列表 */END_OBJ* pCookie = NULL;END_OBJ* pEnd;#endif /* INCLUDE_END */#if defined(INCLUDE_END)muxMaxBinds = MUX_MAX_BINDS; /* 初始化MUX接口 */if (muxLibInit() == ERROR)..........关于DEFAULT_BOOT_LINE 的解释这一行对配置网络,连通Target Server及下载调试程序非常重要DEFAULT_BOOT_LINE的原意是为没有NVRAM的target设计的,这样用户就不需要在每次系统启动是手工输入这些参数了.系统启动网络时xxxEndLoad()会解释这一行并按这一行的定义进行加载.Emac(0,0) : 启动设备,可是是软盘,硬盘,PCMCIA卡等其他的设备名称如:fd为软盘,(0,0)表示第一个软驱,3.5寸盘.dc则表示从DEC 21x4x 芯片启动,即系统有NVRAM存在,这种方式现在已不采用. elpci表示启动设备为3COM EtherLink XL PCI网卡.fei:Intel 82559 EtherExpress网卡.ene: NE2000网卡ELT: 3COM以太网卡EEX: Intel网卡ata: ATA/IDE 硬盘 ............405GP: 主机名vXworks从主机加载的VxWorks文件h=172.16.1.159 主机的IP地址e=172.16.254.52 目标机的IP地址,若网络启动Target Server时,这个IP必须和主机上Target Server配置的Target IP地址一致,且设置Back End选项为wdbrpcu=xxx 用户名,pw=xxx 密码: 若通过网络加载调试时,主机的Ftp服务器和目标机的用户名和密码必须相同tn=vxTarget 目标机名称*/#define DEFAULT_BOOT_LINE \"Emac(0,0)405GP:vxWorks h=172.16.1.159 e=172.16.254.52 \u=xxx pw=xxx tn=vxTarget"高智商学生 ( Thu, 1 Jun 2006 20:32:04 +0800 )Description:某日,老师在课堂上想看看一学生智商有没有问题,问他:“树上有十只鸟,开枪打死一只,还剩几只?”他反问:“是无声手枪或别的无声的枪吗?”“不是。
vxworks内核笔记

*
* Process delay list. Make tasks at the end of their delay, ready.
* Perform round robin scheduling if selected.
FAST WDOG *wdId;/* pointer to a watchdog */
FUNCPTRwdRtn;/* watch dog routine to invoke */
intwdArg;/* watch dog argument to pass with wdRtn */
intstatus;/* status return by Q_REMOVE */
/* set up system timer */
sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */
sysClkRateSet (SYS_CLK_RATE);/* set system clock rate */
sysClkEnable ();
}
/*******************************************************************************
** sysClkConnect - connect a routine to the system clock interrupt
taskRtnValueSet (pTcb, OK);
break;
}
case ERROR:
vxworks模拟器使用指南

约定文档中提到的路径,均相对于ROS5(M)目录而言。
1.编译模拟器1.1.基本原理为了节省时间,模拟器不像设备那样编译一个完整的vxworks镜像文件,而是把系统和模块分开。
系统存放在vxsim\vxWorks文件中,该文件由系统组负责维护。
模块则编译在vxsim\vxsim.out文件中,这个文件由各自编译。
为了编译理解,我们可以和Windows系统做一个对比,vxworks文件相当于Windows系统,.out文件相当于一个exe文件。
我们开发一个exe文件的时候,并不需要编译整个Windows系统。
因此我们只需要编译出vxsim.out 文件即可。
vxsim.out的编译过程如下:1、编译vxsim目录下的所有.c文件,生成对应的.o文件2、链接步骤1生成的.o文件和lib\gnu\vxworks\SIMNT、publib\gnu\vxworks\SIMNT目录下的所有.a文件。
如果两个目录有同名文件,则使用lib目录下的。
1.2.编译vxsim.out当前模拟器的编译不再使用Workbench工程,完全使用批处理common\vxsim.bat进行,该批处理应该用VxWorks Development Shell运行,而不是cmd。
下面描述都假设是在common 目录下。
从基本原理那能看出,编译vxsim.out需要编译vxsim目录下的.c文件和编译库文件(.a 文件)。
其中主要的工作是编译库文件。
1.2.1.库文件编译编译一个库文件的方法是vxsim.bat libname,其中libname指的是模块的名称,在module目录下应该有一个libname.module文件。
比如:最终生成的库文件是存放在lib\gnu\vxworks\SIMNT目录下,也即当前编译的库文件优先于publib的库文件。
一般而言,公共的库文件(rdvp/support/rcis/simssp)在publib目录下已经存在稳定的版本,不用另外编译。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-./0123 是 非 常 优 秀 的 嵌 入 式 商 用 实 时 操 作 系 统 456。 *017 89:0 是其开发系统的核心组件 4;6。 -./0123 提供了多种用于实
时系统开发、调试和运行的功能,如多任务机制、 <+,=> 兼容 性、 本地文件系统、 网络功能、 虚 拟 内 存 等 。 而 它 与 @A=> = ? +、 的相似性, 又使熟悉 @A=> 的开发人员比较容易掌握。现阶段 开发的通信系统, 往往把 -./0123 操作系统作为首选。为了更 的程序设 形象直观地说明问题, 下面将以局域网仿真 (BCAD )
0(1。
: 位于局域网仿真层和实体连接管理实体 (2345 接口 (% ) 之间, 对 于 0>2 (0?987@6A >9B8C;D 4678934 :;4;<6:648 64898= ) (16B:64648 29B7C98)它完成虚电路的建立和释放,而对于 1>2 ) 则提供虚电路的分配功能。 >9B8C;D 29B7C98 : 与层管理实体的接口, 完成初始化、 控制局域网 接口 (E ) 仿真实体和返回状态信息等功能。 (/ ) : 这是一个逻辑意义上的接口 , 位 于 ’* ’F)G 接 口
)8’3%743: *&L3 Y9YP1 X0R’3P3 08 Q932J:P3LN8 L8 R0KK’8LR9QL08 Y10Q0R0M3 )P3P91R& 98: ZPVPM0YKP8Q [&P8 ’3L8N Q&P )P9MQLKP E’MQLQ932 +YP19QL8N ,W3QPK#*&P 2PW Q&9Q [P92P8 PXXLRLP8RW L3 :L3R’33P: [&P8 1P9ML\L8N 30KP R0KK’8LR9QL08 Y10Q0R0M#*&P [9W Q0 YM98 Q&03P R0KYMLR9QP: R93P [PMM L3 L8Q10:’RP: L8 :PQ9LM [LQ& Q&P P.9KYMP 0X BCAD E’MQLQ932 :P3LN8# :-@#$%A’: R0KK’8LR9QL08 <10Q0R0M, <10RP33, -./0123, EP339NP ]’P’P , E’MQLQ93描述方式的进程通信模型
/#0
合理掌握进程个数
也许有人会争论说,对于单处理器多进程的系统来说, 进 采用消息描述方式时, 在需要传送消息时, 只是将该传送 消息的描述 (通常是一个结构) 放入目标消息队列。 这种方法通 常用在实际消息 (如数据帧) 的长度比较长, 如果将整个实际消 息塞进消息队列需要较大的内存区间, 及较长的处理延迟。采 用消息描述的方法可以避免上述问题, 其副作用为: 要求提供 消息的进程保证在消息处理前实际消息的内存区域保持有效, 这就引入了较为复杂的内存管理机制。 该方法通常用在底层将 到来的 数 据 帧 通 知 高 层 的 协 议 处 理 进 程 , 它 有 效 避 免 了 E:@M 带来的系统资源消耗问题。 底层驱动程序通常通过一个循环的 缓冲区来存数据帧, 这样有效保证了所要求的内存管理机制。 这种方法经常用于数据帧短消息。 首先是因为短消息填入 内存块也不再是主要矛盾。 消息队列的延迟、 ’12 占用时间小, 再者为一个短消息写一个消息描述 (有些消息短到和消息描述 相当大小) ,并且为保证在消息处理前实际消息的内存区间保 持有效引入内存管理机制, 是一个相当大的代价。所以要根据 不同的情况选用不同的模式, 以期充分发挥硬件功能, 达到最 佳的运行效果。
%
通信协议软件的特点及选择实时操作系统的原因
由于现代电信和计算机网络技术的发展和人们对网络带
计为例, 论述提高通信协议性能的实践技术、 手段。 局域网仿真 提供了在 C*E 网络上运行现有 BCA 协议的手段, 它能够使原 局域网终端的软件和硬件系统不做任何改动的情况下, 即可享 受到 C*E 技术带来的高速和灵活性。
+%,
((’/ 协 议 包 , 通 过 2FNG- 转 换 成 (-. 信 元 发 送 到 (-. 网
这两个方向作为数据 上, 完成从局域网数据到 (-. 网的适配。 的主要通道, 有以下特点: 业务流量大, 数据帧频度高, 占用了 若不及时处理, 影响业务适配的效 绝大部分的 21F 处理时间, 果, 容易造成缓冲溢出。 如果有速度瓶颈, 该通道为限制业务板 处理速度的主要矛盾。 根据以上特点,在两个方向上创建两个消息队列来管理。 具 体 的 数 据 帧 存 放 的 缓 冲 区 一 般 由 底 层 驱 动 程 序 (包 括 022 以太网端口驱动和 ((’/ 驱动) 负责。底层驱动程序在有数据 到达时, 将该数据的描述放到相应的消息队列中。可以安排单 一的一个进程看护一个消息队列, 这样, 一旦有消息到达, 就能 马上转入到相应的消息处理函数。 将这两个模块划分为单模块处理, 便于在程序运转的时候 通过进程优先级的调整来提高业务板的过滤率和转发率, 更加 方便地改善协议实现的效率, 解决高速度要求的主要矛盾。进 程的优先级关系到程序的运行效率和实际协议实现的效果。 通 过把实际的不同实现之间作对比发现: 一般来说, 相对数据量 比较大的进程应该安排较高的优先级。
浅析基于 !"#$%&’ 的 ()*+ 软件设计
孔令山 张志群 丁 炜 (北京邮电大学, 北京 %""HI$ )
DJK9LM: 208NM3OP93QR0K#R0K
摘 要 文章分析了在通信协议开发中采用实时多任务操作系统进行进程规划时影响协议性能的关键因素, 同时以局
实现为例, 依据实践应用结果, 提出了一些高效的处理策略和方法。 域网仿真 (BCAD ) 关键词 通信协议 进程
%#%
多模块适于一个进程情况
对缓冲区压力小、 时延要求不苛刻的模块一般考虑用较少
的进程管理较多的模块。以 ’()* 实现为例, ’*2 需要接受网
图! 局域网业务板功能模块图
管 (<648 的 管 理 , 启动配置管理、 性能管理、 安全管理等, 这就 计算机工程与应用 !""!#$
&$O
要求在 %&’ 的软件中有相应管理模块,比如专门 设 置 一 个 消 息队列来听从 ()*+, 的命令, 然后使用一个进程来管理这个消 息队列; 另一方面, 局域网仿真要求将局域网数据通过 (-. 网 传输, 那么需要有接收信令建链、 拆链消息的消息队列, 如果采 用前述方案, 也需要再增加一个进程看护这个消息队列。 但是, 作者注意到从主控板的网管和信令模块来的控制帧 频次远小于主数据通道的数据帧, 也就是说, 可以把这两个消 息队列合二为一, 这样对其专用缓冲区的压力依然远远小于数 据帧。再者, 信令和网管的性质比较相近, 帧长较短, 安排相同 的优先级不会影响协议实现的效果。
宽、 时延等要求越来越苛刻, 对通信系统的硬件和软件都提出 了更高的要求。对于传统的网络设备的硬件设计, 为了满足对 速度带宽等参数的指标要求,许多公司开发了专用的芯片, 将 现有网络的资源模式从共享式进化到交换式 。 交 换 式 的 &’( 、 路由器等网络设备相继占领市场的主流, 这些专用芯片和设备 的广泛采用, 大大提高了网络的性能, 减缓了日益增多的用户 和日益增加的带宽需求对网络的压力。 为了适应计算机和通信 网络的发展变化, 通信协议的复杂性日益增强。这体现在: 分布性: 指多个局部系统分布在不同的机器上; 并发性: 各个局部系统并发工作; 异步性: 各个局部系统不能同时观察到事件的产生; 实时性: 局部系统的活动有严格的时序要求和时间要求。 正是由于上述原因, 实际网络设备的开发往往采用专用芯 进行协议软件的开发。 这是 片, 同时选择实时操作系统 ( )*+, ) 因 为 )*+, 具 有 以 下 特 点 满 足 通 信 协 议 的 复 杂 性 : 系 统 内 核 小; 中断处理时间短; 连续运行时间长; 多个毫秒级或微妙级定 时器的处理能力。
图%
’*2 模块划分模型
%#!
适应采用单模块单进程的情况
根据需要,外来的数据用缓冲区和消息队列来管理。对
’*2 侧的程序功能来说,它要从 ((’/ 的芯片接受 (-. 交换
机送来的数据包,通过协议处理发送到相应的以太网适配器 ,该适配器写数据包到以太网端 (比如 .12$M&$" ,参照图 ! ) 口, 完成从 (-. 到传统局域网的适配。相反, 从相应以太网适 配 器 来 的 .(2 帧 要 经 过 相 反 的 过 程 , 通 过 协 议 处 理 打 包 成
图&
’()* 协议栈结构图
作 者 研 究 图 & 的 ’()* 协 议 栈 结 构 +!,可 以 发 现 , 局域网仿 提供与 (-. 的接口, 真实体是位于数据链路层, 下接 ((’ 层, 上接高层, 提供与原局域网高层协议的接口。局域网仿真层与 其它部分共有五个接口,下面对这五个接口的功能作简要分 析: : 位于局域网仿真层与高层之间, 它完成发送和接 接口 (& ) 收用户数据帧的功能。 : 完 成 发 送 和 接 收 ((’ 帧 的 功 能 , 而 ((’/ 则 利 接口 (! ) 用底层的功能提供服务,其中多个箭头表示多个服务接入点
-./0123
消息队列
多任务
BCAD
中图分类号 *<GSG
文章编号 %""!JHGG%J (!""! ) "$J"%$$J"G
文献标识码 C
,-’./0 $1 ()*+ 2%$3$4$5 6$13#7%- 87’- $0 !"#$%&’ 96
:$0/ (.0/’;70 <;70/ <;.=>0 ,.0/ ?-. (TPLUL8N @8LVP13LQW 0X <03Q3 98: *PMPR0KK’8LR9QL083, TPLUL8N %""HI$)