网站大量收购闲置独家精品文档,联系QQ:2885784924

半同步、半异步全解.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
半同步、半异步全解

半同步半异步模式 -------一个架构模式,清晰的结构,高效并发的I/O ? 译者:?cuichaox@ 英文原文:?/~schmidt/PDF/HS-HA.pdf 摘要 这篇文字介绍了半同步半异步模式,这个模式运用在复杂的并行系统中,把同步和异步I/O模型集成在一起,既保持了编程简单又保证了执行的效率。这个模式中,高层使用同步I/O模型,简化编程。低层使用异步I/O模型,高效执行。各种操作系统和其它复杂的并行系统中广泛使用这个模式,使用这个模式的操作系统有:UNIX, Mach,Windows NT,and VMS。 1 意图 在系统中分离了同步I/O和异步I/O的两个过程,既简化了并行程序实现的复杂,又不会影响执行的效率。 2 动机 如图一所示,为了说明半同步半异步模式,我们来考虑一个软件架构,BSD UNIX[1]的网络子系统。BSDUNIX的内核负责协调异步通信设备(如:网络适配器、远程终端)和应用程序之间的I/O行为。数据包随时到达设备,产生硬件中断,然后由中断处理例程把数据交给操作系统内核。这些中断处理例程接收数据,触发上层的网络协议处理(如IP,TCP和UDP)。应用数据包在套接口层排队。操作系统把这些数据包分发给每个用户进程。用户进程使用系统调用read,以同步的方式接收套接口层的数据。用户进程可以在任意时刻调用read,当数据没有到达的时候,进程将一直阻塞等待。 在这个体系中,操作系统内核响应设备的中断,执行异步的I/O。而用户级的应用程序进行同步的I/O。这正是“半同步半异步”这个名字的由来,这个结构满足下面的两个需要: 编程实现简单。异步I/O模型中,中断随时触发输入和输出操作,编程复杂。使用异步I/O模型,当中断处理例程拥有线程控制权时,会产生非常麻烦的时序和竟争问题。而且,使用中断机制的程序要求额外的数据结构,这个数据结构用于在异步事件发生的时候保存进程上下文状态。并且,程序执行的时候,外部的事件会在不固定的时间发生,程序不容易调试。 与其相比,使用同步I/O模型的时候,I/O操作在确定的点发生,编程实现要容易的多。此外,同步I/O操作的程序会阻塞等待I/O操作的完成。进程运行上下文的活动记录自动在运行栈中保存,不必使用独立的数据结构。因此,为了让编程简单,有强烈的理由使用同步I/O模型。 程序执行高效。在中断驱动的设备上,异步I/O模型运用带来了高效率。异步I/O让通信和计算同时进行。并且,因为程序运行状态的数据量相对较小,上下文切换的消耗被最小化[2]。因此,为了提高运行的性能,也有强烈理由使用异步I/O模型。 与其相比,如果每种资源的事件(例如网卡,终端和计时器)占用一个独立的活动对象(进程或线程),一个完全同步I/O模型效率会低。每个活动对象包含多个资源(例如栈,寄存器),每种资源都会让它阻塞,等待资源事件的发生。在创建,调度,分发和终止这些独立的活动对象,会消耗更多的时间和空间。 3 方案 编程简单和高效率执行是矛盾的,半同步半异步模式目的正是为了解决这个矛盾。这个模式集成了同步和异步两种I/O模式,结构清晰,效率高。在这个模式中,上层的任务(如:数据库查询,文件传输)使用同步I/O模型,简化了编写并行程序的难度。而底层的任务(如网络控制器的中断处理)使用异步I/O模型,提供了执行效率。一般情况下,上层的任务要比下层的任务多,使用一个简单的层次实现异步处理的复杂性,可以对外隐藏异步处理的细节。另外,同步层次和异步层次任务间的通信使用一个队列来协调。 4 应用? 半同步半异步模式在下面的场景中使用。 × 一个系统中的进程有下面的特征: 系统必须响应和处理外部异步发生的事件, 如果为每一个外部资源的事件分派一个独立的线程同步处理I/O,效率很低。 如果上层的任务以同步方式处理I/O,实现起来简单。 × 一个或多个任务必须在单独的控制线程中执行,其它任务可以在多线程中执行。 例如,X Window和Sun RPC的库函数许多是不可重入的。多个控制线程不能安全地同时调用这些函数。然而,为了使多个CPU提高服务的质量,有必要使用并行,不同的线程同时执行批量数据的传输或数据库的查询。使用半同步半异步模式,可以在多线程中分离出单独的线程。在不改变现有代码的情况下,这个分离可以让不可重入的函数在并行环境正确执行。 5 结构和组成单元 图二显示了半同步半异步模式的组成结构。这些组成单元如下描述 ×同步任务层(用户级的进程) 本层的任务完成上层的I/O操作,使用同步I/O模型,通过队列层的队列中传输数据。和异步层不同,同步层的任务使用活动对象[3]执行,这些活动对象有自己运行栈和寄存器状态。当执行同步I/O的时候,他们会被阻塞/睡眠。 ×队列层(套接口层) 这个层在同步任务层和异步任务层之间,提供了同

文档评论(0)

1520520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档