vxWorks的I/O系统

 这个星期项目就要结束了,新项目开始应该还不是特别的忙,趁着这段时间,把一些项目期间该总结的东西贴上来,免得日后忘记了。今天总结下vxWorks的I/O系统:
I/O system

1.文件,设备和驱动程序
文件一般保存在设备上(字符设备,块设备,网络设备,memDev,ramDev,等等);而app访问device则是依靠驱动程序加以完成底层的功能.
文件的名称有一些约定,比如:host:download, DEV1:, /dev1/libs

2.基本的IO
无缓冲的IO, open等操作函数,文件描述符一般是一个整数.

3.缓冲IO
文件描述符是一个指向结构体的指针,此结构包含有与此文件对应的缓冲区. 两种描述符可以相互转换.
缓冲IO相对于基本的IO有一些优点,能减少实际的物理操作,提高系统的性能.但是由于各种缓冲操作限制在单个进程当中,所以对于多进程同时访问设备可能会出现异常情况.另外,以为的close可能也导致缓冲区的信息丢失.

4.select
因为很多东西都可以抽象化为文件,所以select可以应用于多种对象: socket, pipe, message queue, file等等.linux的select功能似乎需要driver的支持, 不知道vxWorks是如何实现的.

5.io系统的内部结构
app可以不用关心驱动的具体实现,但是了解一些驱动体系的结构对提高程序的效率还是很有帮助的.
对于用户的IO请求,vxWorks将其分解为两个阶段的操作: IO系统的处理(与设备无关),驱动的处理(和设备打交道). 比如那些面向字符设备的通信协议就运行在与设备无关的io系统中.vxworks系统的IO子系统只是起到将用户请求和相应的驱动程序关联起来的开关作 用.
最基本的设备类型是字符设备和块设备,块设备一般来说都是和文件系统紧密相关的,由文件系统完成大部分的IO操作,驱动的工作相对来说不是很复杂. 字符设备的种类非常多.
vxWorks的驱动程序除了一般的io操作函数外还包括如下的三个函数: 驱动程序安装函数(iosDrvInstall, 负责在设备驱动程序表中建立表项, 返回表项索引,称为驱动程序索引号), 设备创建函数(xxDevCreate, iosDevAdd, 将设备添加到设备列表中, 设备列表保存了以独立于驱动的DEV_HDR结构开始的结构体,里面包含了许多设备相关的信息. DEV_HDR中包括驱动程序索引号以及设备名称), 中断处理函数(用于处理设备产生的中断). 另外系统使用文件描述符表来维护文件描述符和驱动描述符的关系, 文件描述符表包含了驱动程序索引号以及驱动程序确定的一个四字节的值(该值是驱动程序内部的描述符值, 用于系统识别文件驱动程序使用它来操作相关的文件).

6.关于网络设备的IO
vxworks支持NFS,Non-NFS网络设备.NFS利用nfsMount来进行挂接. Non-NFS又可以分为RSH,FTP(都利用netDevCreate). NFS的话挂接之后只能访问挂接部分的文件,优点是每次访问不必要读入全部的文件内容(相当于网络传输是持续的);而RSH或者FTP每次都把文件的全部 内容一次性读进来, 优点是可以访问全部的文件.当然这里面都有权限的限制.依赖于host system的配置和应用的通信协议类型. 例如应用RSH的话,权限就是利用相应用户目录下的.rhosts文件来控制的, 这个用户就是建立RSH的时候使用的用户名. linux上的服务是通过inetd demon程序提供的. 可以通过观察其日志文件看到remote的RSH请求.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值