Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1817272
  • 博文数量: 272
  • 博客积分: 1272
  • 博客等级: 少尉
  • 技术积分: 1866
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-09 15:51
文章分类

全部博文(272)

文章存档

2016年(16)

2015年(28)

2014年(97)

2013年(59)

2012年(25)

2011年(47)

分类: 系统运维

2012-12-27 14:11:28

5.文件系统

VxWorks提供了强大的本几文件系统供使用。提供了与MS-DOS兼容的FAT32文件系统,另外还提供支持硬盘、CD-ROM、磁带设备和FLASH的文件系统,并且在一个VxWorks系统中,允许多个文件系统同时存在。VxWorks文件系统中,文件名可以设成是大小写敏感的,并且长度不限于DOS中的8+3

VxWorks中,文件的读写接口是标准接口:fopen(), fclose(), fread(), fwirte(), fseek()

VxWorks支持磁带文件系统,对于磁带,其实是被看成一个大文件来读写,没有文件夹。所有对该文件的操作都是从磁带起始位置开始的。

另外VxWorks提供的TrueFFS文件系统,是支持FLASH设备的;VxWorks提供的TSFS文件系统,是支持 网络功能的,它可以用来实现和Tornado服务器程序通信,从而在服务器上存取本机文件。

6.网络功能(需要再看network program 文档)

VxWorks的网络功能是通过socket来实现的,它提供了与BSD一致的socket接口。即socket(), read(), write(), close(),connect()等。并且同样可以使用TCPUDP协议作为传输层的传输协议。所谓socket就是对TCPUDP协议、IP地址和端口的绑定,它是唯一的。

VxWorks的网络功能也是很强大的,它提供的网络驱动接口MUX,运行在IP层和数据链路层之间,从而用户可以在MUX中加进自己的协议,并且用户还可以增加自己的网络驱动。VxWorks的网络功能主要包括下面的内容:

(1) 数据链路层

(2) TCP/IP协议族

(3) 网络配置协议族

(4) 选路协议

(5) SOCKET API接口

(6) DNS(域名解析系统)

(7) 简单时间传送协议和远程进程调用

(8) 远程文件的存取和PINGTELNET功能

下面详细讲述各部分内容:

(1) 数据链路层

数据链路层是硬件驱动层,它是上层协议的基础,VxWorks给数据链路层提供了三种驱动:以太网驱动;SLIP(串行线协议驱动);共享内存网络驱动。其PPP协议的实现包括:PAPPPP认证协议)、IPCPPPP以太网控制协议)和PPP协议。它所实现的PPP协议有下面的特点:

客户端和服务器连接功能的支持;

16PPP连接可以被同时激活;

可以指定控制字符以免被底层MODEM软件误解;

VJ压缩功能,可以把40 bytesTCP/IP头压缩至38bytes

PPP协议的地址控制和协议字段同样有压缩功能;

具有PPP连接状态查询功能,这样用户可以监测PPP连接;

IP地址协商功能,一个主机可以通过协商为另一个主机分配IP地址;

具有数据回显和数据应答功能;

用户可以为PPP的连接和断开设置钩子函数,这样用户就可以知道每一个PPP连接和断开的过程;

提供了握手认证协议和口令认证协议功能以及代理服务器路由功能。

它的不足之处是:

最多只有16PPP连接;并且驱动是串口驱动,没有提供对MODEM或者以

太网卡驱动的支持;只支持标准的CHAP(客户握手认证协议)而不支持微软的扩展CHAP,如果想要支持扩展CHAP,只有使用WindNetPPP产品。

SLIPPPP协议都是用于两台终端之间的互相通信,但它们各有优缺点,如下表所示:

协议

功能

SLIP

PPP

效率

支持上层协议

IP

IP及用户自定义

可扩展性

错误校验

有(CRC 校验)

对连接的管理

有,可对主机之间的连接进行管理,例如修改选项和身份认证等,选项协商为主机之间修改各自的选项提供了机会,例如,一台主机可以通过PPP协议协商来限制另一台主机的PPP连接数目

需要注意的是,PPP所提供的身份认证功能,客户端会不停的向服务器端发送

ID/PASSWORD直到通过了认证或者连接中止,并且密码是以明文方式发送的,这样对于重复攻击没有防御能力。而CHAP协议具有更好的安全性,它是需要客户端通过哈希算法根据一定的数据算出一个值,发送到服务器端,服务器把该值与自己计算的值相比较,从而决定能否通过认证。

另外,VxWorks还提供了DES加密算法包,可对用户密码进行加密,这样为认

证过程又提供了安全性。用户还可以调用usrPPPInit()来重新配置PPP结构中的选项,例如可以设置建立一个PPP连接的超时时间。用户调用pppInit()也可以达到同样的目的,与usrPPPInit()不同的是,pppInit()可在运行时调用,其传入的参数是一个PPP_OPTIONS的结构,修改其中相应的字段即可修改PPP连接参数。或者用户也可以修改配置文件来修改PPP参数。

VxWorks向用户提供了众多的参数供修改:是否显示调试信息;是否在协商IP地址成功后,把对方添加进路由表;是否允许IP地址协商功能;是否使用密码数据库作为密码认证。另外,用户可以调用pppInfoGet()来判断一个PPP连接是否成功,有两种途径来删除一个PPP连接:

从对方主机接收到一个断开请求的数据包;调用pppDelete()

值得注意的是,重启机器或者删除一个任务并不会断开一个PPP连接,而只会断开TCP/IP的连接。

VxWorks对于PPP的默认设置是,只能作为客户端发送认证信息,而不能作为服务器来验证用户的认证请求。当然用户可以修改默认参数。

VxWorks还提供共享内存网络驱动作为同一台主机上的多个CPU间的通信手段,作为同一台主机上的多个CPU,都有一个单独的IP地址,都可以单独与网络上的其它主机通信,同样,多个CPU之间也可以使用SOCKET互相通信。

(2) TCP/IP协议族

TCP/IP协议运行于链路层之上,VxWorks除提供对TCP/IP的标准支持外,还有自己的特点。在VxWorks中,TCP/IP参数可以在运行时修 ,用户可以手动修 改路由表,通常在系统中,这是由选路协议自动修改的。VxWorks提供的可修改的TCP/IP部分参数如下表所示:

参数宏

意义

TCP_SND_SIZE_DFLT

TCP默认发送缓存大小

TCP_RCV_SIZE_DFLT

TCP默认接收缓存大小

TCP_CON_TIMEO_DFLT

TCP默认连接超时时间

IP_TTL_DFLT

IP包的最大HOPS数目

IP_QLEN_DFLT

IP包的队列大小(即最多可同时存放多少个IP包)

VxWorks提供的众多参数为开发者提供了最大的灵活性,但是用户在修改TCP的接收窗口大小(Window size)时,必须在调用connect()listen()之前,因为窗口大小是在调用connect()时协商决定的,所以如果在调用之后修改数据包窗口大小,就没有任何作用,因为这时窗口大小已协商完毕。VxWorks默认的接收窗口大小是258,111 bytes,当接收缓存满时,window size自动变为0。此外,VxWorks提供的丰富的接口又为开发者提供了便捷,部分函数如下图所示

函数名

功能

ipAttach()

绑定一个IP地址到本机

ipDetach()

去处绑定的IP地址

ifMaskSet()

设置子网掩码

MRouteAdd()

添加路由

mRouteDelete()

删除路由

VxWorks默认包含四个协议模块:TCPUDPICMPIGMP,用户也可以根据自己的需求添加或减少协议。TCPUDP都是传输层的协议,但是它们有很大的不同,如下表所示:

协议

特征

TCP

UDP

传输形式

字节流

数据报文

开销

可靠性

传输数据前是否需要建立连接

需要

不需要

VxWorks中协议栈所用的内存空间是单独分配的,是以扇区的形式分配的。每个扇区的大小和扇区的总数决定了协议栈所用的内存大小。它是存放在表clDescTbl中的,用户可以修改它。而且VxWorks提供了多种扇区,如64 bytes大小的,128 bytes大小的等。用户也可以指定自己的扇区大小,但是不能有两种扇区,它们的大小在2的两个连续幂之间,如3449不能同时指定,因为它们都位于3264之间。

VxWorksmBlkcBlk结构来存放协议栈所用的数据。mBlk结构变量以链表形式存储,这样只用知道链表头,就可以得到全部数据。mBlk结构中包含一个cBlk结构变量,从而多个mBlk结构可以共享一个cBlk,进而共享其数据,这样提高了数据传输的效率,而不用拷贝。使用cBlk结构而不直接使用指针存储数据的好处是,cBlk结构中保含了一个变量,用来记录有多少mBlk公用了它,从而在释放其数据空间时可以相应处理。如果cBlk被引用的数目减少到0,那么它将自动被从内存中删除。

用户还可以调用netMblkClChainGet()来分配一个mBlk块,并设定其内容,在用户使用完该块后,调用netMblkClChainFree()来释放它。

VxWorks还提供了ping功能,接口函数是ping(主机名,次数,选项)。用来查看和远程的主机是否可以连通。如果ping发送的数据包无法到达目的主机,那么接收到该数据包的最后一个路由将返回一个ICMP错误报文。

VxWorks中,除调用API接口来绑定IP到本机、设置子网掩码等外,还可以从boot行设定,格式是:e = IP:子网掩码

对于广播地址,VxWorks有两种认定,IP地址中,除子网掩码外的所有bit均为10。但RFC标准规定的是应该全为1VxWorks这样作是为了和一些老的系统相兼容。

路由表中的条目可以分为三种:本机路由,静态路由和由RIP协议动态添加的路由。用户可以调用routeProtoPrioritySet()设定各种路由的优先级。

VxWorks还为用户提供了ARP 代理服务器功能,该代理服务器在接收到子网内的ARP请求时,会修改该ARP数据包,把自己的物理地址写进去,再以广播形式发送。

另外,VxWorks不支持二级代理功能。用户可以调用proxyPortFwdOn()来设定UDP协议的广播端口,可以调用proxyPortFwdOff()来关闭该广播端口。

VxWorks中,用户有两种方法在一个子网内分配IP地址:手动和自动(包含INCLUDE_SM_SEQ_ADDR)。采用自动方式时,除了Server外的其它机器的IP地址从ServerIP地址开始依次累 增。VxWorks还提供了网络字节排序(低字节在前,高字节在后)和主机字节排序(相反)的转换宏。

(3) 网络配置协议

VxWorks提供对包括BOOTPDHCPSNMP协议的支持。DHCP协议和BOOTP协议都可以为主机分配IP地址,但是DHCP是动态分配IP地址的,而BOOTP分配的地址是固定不变的。

BOOTP服务器有自己的数据库文件,内容是:BOOT目录和BOOT时所传输的启动文件;可以从本服务器BOOT的主机IP地址、物理地址,主机名和子网掩码。当一台客户端主机向本服务器发送BOOT请求时,服务器首先根据其物理地址从数据库中查找匹配的条目,如果找到,那么判断该主机有无IP地址,如果没有则给它分配相应的IP地址;如果没有找到匹配条目,那么丢弃该请求。服务器在查找BOOT文件时,首先根据 文件名.主机名来查找文件,如果没有找到,则查找文件名文件,如找到则发送该文件。

DHCP服务器不仅可以接收DHCP消息,而且还可以接收BOOTP消息,VxWorksDHCP的实现,在客户端主机IP地址改变时,DHCP服务器必须重新连接主机,否则会导致连接中断,解决的办法是,用户可以配置DHCP,使它可以为主机分配永久IP地址。

VxWorks为用户提供了接口dhcpOptionSet()来修改DHCP的参数,比如IP地址保持不变的最短和最长时间。另外,DHCP动态分配的IP地址优先级低于用户自己手动分配的IP地址。用户调用dhcpBind()来给各主机分配IP地址。VxWorks实现的SNMP协议支持标准的管理信息库(MIB),个人也可以扩展该库。

(4) 选路协议

VxWorks提供对RIPOSPF选路协议的支持,RIP协议的缺点是TTL数不能超过15 这在现在某些情况下是不够使用了。OSPF则没有此限制,但是OSPF的复杂性使得配

OSPF服务器变得很麻烦。

用户可以调用ripRouteShow()函数来显示路由信息。该函数可以打印以下信息:

被数据包广播到的路由;

接力传送该数据包的路由;

相应的子网掩码;

该路由的超时丢弃数据包值;

标志值。

(5) socket API接口

VxWorks提供和BSD一致的Socket接口,而且,在VxWorks中,socket不仅可以用来实现以太网上不同主机的任务之间的通信,还可以用来实现本机任务之间的通信。

多播功能是属于IP层的,但是一般应用使用UDP来实现它。VxWorks提供的多播接口包括:mCastSend(), mCastRcv()。主机要接收/发送多播数据,必须首先加入该多播组。

VxWorks提供的zbuf-Socket接口,使得应用程序和网络层之间无需拷贝数据,而只是简单的移动指针即可。这样提高了系统效率,降低了开销,实际上,zbuf-socket的缓存是以字符串指针数组的形式存放的。

(6) DNS

VxWorks提供对DNS的支持。用户可以调用hostAdd()手动添加域名和地址的映

射,可以调用hostShow()查看主机名和IP地址的映射表。可以调用resolvGetHostByName()函数来根据主机名获得相应的IP地址,可以调用resolvGetHostByAddr()函数来根据IP地址来获得相应的主机名。

(7) SNTPRPC

VxWorks提供对SNTP协议的支持,它可以用于客户端来查询其它机器上的时

间,或者服务器向其它主机提供时间。另外,RPC(远程进程调用)功能只能在任务中使用,每个任务在调用RPC之前都必须调用rpcTaskInit()函数。

(8) 远程文件存取和telnet

VxWorks提供的远程文件存取功能所使用的协议是RSHFTP。另外用户也可以

使用NFS(网络文件系统)来实现文件的传输。其不同点是:RSH/FTP协议使用netDrv驱动,在传送文件时会把整个文件传送过来,存在本机内存中,用户修改完文件后,再传送回去;而NFS使用nfsDrv驱动,它只把用户要修改的部分传送过来,修改完后传送回去,提高了效率。

用户可以把本机配置成为FTP服务器,可设定登录密码。VxWorks提供telnet功能,但是telnet的目的主机也必须是运行的VxWorks系统。

7.对任务的实时监控

VxWorks提供了对系统的实时监控(Spy)功能,它可以提供每个任务运行所耗时间信息、系统所花在中断上的时间信息以及CPU的空闲时间等,其单位是时钟周期,并可以以百分比的形式显示。更强大的监视工具(仿真器)WindView,用于程序调试。

这样可以帮助用户分析各个任务以及中断的执行状态是否正常。

8BSP模块的支持

BSP模块主要用于系统的初始化,包括硬件的初始化、加载系统库并加载应用程序从而运行整个系统等,它可以被掩膜到ROM中,从而不会被修改。另外,sysLibsysAlib是必须加载的,因为它们提供了对各种硬件目标板的支持,他们包括了硬件初始化、中断处理、硬件时钟和定时器管理、内存的映射和大小改变功能等。

9.多CPU的支持

VxWorks的一个特点就是对于多CPU有较好的支持,运行在多个CPU上的任务可以通信,这是由VxMP模块实现的,采用共享信号量和共享消息队列以及共享内存管理的方法。采用共享信号量可以同步不同CPU上的多个任务,就像在本机上使用一样。采用共享消息队列可以让在不同CPU上的任务之间交换数据。采用共享内存可以让在不 CPU上的任务之间共享数据。

10.系统灵活性强

VxWorks强大的灵活性体现在它的各个功能模块都是单独的库,可以根据需要在运行时动态加载。比如任务管理库是taskLib,信号量库是semLib,中断管理库是sysLibintLib,网络库是sockLibI/O库是ioLib等,这些库可以根据需要在运行时动态加载、卸载,从而增强的系统的灵活性,节省了系统空间。

11. 其他

VxWorks还有其他操作系统所共有的功能,为开发者提供了方便。比如看门狗功能,可以在系统进入死机状态时,给用户以处理的机会。

阅读(7482) | 评论(0) | 转发(0) |
0

上一篇:TCP重传

下一篇:提高 Linux 上 socket 性能

给主人留下些什么吧!~~