20070927 星期四 九月 27, 2007

STREAMS流控机制的实现 STREAMS在Solaris中有广泛的应用,如字符设备驱动程序、网络协议、网卡驱动程序等。如用strconf查询shell STDIN的流配置。

# strconf
ttcompat
ldterm
pterm
pts

STREAMS的流控(flow-control)机制比较简单,STREAMS中的模块(module)或驱动程序(driver)调用canputnext(9f) 检查下个队列(queue)能否接收消息(message),如果下个queue“满”,或者说下个queue中的数据量大于q_hiwat(high-water mark),模块就调用putq(9f)putbp(9f) 把消息放到本地queue中,并设置其service函数稍后被调度执行。如果service函数在这一次的运行中没能处理完本地queue中的所有数 据,则有两种方式可以再次调度执行service函数,一是显示地调用qenable(9f);二是隐含地当下个queue的数据量小于q_lowat(low- water mark)时该模块的service函数即被执行。

支持流控的模块都需要定义service入口,流控发生在两个相邻且定义了service入口的queue之间。更加详细的描述请参考《STREAMS programming guide》《UNIX System V Networking Programming》 。或者请参考Solaris的源代码canputnext()putq()getq() 的具体实现。 Posted by Judy Chen in STREAMS at 20070927 Comments[0]

Comments:

Post a Comment:
Comments are closed for this entry.
Click me to subscribe
Judy Chen
« 十二月 2008
星期日星期一星期二星期三星期四星期五星期六
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   
       
Today

Recent Entries



Photos

www.flickr.com


Referrers & Other Stats


View My Stats