分层结构软件各层次之间通信
来源:互联网 发布:石油计量表软件 编辑:程序博客网 时间:2024/06/06 20:17
对软件进行层次化分解通常是解决软件复杂性的一种手段,在操作系统、网络协议栈设计中屡见不鲜。
1. 当上层模块需要传递数据给下层模块时,调用一个函数或者过程即可搞定。
2. 那么,反过来,当下层模块需要把数据传递给上层模块的时候,又当如何处理呢。
2.1 从网络协议栈的实现情况来看,似乎都是在下层模块中放一个队列,要递交到上层模块的数据都按照FIFO的顺序丢在这个队列里面。这个队列对上层模块来讲是不可见的,当上层模块需要一个数据时,就调用下层模块中的函数,返回从这个队列头部取出的数据。
2.2 也可以考虑在下层注册一个回调函数。
3. “上层”永远处于主导地位。从概念上来说,应该是上层控制下层,下层没有管理上层的权利,那么上层不需要数据的时候,下层就算有数据想往上递交也白搭,下层不能驱使上层来做它想做的事情。
4. 以IO设备的驱动程序为例,显然,驱动程序是下层的,上层的代码调用驱动程序来实现一些具体的功能,比如程序操作一个网卡进行通讯。
那么上层可以发命令给下层send一个包,这个是简单的逻辑。复杂的逻辑就是,网卡驱动收到了包以后,怎么让上层程序知道。传统上,我们知道其实也就是两种方法,第一种,上层不断的查询buffer看看是不是满了,满了就读出来。第二种,驱动接到数据后,发中断给操作系统(或者是发消息,看你站在那个层面去考虑了),上层程序收到消息就去检查buffer。
5. 另外,通信行业中也常用到一个原语的概念。它是一种异步的、并行的这么一种请求方式。
一般来说,协议栈种经常可以看到这种设计:
上层对下层发出请求:称作request原语(附带上层实例句柄);下层对上层请求的回复:称作confirm原语(附带下层实例句柄,如果有必要后续调用到下层实例的话)。下层对上层发出请求:称作indication原语(接收到的来自远程的请求,附带下层实例句柄);上层对下层请求的回复:称作response原语(附带上层实例句柄)
原语通信,意味着你发送一个请求后,对于对方(可能是上层、下层)是否成功执行请求,你是不知道的。甚至你都不知道对方是否接收到请求。每个原语都是如此。这就要求原语的设计必须是成对出现的。逻辑上,原语的设计原则类似这样。
实际程序中,原语对应的函数调用可以返回各种错误值,只是原语逻辑的是和非,不去通过函数返回值判断。
通信行业使用得很普遍。
转载地址:http://hi.baidu.com/olaputan/blog/item/727a9045b54a313786947320.html
- 分层结构软件各层次之间通信
- Android 软件层次结构
- 【笔记】软件结构模式-分层结构
- 软件的层次化结构
- Hi SDK软件层次结构
- 软件的层次结构之Swing
- 分层显示类别层次
- 分层显示类别层次
- 分层结构
- 软件分层
- 软件分层
- 软件分层
- 嵌入式系统的硬件基本结构和软件层次结构
- 嵌入式系统的硬件基本结构和软件层次结构
- Linux内核网络协议栈笔记1:协议栈分层/层次结构
- 网络层次协议和结构体系之间的关系
- 网络层次协议和结构体系之间的关系
- 层次结构
- CSDN开源夏令营 基于Compiz的switcher插件设计与实现之compiz特效插件介绍及特效实现
- notepad++支持go语言高亮与go语言插件
- LeetCode :: Next Permutation
- 【索引】Game Theory ::Examples
- C++异常处理机制及開銷分析
- 分层结构软件各层次之间通信
- 7.22通过对象的引用访问对象中的成员
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- Font标签
- 使用 python Matplotlib 库绘图
- AIX 7.1 install python
- hdu2255
- java sleep()和wait()的区别
- No bean named 'cxf' is defined