1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
什么是流? 流是一个通用的,灵活的,可编程的Unix系统通讯服务的模块。流为内核与Unix系统的其他部分定义字符输入输出的标准接口。其机制由一组系统调用,内核资源和内核方法组成。 Stream允许你创建一个模块用来提供标准数据通讯服务,并且工作在这个流上。 一个流在用户空间和内核流驱动之间进行全双工数据传输。一个流由3个部分组成:流头,模块,驱动。 流的定义 大写的STREAMS指的是stream可编程模块和工具。小写的stream指的是一个在用户应用程序和驱动之间的一个全双工的实例。 流是一个数据的传输途径 一个流是一个内核的流驱动和用户程序之间的双向的传输路径。一个应用程序打开一个流设备就能创建一个流。 流头: 流头是流里最接近用户空间的。它是流和用户空间的接口。当第一次打开流设备时,流只有流头和流驱动组成(这时没有模块)。 流模块: 一个流模块是一组定义了内核级的方法和数据结构。一个模块以黑箱的方式处理传入的数据。例如一个模块转换小写的字符为大写的字符,或者加上网络路由信息等。流模块是被用户应用程序动态的“压”到流里的。模块及其操作参照第10章。 流设备驱动: 一个流设备驱动是一个实现了流接口的字符设备驱动。流设备驱动在流头和一些模块的下面。它能够在操作外部设备或内部软驱动。驱动在内核和设备之间传送数据。驱动和内核之间的调用Solaris DDI/DKI接口。驱动和内核其他部分的关系在Write Device Dirvers里有解释。这被驱动的细节参见第9章。 流数据: 数据在流里是以消息的格式传输。每个流头,流模块,流驱动都有一个读端和一个写端。当消息从一个模块的读端到下一个模块的读端,这种方式被叫做向上流。消息从一个模块的写端到另一个模块的写端,被称为向下流。内核级的消息操作在“消息组件”章节讨论。 消息队列: 每个流头,模块和驱动都有属于它们自己的一对队列。一个是读队列,一个是写队列。消息在队列中按FIFO的方式有序传输。内核级的队列细节在“消息队列的结构”章节描述。 与流驱动通信 为了和一个流驱动通信,一个应用程序使用read(), write(), getmsg(), getpmsg() , putmsg() , putpmsg() 和ioctl()在一个流上传送和接收数据。 要配置一个流,可以通过命令autopush或者在程序中调用ioctl。 ioctl()接口对一个设备驱动执行一个read(),write()都无法执行的控制操作。ioctl()操作包括压入和弹出一个模块,刷新流,操作信号和选项。某些ioctl命令不仅仅操作模块或驱动,而是整个流。Streamio手册描述了ioctl命令。第4章描述了流之间的通信。 STREAMS多路复用 一个模块化的流允许一个或多个上层的流路由数据进入一个或多个下层的流。这个过程被定义为多路复用。多路复用的例子在“配置多路复用流”章节中描述。 STREAMS轮旬 流中的polling允许一个用户进程检测流头发生的事情。指定你关心的事件,等待它发生。一个应用程序可能需要与多个流合作。poll()系统调用允许应用程序在一个或多个流头检测发生的事件,第3章描述了polling. 消息传输流程控制 流程控制调节用户进程,流头,模块,驱动之间的消息传输速率。With flow control, a module that cannot process data at the rate being sent can queue the data to avoid flooding modules upstream. Flow控制作用于本地的模块或者驱动。第8章介绍了flow控制。 什么时候适用STREAMS STREAMS架构最合适于需要模块化和可配置的情况。例如:网络驱动,终端驱动,图形化I/O驱动。可以根据程序的希望的行为压入或者弹出模块。 STREAMS是在一组协议之间提供模块化。它在Unix System V的网络中是一个主要的组件,因为它易于在协议之间通信。 STREAMS如何工作------应用程序接口 一个应用程序打开一个流设备,这样就创建了流头并可以访问设备驱动。流头把从用户程序的数据打包成STREAMS消息,并传入向下流进入内核空间。一个或者多个Module可以被压入流头和驱动之间来定制一组任务以在传入驱动之前完成一些处理。换句话说,一个流可以只有流头和驱动,而根本没有Module. 打开一个流 对于一个用户应用程序来说,一个流设备类似一个普通的字符I/O设备,它在系统文件表中有一个或者多个节点(node)。用open()就可以打开。 文件系统将每一个设备看作一个特殊文件。文件中有一个主设备号的入口,指出实际的设备驱动将激活这个设备。There are corres

您可能关注的文档

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档