Windows系统中进程间通信方式探析

来源 :中国电子商情 | 被引量 : 0次 | 上传用户:zbtoy
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  引言:系统中进程间的通信及数据交换对于许多应用是至关重要的,尤其是随着软件开发模式逐渐走向分散化和模块化的今天,系统内部或通信双方各进程间协调、控制愈发频繁起来,保持及时的通信及数据交换是完成好任务的必要条件。因此解决好此类问题是做好系统的全题条件。
  1.进程及通信类型
  1.1系统中进程的划分
  系统中的进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。对Windows操作系统而言,多用户多任务是其最基本的要求,从而多进程是其基本特征。进程间共同完成特定任务时分工、协作是必然的,从此角度出发,可将系统中的进程分为两类:客户方进程和服务方进程[1]。客户方进程是指发起通信的进程或应用程序,而服务方进程是指接受并应答发起方信号的进程。此种分类对所有的通信双方都适用,但无益于软件开发。另一种分类方法是从软件开发的角度出发,可将系统中的进程分成已方进程、系统进程和他方进程[2]。已方进程即由软件开发方开发的应用程序进入系统后形成的进程,而软件开发方开发的应用程序以外的应用程序进入系统后形成的进程称为他方进程,而系统进程则是由Windows操作系统所提供的进程。第三种分类方法是以进程所处的位置为出发点,可分为本地进程和远程进程[3]。
  1.2进程间的通信类型及特点
  根据进程分类结果,可以得到进程间的通信类型:
  Ⅰ、本地已方进程之间的通信;
  Ⅱ、本地已方进程和远程已方进程间的通信;
  Ⅲ、本地已方进程和本地他方进程间的通信;
  Ⅳ、本地已方进程和远程他方进程间的通信;
  对于第一种进程间通信,通信双方进程的彼此都来自于同一软件开发方,进程间通信的协议、数据和内容都可由软件开发方在软件设计阶段统一加以考虑。软件开发方在软件设计阶段充分考虑到进程间通信的需求,进而主动采取某种较为成熟的通信实现方式来分别设计实现进程间通信的客户端和服务器端,从而形式进程间通信的既成的“默契”,这种“默契”实际上是在软件设计阶段就取得了,在此将这种通信模式称为“有意识”型。
  第二种进程间的通信方式,尽享了第一种进程间通信方式的便利,但不在开发时选择通信的方式上受到了一定的限制,是一种有约束的“有意识”型模式。
  第三种和第四种进程间的通信方式中,通信双方来自完全不同的软件开发方,由此很难在事先达成类似第一、二类型进程间的通信的那种“默契”,通信过程中,通信双方往往没有既定的客户端和服务器端,服务器端完全不知道客户端进程的存在,也不清楚客户端要与之实现通信所使用的某种特定的协议的内容,服务端只能对符合自己格式和类型的客户请求作出响应,故此这种通信模式是“无意识”型[2]的,不管进程是否在本地,通信的双方都只是按自己认定的规则做事,在本地按既定的规则做,不在同一主机也按符合远程通信的既定规则工作。
  上述的分类方式有助于开发者选择不同的通信方式,但不足以反映通信时进程的特点。因此,关于进程间的通信又常根据进程通信时信息量大小的不同分类,进程间传递少量的控制信息将其通信称为低级通信,而传递大批数据信息时,将其称为高级通信。
  低级通信主要用于进程之间的同步、互斥、终止、挂起等等控制信息的传递。高级通信主要用于进程间数据块的交换和共享。
  2进程间通信方式及不同通信类别下的选用
  2.1进程间通信方式及特点
  Ⅰ、文件映射。文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步。
  Ⅱ、共享内存。Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用特定的地址来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是 用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。
  Ⅲ、WM_COPYDATA消息。WM_COPYDATA是一种很好的数据传输方式。当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需像处理其它消息那样处理WM_COPY DATA消息,这样收发双方就实现了数据共享。它的使用非常简单,在底层实际上是通过文件映射来实现的。它的缺点是灵活性不高,并且它只能用于Windows平台的单机环境下。
  Ⅳ、剪贴板。剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows 应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。但剪贴板只能在基于Windows的程序中使用,不能在网絡上使用。
  Ⅴ、动态数据交换。动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。DDE交换可以发生在单机或网络中不同计算机的应用程序之间。开发者还可以定义定制的DDE数据格式进行应用程序之间特别目的IPC,它们有更紧密耦合的通信要求。大多数基于Windows的应用程序都支持DDE。
  Ⅵ、对象连接与嵌入。应用程序利用对象连接与嵌入(OLE)技术管理复合文档(由多种数据格式组成的文档),OLE提供使某应用程序更容易调用其它应用程序进行数据编辑的 服务。例如,OLE支持的字处理器可以嵌套电子表格,当用户要编辑电子表格时OLE库可自动启动电子表格编辑器。当用户退出电子表格编辑器时,该表格已在原始字处理器文档中得到更新。在这里电子表格编辑器变成了字处理器的扩展,而如果使用DDE,用户要显式地启动电子表格编辑器。同DDE技术相同,大多数基于Windows的应用程序都支持OLE技术。   Ⅶ、管道。管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道可以是单向即一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。
  管道有两种,一种是匿名管道(Anonymous Pipe),它用于在父进程和子进程之间,或同一父进程的两个子进程之间传输数据的无名字的单向管道。匿名管道是单机上实现子进程标准I/O重定向的有效方法,它不能在网上使用,也不能用于两个不相关的进程之间。另一种管道是命名管道,命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。命名管道提供了相对简单的编程接口,使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同时和多个进程通信它就力不从心了。
  Ⅷ、邮件槽。邮件槽(Mailslots)提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。
  Ⅸ、动态连接库。Win32动态连接库(DLL)中的全局数据可以被调用DLL的所有进程共享,这就又给进程间通信开辟了一条新的途径,当然访问时要注意同步问题。虽然可以通过DLL进行进程间数据共享,但从数据安全的角度考虑,我们并不提倡这种方法,使用带有访问权限控制的共享内存的方法更好一些。
  Ⅹ、远程过程调用。Win32 API提供的远程过程调用(RPC)使应用程序可以使用远程调用函数,这使在网络上用RPC进行进程通信就像函数调用那样简单。RPC既可以在单机不同进程间使用也可以在网络中使用。由于Win32 API提供的RPC服从OSF-DCE (Open Software Foundation Distributed Computing Environment)标准。所以通过 Win32 API编写的RPC应用程序能与其它操作系统上支持DEC的RPC应用程序通信。使用RPC开发者可以建立高性能、紧密耦合的分布式应用程序。
  Ⅺ、NetBios函数[4]。Win32 API提供NetBios函数用于处理低级网络控制,这主要是为IBM NetBios系统编写与Windows的接口。除非那些有特殊低级网络功能要求的应用程序,其它应用程序最好不要使用NetBios函数来进行进程间通信。
  Ⅻ、Windows套接字(Windows Sockets)。Windows套接字规范是以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义的一套Windows下的网络编程接口,是跨平台的协议,现在通过Sockets实现进程通信的网络应用越来越多。另外高版本的 WinSock 不仅支持TCP/IP协议,而且还支持其它协议(如IPX)。Sockets的唯一缺点是它支持的是底层通信操作,使用是十分繁琐,这使得在本地进程间进行简单数据传递较为不便。
  2.2 第一种通信进程类型间通信的实现方法
  所有的通信,对于通信的双方均需要事先达成通信协议方可实现,对于第一种通信类型的进程间的通信,通信的双方是同一开发者,取得“默契”条件成熟,实现较易。较其方式也最多。主要有以下几种: 文件映射、共享内存、WM_COPYDATA消息、剪贴板、动态数据交换、对象连接与嵌入、匿名管道、动态连接库、NetBios函数、Windows套接字等。
  2.3第二种通信进程类型间通信的实现方法
  虽然与第一种一样有取得“默契”的先天条件,但由于通信的双方处于不同的主机中,且由于Windows操作系统的进程间的保护机制,会造成执行时发生数据存取的保护性错误(Access Voilaton),故通信的方式受到一定的限制。此种有意识模型的通信方式主要有以下几种:文件映射、WM_COPYDATA消息、动态数据交换、对象连接与嵌入、命名管道、邮件槽、Windows套接字(Windows Sockets)等。
  2.3第三种通信进程类型间通信的实现方法
  本种通信进程类型中的通信双方虽然处于同一主机中,但由于开发者的不同,双方只能根据公共的规则和协议实现各自的开发。故其通信方式亦受到一定的约束,其常用的方式有如下几种:动态数据交换、对象连接与嵌入、命名管道、邮件槽、Windows套接字等。
  2.4第四种通信进程类型间通信的实现方法
  这种通信进程类型中的通信双方间的通信所受的制约最多,既要考虑到进程间远程特性,又要考虑到双方的开发者“不识”,故其通信方式在选择时最为谨慎,常用的通信方式有:命名管道、邮件槽、Windows套接字等。
  3.结语
  系统进程繁多,Wiondows32下为进程间提供的通信方式繁杂,在软件开发的过程中,对不同类型进程间的通信方式选用适当的通信方式,既能适当减少开发的工作量又能保证所开发软件的健壮性和可靠性,同時能大大提高了通信的灵活性。在实际开发中,将几种模式的进程间通信的实现方法结合起来加以应用,即可实现各类进程间的数据交换。
  参考文献
  [1]新编WINDOWS API参考大全编写组.新编WINDOWSAPI参考大全[M].北京:电子工业出版社,2005.
  [2]梁庚,白焰. Windows下进程间通信方式探讨[J] 微型电脑应用 2006,(22):44,58~60.
  [3]求是科技 王洪涛编著. 深入剖析Visual C++[M].北京:人民邮电出版社,2004.
  [3]David Bennet著.徐军译.VC++5开发人员指南[M].北京:机械工业出版社,1998.
  [4]肖红伟.VC++6.0编程实效百例[M].北京:人民邮电出版社,2002.
  (作者单位:无锡商业职业技术学院物联网技术学院)
其他文献
引言:汽车各个部件设置二维码,通过二维码扫描技术,完成4S店维修保养等工作,提高服务质量,降低成本。  一、项目背景  4S店为实现对各服务站科学管理,提高服务质量,降低维修成本,与我公司达成合作,通过使用我公司的3G技术,利用智能手机终端对发动机及其部件的二维码进行扫描,上传到原有的CRM系统,现要求我公司负责开发二维码应用系统且与朝柴公司的CRM系统实现对接。  二、项目推广能力  手机售后服
期刊
引言:本文探讨了局域网故障排除的步骤,阐述了局域网故障诊断技术,提出了局域网故障排除方法。  现代信息技术的发展与网络的普及,使得局域网在各单位信息交换与资源共享的应用中越来越重要,如何对其进行有效的维护与性能优化就成了确保网络安全与稳定的重要任务之一。局域网络就是将不同地理位置的、相对独立的多个计算机系统通过通信设备和传输介质连接起来,配以一定的系统软件和协议,实现资源共享和信息通信系统。它的作
期刊
引言:本文从项目教学法的理论基础、教学设计等方面,就中职学校计算机专业课教学中项目教学法的应用进行探讨,通过教学实践,提出项目教学法在实际应用中存在的问题和解决办法,对比项目教学法与传统教学法的差异,探索项目教学法在中职学校计算机专业课教学中应用的意义。  随着计算机技术和网络技术的迅速发展,人们的学习方式、思维方式、工作方式乃至生活方式都在发生变化,这对传统教育管理和教学模式提出了更高的要求。中
期刊
引言:人们在日常生活中主要依靠视觉来获取信息。图像作为一种简单直观的获取信息的途径,广泛应用于人们的生活与工作中。随着我国社会经济发展和科学技术的的不断加快,数字图像处理技术也在不断进步。因此,对其发展现状进行详细探討是十分必要的。笔者在研究数字图像处理技术的方法和特点等方面的同时,针对其发展现状及其未来方向进行了相关探究。  图像是用来描述物体具体信息的方式,数字图像即将其所携带的信息转化为数字
期刊
引言:随着经济的发展,企业内部、以及企业与企业之间的业务量巨增,传统企业电子商务系统已远远不能满足企业的信息化发展需求。面对企业多业务管理发展需求对计算机网络技术提出的新挑战,本文将企业业务IP化,采用最新的PTN技术来承载IP化业务,结合NCW和C4ISR在军事变革方面的战略理念,设计出一款新型企业电子商务系统。该系统能够很好满足企业多业务的管理与安全需求,推进企业管理的信息化,更好的带动企业现
期刊
引言:初等教育和义务教育要按学生的发展需要去引导、积淀,循序渐进地涵养,不断提高儿童的个体兴趣和追求;中高等教育和专业的职业教育应是提升每一个生命个体创造社会财富能力的重要教育形式;健康教育会指导人们的正确生活方式;企业的加工作业及交通安全教育也是当下不可小视的影响改善民生的教育。改善民生中包含着教育,教育又会反过来影响着民生的改善,但是歧形的教育会阻碍民生的改善,重视当下初等教育的不健康发展,教
期刊
引言:计算机技术应用于电子专业教学是人才培养的需要,是时代发展的需要,能将虚拟实验变成可能。电子专业学生毕业后无论从事何种职业都离不开计算机,要提高学生的就业竞争力,学校必须有意识的培养和提高学生应用计算机处理问题的能力和水平。  计算机技术的应用和普及,直接推动经济社会加速发展,改变人们生活习惯,进而带动工作效率的提升和生活质量的改善。工作、学习离不开计算机,休闲、娱乐离不开计算机,沟通交流更离
期刊
引言:通信兵是个特殊的兵种,担负着部队的通信联络。平时要全天候不间断值班执勤,战时主导信息化战场各种信息的传输控制。通信的技术性,装备更新快的特点要求通信兵要具有很好的心理素质,以便更好地适应环境,完成通信保障任务,因此,加强通信兵的心理素质建设,对于提高通信保障能力,适应未来信息化战争心理战具有重要的意义。  一、增强通信兵心理素质的意义  (一)是人才建设的需要  良好的心理素质,是军人整体素
期刊
引言:计算机系统中的信任问题长期以来都倍受国家、学术界和企业界的关注。本文参考社会学和心理学将人与人之间信任的产生来源分为三个方面:外部来源、交互来源和内部来源,并提出一种层次化的信任度计算模型,该模型可以根据不同类型的用户调整不同来源的信任在整个模型中所占的比例。最后,利用Epinions网站的相关数据对模型进行了验证。  本文参考社会学和心理学将人们之间信任的产生来源分为三个方面:外部来源、交
期刊
引言:以职业技能竞赛引领专业建设和教学改革的探索与实践,通过开展职业技能竞赛促使学校的教学培养目标更加趋近于行业标准对人才的要求。  一、职业技能大赛发展取得的成绩  “普教有高考、职教有竞赛”,职业技能竞赛是职业教育界的盛会,也是对职业教学成果的一次大检阅,其发挥着“检查展示、选优激励、引领示范”的作用,通过大赛带动学校对课程设置的调整,促使教师改革教学环节,使学生探索学习方法,使技能竞赛成为促
期刊