驱动的问题

向高手请教:我现在在看别人的驱动,驱动里面对resmgr_io_funcs_t.unblock函数重新写了,于是我去查看 Resource Manager里面Handling client unblocking due to signals or timeouts.但是看不太明白.
1.unblock的基本原理是什么?
2.好象是Client发送PULSE到Resource Manager,可是在挂起的时候Client怎么会发送这样一个PULSE呢?
有谁对这个熟悉,给大概讲一讲啊.

“unblock” 是一个在REPLY BLOCK下的客户端,希望解除其REPLY BLOCK状态。

被挂起的Client不会发送PULSE的,那个要求UNBLOCK的PULSE是由系统(内核)发给resource manager的。

考虑这样一个情形。

cat </dev/ser1

  1. cat 程序(client)向串口驱动(resource manager)请求读数据,串口没有数据,不作应答,这样cat就REPLY BLOCK了。

  2. 如果在这时按"Ctrl-C",这个Ctrl-C由鍵盘驱动收到后,最后变成一个SIGTERM,通过内核,发向cat.

  3. 内核发现cat正在等串口驱动的回答,内核将SIGTERM入队,然后向串口驱动发PULSE,告诉resource manager,“你有一个Client希望Unblock”。

  4. Resource Manager进行Unblock处理,最后做一个MsgError()/MsgReply(),放走client.

  5. client (cat) 脱离挂起状态,立即收到入队的SIGTERM,然后处理(退出运行)。

注意在4)里,resource manager也可以选择不响应pulse,这样cat就会继续被挂在那里。用户的感觉就是Ctrl-C也杀不了进程.

多谢xtang了,有些明白了.