UNIX的流模式影响以及和套接字的PK

分层驱动的设计在windows上应用很多,但是实际上却是从unix开始的,早在unix为前途纷争的时代,那时还没有tcp/ip,有人就提出“将一个流压入另一个流”来进行堆栈式的流组合,用以适应多个不同的协议,所谓流,用OO语言讲就是一个对象,包含一个或者多个模块,每个模块拥有两个队列(输入队列和输出队列)以及一套方法,比如“流压入”,“数据放入”,“取出”,“服务”等,一个流的最下端模块压入另一个流的最上端模块时候就需要调用“另一个流”的压入方法用以衔接,数据通过一个流时就要调用该流的服务方法,数据在一个流中的流动就是依次经过各个模块的队列的过程,每个模块都可以对数据实行任意策略化的加工,流模式的IO要比单纯的设备驱动程序更有吸引力,更能体现出“协议”的含义,协议无非就是一套多数人都遵循的规则,其行为无非就是对数据进行加工,将一个协议实现成一个流模块是十分不错的想法,这样协议本身就能和实现IO的具体设备分离开来,一个协议流模块可以压入多个设备的IO驱动流模块之上,在unix上,一个流的一个端点是文件描述符,另一个端点则是设备驱动,也即具体设备,如果想领略一下unix的流的风采,请参见unix的源代码,不方便的话请看linux的终端驱动程序,也可以参考我前面关于终端的文章,此中所谓的线路规程就是一个协议流模块,它可以压在不同的设备驱动程序之上,也可以直接压在一对队列上,如此可以方便实现成对的伪终端,实际上,这世上本来就没有什么网络协议,最初的网络就是终端和主机之间的连接,因此网络协议也是从终端和主机的连接规则中而来,不过当时的所谓终端协议仍然不是对等的通信协议,终端最初只有简单的处理能力,随着计算机科学的发展,最初的真实终端逐渐成为了客户机,终端也退化成了客户机上的一个程序,不对等的通信协议逐渐演化为队列的协议,这就是后来的tcp/ip协议族,此时,终端几乎全部退化为了本机的虚拟终端--键盘/显示器组合(数据直接在用户空间和内核间传输),或者网络伪终端--ssh或者telnet等应用层协议连接的双方终端对(数据需要先进入应用层再返回内核),不管哪种情况,都从流模型中大大受益,用户空间的sshd等进程读写的ptmx和内核空间的键盘/显示器驱动截然不同,但是它们都统一到了流模块队列,因此相同的线路规程可以毫无疑问地压入它们,达到了相同的效果,网络协议最初多数为了实现远程终端仿真(telnet),随后终于脱离了终端的影子,http,ftp,ssl等由运而生,网络开始大行其道,用户不再仅仅希望远程主机帮忙执行自己需要的程序,然后把结果显示给自己--终端的方式,而是希望和远程机器对等的交换数据,仅仅是数据本身--真正的网络。
     如果世上就一个协议,那么一个流驱动硬编码即可,正是因为有很多不同层次的协议,才需要将一些基本的东西抽象出来各自独自成为一个流,然后通过组合这些流来实现不同的协议,当时抽象出来的这些形成各个独立流的基础设施实际上和后来的OSI模型以及tcp/ip的各个层次逻辑很类似,只是没有后者表述的更清楚罢了,不光…………………………………………………………………………

具体:http://www.verydemo.com/demo_c170_i7137.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值