- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * Fd表 文件用open()或creat()打开,I/O系统在设备列表中搜索与文件名最匹配的设备,找到后用设备头中的驱动编号查找对应的驱动表中的打开例程。 I/O系统必须建立fd与驱动之间的联系 驱动必须将每个fd与特定数据结构关联起来,在非块设备的情况下,通常是设备描述字 I/O系统在fd表中维护这些联系。表中包括 驱动编号 驱动确定的4字节值(用于标识文件) * * 打开文件 * * 打开文件 * * 从文件中读取数据 * * 关闭文件 用户使用close()关闭文件 I/O系统根据fd表找到对应驱动的关闭例程 驱动的关闭例程运行之后,I/O系统将fd表中对应条目标识为可用 * * 实现select() Select()可以使一个task等待在多个I/O上,或者超时返回。 设备驱动支持select()的方法和步骤,参见VxWorks编程指南(VxWorks Program Guide)的3.9.3节 * * Cache一致性 * * Cache一致性 数据Cache通过减少内存访问次数来提高性能 有cache的板子的驱动必须保证Cache的一致性 Cache一致性指Cache与RAM中的数据必须同步或一致 当出现对RAM的异步访问时(如DMA设备访问或VME总线访问),Cache和RAM中的数据可能会失去同步 数据cache有两种工作方式: Writethrough:向cache和RAM写数据,保证输出同步,不保证输入 Copyback:只向cache写数据,不能保证输出或输入同步 * * Cache一致性 在Copyback的情况下,如果DMA从RAM中读数据,可能会与Cache中不一致。所以读之前要保证Cache中的数据全部刷新到RAM中 如果CPU要读取来自DMA设备中的数据,那么从RAM和Cache中读的数据可能不一致,因此要将Cache中的数据标识为非法,使CPU从RAM中读取数据 驱动保证Cache一致性的方法: 分配cache安全缓冲区(不能cache的缓冲区) 当向设备写数据或从设备读数据时,刷新cache或标识为非法 * * Cache一致性 分配cache安全缓冲区 对静态缓冲区有用,但要求MMU支持 经常分配或释放不能cache的缓冲区(动态缓冲区)将导致大量内存被标识为不能cache 手动刷新Cache条目或者将其标识为非法,可以使动态缓冲区保持一致 CacheFlush() cacheInvalidate() 将上面两种方法结合起来效率更高 只有非常必要时才刷新Cache条目或将其标识为非法 * * 块设备 在VxWorks中,块设备不是直接与I/O系统交互,而是通过文件系统与I/O系统交换 从SCSI-1开始支持直接访问块设备,与各种操作系统兼容 VxWorks还支持SCSI-2顺序设备,数据块只能写在媒质末尾,不能替换中间的数据,但可以从任何地方读取数据;这与其它块设备的处理不同 * * 块设备驱动 块设备驱动必须支持创建逻辑块设备结构,包括一些公共特性,如设备物理配置变量、指定驱动的例程等 BLK_DEV:直接访问块设备 SEQ_DEV:顺序块设备 设备初始化(dosFsDevInit()) 块设备的低级驱动不在I/O系统的驱动表中,而是每个文件系统作为一个“驱动”安装在驱动表中 每个文件系统在驱动表中只占一个条目,即便它为多个设备服务 设备初始化后,与某文件系统关联,所有I/O操作经文件系统查找BLK_DEV或SEQ_DEV中的例程 * * NPT套件 * * NPT套件 * * 使用NPT收发包的层次结构 IPv4接口 IPv6接口 设备层 IPv4PethDriver IPv6PethDriver END Driver MUX函数调用接口 MUX层 Service函数调用接口 Service层 USER层 协议转换,地址转换,FTP_ALG,DNS_ALG * 任务状态反映任务当前在系统所处的情形。内核负责维护系统中所有任务的当前状态。一个任务从一个状态转变为另一个状态是应用调用内核调用的结果。 * * 标准输入、标准输出和标准错误 下面的文件描述字(fd)保留作特殊用途: 0 = 标准输入 1 = 标准输出 2 = 标准错误输出 它们不会由create( )返回,但可以重定向到其它fd 系统缺省情况下将标准fd重定向到控制台,任务缺省情况下使用全局重定向的定义 它们可以被全局重定向: ioGlobalStdSet (stdFd, fileFd); 每个任务的重定向将覆盖全局定义 ioTaskStdSet (0, stdFd, fileFd); * * ioctl( ) 为了运行某些不适合于其它基本I/O的I/O函数,使用ioctl( )设置或查询一些属性,譬如: 当前设备可输
文档评论(0)