分布式通信的几种方式

分布式通信的几种方式
分布式通信的几种方式

分布式通信的几种方式

(EJB、RMI、RPC、JMS、web service杂谈)

RPC(remote produce calL)

RPC是远程过程调用协议,它是基于C/S模型调用的机制,客户机向服务器端发送调用请求等待服务器应答,是一种典型的请求应答机制,

大致过程可以理解为本地分布式对象向本机发请求,不用自己编写底层通信本机会通过网络向服务器发送请求,服务器对象接受参数后,

经过处理再把处理后的结果发送回客户端。

它是早期的支持分布式一些,缺点rpc是面向过程的远程调用,不支持面向对象,所以现在用的人就少了。

不支持异步调用

RMI(remote method invocation)

rmi也是远程方法调用,似乎和RPC一样都是调用远程的方法,我们可以把RMI看作是用java语言实现了RPC协议,由于RPC不支持对象通信,

这也是RMI比RPC的优越之处,支持对象传输。

它遵循的不是SOAP协议,而是JRMP(java remote message protocol)转为java对象所制定的一个协议,可以运行在任何用java语言写的系统上,

具有跨平台特性,它不能跨语言。

既然用只支持java那么它也有了java对象的很多特性,如果垃圾回收、面向对象等。

RMI 采用stubs (客户机)和skeletons (框架)来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,

远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,效果和调用本地对象一样。

传输的数据一般是java对象,而不是XML格式的数据。

优点:支持分布式对象、跨平台,stubs/skeletons机制;缺点:不能跨语言。

JMS(java remote service)

jms是在各个java类(包括ejb类)之间传递消息的中间件,好比给我们送信的邮递员,在各个人之间收发信件。

支持两种消息模型P2P和pub/stub,即点对点和发布订阅模型。

传输的是一种消息移植机制,将消息从一个客户机移动到另一个终端。

优点:支持异步通信、消息produce和recept松耦合。

EJB(enterprise java bean)

ejb是java EE 中的一个规范,该规范描述了分布式应用程序需要解决的问题,例如事务处理、安全、日志、分布式等,而同时呢,sun公司也实现了自己定义的这一个标准,

相当于自己颁布一个标准然后,又给出了实现供别人使用,实现以很多API的方式提供给用的人。

ejb是按照java服务器接口定义的java类,可以理解为一个特殊的java类,放在容器里容器可以帮助该类管理事务、分布式、安全等,一般小的程序不会用到,

只有大型分布式系统才会用到ejb,既然ejb是一个java类或是一个组件,颗粒较小,这也是与Webservice的区别之一,下面会说到,它就可以被其它一个或多个模块调用。

包含了三种类型的Bean,可以通过注释JPA一个规范来标记,其中有一种Bean,叫MDB消息驱动bean,它的通信机制涉及到了JMS协议。

ejb可以进行远程调用,但是不能够跨语言,ejb是同步调用,而平时我们说的的ejb异步调用指的是ejb的MDB异步通信。

Web Service

Web service是一种网络间跨平台、跨语言的分布式系统间通信的标准。传输的数据位XML、json等格式的数据,应用范围广。

Web Service大体上分为5个层次:

1. Http传输信道

2. XML的数据格式

3. SOAP封装格式

4. WSDL的描述方式

5. UDDI UDDI是一种目录服务,企业可以使用它对Webservices进行注册和搜索

EJB与JMS的关系

它们其实是没有多大关系的,它们都是java EE的规范,ejb的一种类MDB实现了JMS规范,当然实现JMS规范的不止有ejb的mdb,比如apache ActiveMQ也实现了JMS规范,我们平时用的是实现了JMS的产品,而不是JMS规范。

Web service与EJB

对这两个常常有点迷惑人,因为他们都实现了分布式应用调用,虽然他们很相似但是还是有很多区别的,首先通信协议是不一样的,ejb采用rmi-iiop协议,

Web service利用http协议传输数据,有点常识的都知道http协议支持的较广泛,从这点来看Web Service层次要高一些、俗话说站得高看得远。

Webservice主要关注于解决异构系统、不同语言系统通信,其关注的是分布式服务开发、着手点要高、站的角度高,而ejb可以看做是分布式编程平台,

通过容器和组件,简化了程序开发、调试和部署等,它关注的是分布式组件开发,粒度小。

Web service可以看做是异构系统、异构语言系统间通信的一个标准,而ejb只属于J2EE规范的一部分。

ejb底层用rmi-iiop协议进行通信,防火墙会阻止;web service是基于http协议进行通信,防火墙不会阻止。

SOA与Web Service

SOA 是面向服务体系架构,是一种编程思想,SOA不是Web Service,WebService是目前最适合实现SOA的技术。

小结

这些通信标准或实现各有个的优点和缺点,在实际使用中根据具体情况合理选择。

基于可调度性与全局延迟的分布式嵌入系统实时通信中的总线访问优化

基于可调度性与全局延迟的分布式嵌入系统实时通信中的 总线访问优化 本文在对TTP通信协议进行研究的基础上,发现嵌入式实时系统通信过程中的消息调度算法只考虑消息的可调度性而没有对全局延迟进行考虑的问题,从而提出基于可调度性及全局延迟的实时通信的总线访问优化的研究课题,随后对实时通信总线的访问优化算法进行了研究,其中包括:静态单消息算法、静态多消息算法、动态消息分配算法以及动态数据包分配,并对可调度性的判断依据进行了说明,最后通过研究现有可调度性最优算法,从而给出改进后的算法描述并加以实现。 第一章绪论 1.1课题背景 随着网络技术以及和数字信息技术的高速发展,在信息家电、医疗仪器、智能汽车、工业控制、通信设备各个领域中,嵌入式系统无处不在。随着网络技术的飞速发展,在许多嵌入式应用中,往往包含许多设备,譬如只能中央空调,这时分布式系统就是实现这种系统最方便、最现实的方法[1]。 由于分布式系统具有如下特点:时间关键的任务放在不同的CPU中可以更容易保证满足它的死线要求;把处理器放在设备级上更便于实现设备之间的接口;如果系统中包含从供应商购买的几个设备或系统,它们之间也含有自己的CPU,或者还包含有通信接口,通常不可能把系统的任务放到这些设备中,或者相反把设备的任务放到系统中;使用几个小CPU比使用一个大CPU更便宜;分布式的系统能够利用本身的高度容错性使得在高性能领域分布式系统系统中具有得天独厚的优势。 所以,许多嵌入式系统利用分布式系统实现,在分布的处理器之间利用通讯链路连接起来,数据链路可以是高速并行数据总线(紧耦合型),也可以是串行数据链路。 但是,随着电控单元的增多、功能日益复杂、网络通信数据量不断增大、要 1

Windows进程间各种通信方式浅谈

Windows进程间各种通信方式浅谈 1、Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。 多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API) 提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC),进程通信就是指不同进程间进行数据共享和数据交换。 正因为使用Win32 API进行进程通信方式有多种,如何选择恰当的通信方式就成为应用开发中的一个重要问题, 下面本文将对Win32中进程通信的几种方法加以分析和比较。 2、进程通信方法 2.1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。 Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。 应用程序有三种方法来使多个进程共享一个文件映射对象。 (1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。 (2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它IPC机制(有名管道、邮件槽等)把名字传给第二个进程。 (3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机制(有名管道、

进程间通信的四种方式

一、剪贴板 1、基础知识 剪贴板实际上是系统维护管理的一块内存区域,当在一个进程中复制数据时,是将这个数据放到该块内存区域中,当在另一个进程中粘贴数据时,是从该内存区域中取出数据。 2、函数说明: (1)、BOOL OpenClipboard( ) CWnd类的OpenClipboard函数用于打开剪贴板。若打开剪贴板成功,则返回非0值。若其他程序或当前窗口已经打开了剪贴板,则该函数返回0值,表示打开失败。若某个程序已经打开了剪贴板,则其他应用程序将不能修改剪贴板,直到前者调用了CloseClipboard函数。 (2)、BOOL EmptyClipboard(void) EmptyClipboard函数将清空剪贴板,并释放剪贴板中数据的句柄,然后将剪贴板的所有权分配给当前打开剪贴板的窗口。 (3)、HANDLE SetClipboardData(UINT uFormat, HANDLE hMem) SetClipboardData函数是以指定的剪贴板格式向剪贴板上放置数据。uFormat指定剪贴板格式,这个格式可以是已注册的格式,或是任一种标准的剪贴板格式。CF_TEXT表示文本格式,表示每行数据以回车换行(0x0a0x0d)终止,空字符作为数据的结尾。hMem指定具有指定格式的数据的句柄。hMem参数可以是NULL,指示采用延迟提交技术,则该程序必须处理WM_RENDERFORMA T和WM_RENDERALLFORMATS消息。应用程序在调用SetClipboardData函数之后,就拥有了hMem参数所标识的数据对象,该应用程序可以读取该数据对象,但在应用程序调用CloseClipboard函数之前,它不能释放该对象的句柄,或者锁定这个句柄。若hMem标识了一个内存对象,那么这个对象必须是利用GMEM_MOVEABLE标志调用GlobalAlloc函数为其分配内存。 注意:调用SetClipboardData函数的程序必须是剪贴板的拥有者,且在这之前已经打开了剪贴板。 延迟提交技术:当一个提供数据的进程创建了剪贴板数据之后,直到其他进程获取剪贴板数据之前,这些数据都要占据内存空间。若在剪贴板上放置的数据过大,就会浪费内存空间,降低对资源的利用率。为了避免这种浪费,就可以采用延迟提交计数,也就是由数据提供进程先提供一个指定格式的空剪贴板数据块,即把SetClipboardData函数的hMem参数设置为NULL。当需要获取数据的进程想要从剪贴板上得到数据时,操作系统会向数据提供进程发送WM_RENDERFORMA T消息,而数据提供进程可以响应这个消息,并在此消息的响应函数中,再一次调用SetClipboardData函数,将实际的数据放到剪贴板上。当再次调用SetClipboardData函数时,就不再需要调用OpenClipboard函数,也不再需要调用EmptyClipboard函数。也就是说,为了提高资源利用率,避免浪费内存空间,可以采用延迟提交技术。第一次调用SetClipboardData函数时,将其hMem参数设置为NULL,在剪贴板上以指定的剪贴板格式放置一个空剪贴板数据块。然后直到有其他进程需要数据或自身进程需要终止运行时再次调用SetClipboardData函数,这时才真正提交数据。 (4)、HGLOBAL GlobalAlloc( UINT uFlags,SIZE_T dwBytes); GlobalAlloc函数从堆上分配指定数目的字节。uFlags是一个标记,用来指定分配内存的方式,uFlags为0,则该标记就是默认的GMEM_FIXED。dwBytes指定分配的字节数。

进程间通信方式比较

进程间的通信方式: 1.管道(pipe)及有名管道(named pipe): 管道可用于具有亲缘关系进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 2.信号(signal): 信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致得。 3.消息队列(message queue): 消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。 消息缓冲通信技术是由Hansen首先提出的,其基本思想是:根据”生产者-消费者”原理,利用内存中公用消息缓冲区实现进程之间的信息交换. 内存中开辟了若干消息缓冲区,用以存放消息.每当一个进程向另一个进程发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中,最后通知接收进程.接收进程收到发送里程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出所需的信息,然后把消息缓冲区不定期给系统.系统负责管理公用消息缓冲区以及消息的传递. 一个进程可以给若干个进程发送消息,反之,一个进程可以接收不同进程发来的消息.显然,进程中关于消息队列的操作是临界区.当发送进程正往接收进程的消息队列中添加一条消息时,接收进程不能同时从该消息队列中到出消息:反之也一样. 消息缓冲区通信机制包含以下列内容:

(1) 消息缓冲区,这是一个由以下几项组成的数据结构: 1、消息长度 2、消息正文 3、发送者 4、消息队列指针 (2)消息队列首指针m-q,一般保存在PCB中。 (1)互斥信号量m-mutex,初值为1,用于互斥访问消息队列,在PCB中设置。 (2)同步信号量m-syn,初值为0,用于消息计数,在PCB中设置。(3)发送消息原语send (4)接收消息原语receive(a) 4.共享内存(shared memory): 可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。 这种通信模式需要解决两个问题:第一个问题是怎样提供共享内存;第二个是公共内存的互斥关系则是程序开发人员的责任。 5.信号量(semaphore): 主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。 6.套接字(socket); 这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。 https://www.360docs.net/doc/483329070.html,/eroswang/archive/2007/09/04/1772350.aspx linux下的进程间通信-详解

分布式实时系统的通信中间件设计与实现

———————————— 基金项目基金项目::重庆市科技攻关计划基金资助项目(2009AB2244) 作者简介作者简介::蒋建春(1975-),男,副教授、博士研究生,主研方向:嵌入式系统软件,汽车电子;刘 涛,硕士研究生 收稿日期收稿日期::2011-11-29 修回日期修回日期::2012-03-09 E-mail :Dreamliutao@https://www.360docs.net/doc/483329070.html, 分布式实时系统的通信中间件分布式实时系统的通信中间件设计与设计与设计与实现实现 蒋建春1,2,刘 涛1 (1. 重庆邮电大学汽车电子与嵌入式系统研究所,重庆 400065;2. 重庆大学光电技术及系统教育部重点实验室,重庆 400044) 摘 要:面向汽车电子的分布式实时系统通信中间件,须处理大量周期通信或非周期通信事件,并对时间有着严格的限制,不能有效进行通信时刻控制。为此,参考AUTOSAR 规范,从实时性保证与柔性配置管理角度出发,提出一种分布式实时应用的通信中间件。该通信中间件具有可重用性、可裁减性和可配置性,可应用于多种操作系统及硬件平台。通过通信中间件的运行示例分析,验证了该通信中间件的可行性。 关键词关键词::分布式实时系统;中间件;实时性;柔性管理;调度机制;AUTOSAR 规范 Design and Realization of Communication Middleware for Distributed Real-time System JIANG Jian-chun 1,2, LIU Tao 1 (1. Institute of Automotive Electronic and Embedded System, Chongqing University of Posts and Telecommunications, Chongqing 400065, China; 2. Key Lab of Optoelectronic Technique and System of Ministry of Education, Chongqing University, Chongqing 400044, China) 【Abstract 】Facing to Distributed Real-time Systems(DRS) of automotive electronic, communication middleware must handle many aperiodic and periodic communication events under strict time requirements, they can not control communication time. This paper proposes a communication middleware of distributed real-time application referencing AUTOSAR standard by requirements of real-time and flexible configuration mechanism. It has reusability, tailorability and configurability, can hide the difference of communication protocols and be used to different operation system and platforms. Application case analysis of a communication middleware show its feasibility. 【Key words 】Distributed Real-time Systems(DRS); middleware; real-time; flexible management; scheduling mechanism; AUTOSAR standard DOI: 10.3969/j.issn.1000-3428.2012.21.066 计 算 机 工 程 Computer Engineering 第38卷 第21期 V ol.38 No.21 2012年11月 November 2012 ·工程应用技术与实现工程应用技术与实现·· 文章编号文章编号::1000—3428(2012)21—0249—04 文献标识码文献标识码::A 中图分类号中图分类号::TP391 1 概述 缩短系统开发生命周期(System Development Life Cycle, SDLC)并提高软件重用性是开发分布式实时系统软件过程中重要的关注点。通信中间件集中统一管理了大量有严格时间限制的周期或非周期通信事件,以其自身的复杂度换取了开发应用的便利,受到开发者及用户越来越多的青睐。通常采用的CORBA 中间件技术,作为一种抽象的规范定义并不限制具体的实施方案,为分布式应用提供了很好的互操作性、平台无关性、语言无关性。Mini CORBA 和Real-Time CORBA 规范由CORBA 裁剪而来,以便满足分布应用实时性需求及嵌入式环境需求。Mini CORBA 针对嵌入式应用中有限的资源环境(如CPU 处理能力、内存容量、功耗等),裁减中间件动态分配以适应嵌入式应用,但并没有对实时性要求提供保障,应用于分布式实时系统中通信的可靠性大大降低。Real-Time CORBA 支持固定优先级的实时应用,提供对象调用操作端到端的可预测性,但是Real-Time CORBA 缺少在不同 DRS 间的端对端通信时间的柔性配置管理,不能有效进行通信时刻控制,同时其对象动态调用操作并不适用于嵌入式环境[1-2]。针对分布式实时系统的嵌入式环境应用,通信中间件必须具有通信实时性保证、通信时间柔性配置管理、以静态方式进行接口调用等特点。为此,本文参考汽车电子AUTOSAR 规范软件分层架构及通信服务的模块功能[3],设计并实现了一种具有实时性保证、柔性配置管理,适用于汽车电子嵌入式系统的分布式实时应用的通信中间件,进行柔性配置后应用于通信实例中,并进行了运行分析。 2 总体架构设计 通信中间件是定义于应用程序和操作系统、硬件平台之间的一个中间层,是定义的一组较为完整的、标准的应用程序通信接口,以实现分布式网络中各节点的外部通信及应用程序之间的内部通信。欧洲汽车制造商和他们的一级供应商建立的AUTOSAR 规范,旨在促使软件架构由一系列相对独立的构件组成、借由统一接口及端口映射机制

linux进程间通讯的几种方式的特点和优缺点

1. # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 # 有名管道(named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 # 信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 # 消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 # 信号( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。#共享内存( shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。 # 套接字( socket ) :套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。 管道的主要局限性正体现在它的特点上: 只支持单向数据流; 只能用于具有亲缘关系的进程之间; 没有名字; 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等; 2. 用于进程间通讯(IPC)的四种不同技术: 1. 消息传递(管道,FIFO,posix和system v消息队列) 2. 同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯) 3. 共享内存区(匿名共享内存区,有名Posix共享内存区,有名System V共享内存区) 4. 过程调用(Solaris门,Sun RPC) 消息队列和过程调用往往单独使用,也就是说它们通常提供了自己的同步机制.相反,共享内存区

第3章 进程同步与通信 练习题答案

第3章进程同步与通信练习题 (一)单项选择题 1.临界区是指( )。 A.并发进程中用于实现进程互斥的程序段 B.并发进程中用于实现进程同步的程序段 C.并发进程中用户实现进程通信的程序段 D.并发进程中与共享变量有关的程序段 2.相关临界区是指( )。 A.一个独占资源 B.并发进程中与共享变量有关的程序段 c.一个共享资源 D.并发进程中涉及相同变量的那些程序段 3.管理若干进程共享某一资源的相关临界区应满足三个要求,其中( )不考虑。 A一个进程可以抢占己分配给另一进程的资源 B.任何进程不应该无限地逗留在它的临界区中c.一次最多让一个进程在临界区执行 D.不能强迫一个进程无限地等待进入它的临界区4、( )是只能由P和v操作所改变的整型变量。 A共享变量 B.锁 c整型信号量 D.记录型信号量 5.对于整型信号量,在执行一次P操作时,信号量的值应( )。 A.不变 B.加1 C减1 D.减指定数值 6.在执行v操作时,当信号量的值( )时,应释放一个等待该信号量的进程。 A>0 B.<0 c.>=0 D.<=0 7.Pv操作必须在屏蔽中断下执行,这种不可变中断的过程称为( )。 A初始化程序 B.原语 c.子程序 D控制模块 8.进程间的互斥与同步分别表示了各进程间的( )。 A.竞争与协作 B.相互独立与相互制约 c.不同状态 D.动态性与并发性 9并发进程在访问共享资源时的基本关系为( )。 A.相互独立与有交往的 B.互斥与同步 c并行执行与资源共享 D信息传递与信息缓冲 10.在进程通信中,( )常用信件交换信息。 A.低级通信 B.高级通信 c.消息通信 D.管道通信 11.在间接通信时,用send(N,M)原语发送信件,其中N表示( )。 A.发送信件的进程名 B.接收信件的进程名 C信箱名 D.信件内容 12.下列对线程的描述中,( )是错误的。 A不同的线程可执行相同的程序 B.线程是资源分配单位 c.线程是调度和执行单位 D.同一 进程中的线程可共享该进程的主存空间 13.实现进程互斥时,用( )对应,对同一个信号量调用Pv操作实现互斥。 A.一个信号量与一个临界区 B.一个信号量与—个相关临界区 c.一个信号量与一组相关临界 区 D一个信号量与一个消息 14.实现进程同步时,每一个消息与一个信号量对应,进程( )可把不同的消息发送出去。 A.在同一信号量上调用P操作 B在不同信号量上调用P操作 c.在同一信号量上调用v操作D.在不同信号量上调用v操作 (二)填空题 1.目前使用的计算机的基本特点是处理器______执行指令。 2.进程的______是指进程在顺序处理器上的执行是按顺序进行的。 3.当一个进程独占处理器顺序执行时,具有______和______两个特性。 4.进程的封闭性是指进程的执行结果只取决于______,不受外界影响。 5 进程的可再现性是指当进程再次重复执行时,必定获得______的结果。 6.一个进程的工作在没有全部完成之前,另一个进程就可以开始工作,则称这些进程为______.

Linux下的进程间通信-详解

Linux下的进程间通信-详解 详细的讲述进程间通信在这里绝对是不可能的事情,而且笔者很难有信心说自己对这一部分内容的认识达到了什么样的地步,所以在这一节的开头首先向大家推荐著 名作者Richard Stevens的著名作品:《Advanced Programming in the UNIX Environment》,它的中文译本《UNIX环境高级编程》已有机械工业出版社出版,原文精彩,译文同样地道,如果你的确对在Linux下编程有浓 厚的兴趣,那么赶紧将这本书摆到你的书桌上或计算机旁边来。说这么多实在是难抑心中的景仰之情,言归正传,在这一节里,我们将介绍进程间通信最最初步和最 最简单的一些知识和概念。 首先,进程间通信至少可以通过传送打开文件来实现,不同的进程通过一个或多个文件来传递信息,事实上,在很多应用系统里,都使用了这种方法。但一般说来, 进程间通信(IPC:InterProcess Communication)不包括这种似乎比较低级的通信方法。Unix系统中实现进程间通信的方法很多,而且不幸的是,极少方法能在所有的Unix系 统中进行移植(唯一一种是半双工的管道,这也是最原始的一种通信方式)。而Linux作为一种新兴的操作系统,几乎支持所有的Unix下常用的进程间通信 方法:管道、消息队列、共享内存、信号量、套接口等等。下面我们将逐一介绍。 2.3.1 管道 管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。 无名管道由pipe()函数创建: #include int pipe(int filedis[2]); 参数filedis返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。filedes[1]的输出是filedes[0]的输入。下面的例子示范了如何在父进程和子进程间实现通信。 #define INPUT 0 #define OUTPUT 1 void main() { int file_descriptors[2]; /*定义子进程号 */ pid_t pid; char buf[256]; int returned_count; /*创建无名管道*/ pipe(file_descriptors); /*创建子进程*/ if((pid = fork()) == -1) { printf("Error in fork\n"); exit(1); } /*执行子进程*/ if(pid == 0) { printf("in the spawned (child) process...\n"); /*子进程向父进程写数据,关闭管道的读端*/ close(file_descriptors[INPUT]); write(file_descriptors[OUTPUT], "test data", strlen("test data"));

进程间的通信

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 # 有名管道(named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 # 信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 # 消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 # 信号( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 # 套接字( socket ) :套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。 windows进程通信的几种方式(转) 2008-10-13 16:47 1 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。 Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。 应用程序有三种方法来使多个进程共享一个文件映射对象。 (1)继承:第一个进程建立文件映射对象,它的子进程继承该对象的句柄。 (2)命名文件映射:第一个进程在建立文件映射对象时可以给该对象指定一个名字(可与文件名不同)。第二个进程可通过这个名字打开此文件映射对象。另外,第一个进程也可以通过一些其它IPC机制(有名管道、邮件槽等)把名字传给第二个进程。 (3)句柄复制:第一个进程建立文件映射对象,然后通过其它IPC机制(有名管道、邮件槽等)把对象句柄传递给第二个进程。第二个进程复制该句柄就取得对该文件映射对象的访问权限。 文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步。 2 共享内存 Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射

汽车分布式控制多路复用系统及其通信协议

汽车分布式控制 多路复用系统及其通信协议 1.汽车上采用多种多路复用系统的原因及典型的多路复用系统通信芯片版本 在汽车上采用多路复用通信系统是电子控制汽车的一项必须技术,世界各大汽车公司和半导体公司近年来都在设置、应用和不断地开发此项技术。 各个汽车公司设置的多路复用系统的通信芯片版本不同,例如雷诺和标致公司的RCP VAN通信芯片有双缓冲器,而大众公司的U5001M PRD1018通信芯片的集成电路所要求的附加软件和硬件均最少——没有CRC(循环冗余校验)等。因此,ISO、SAE和JSAE等标准化组织为各大汽车公司推荐和制定了各自的多路复用系统通信协议标准,不同的通信协议对信息传输顺序、格式和内容等均有不同的约定。到目前为止,世界上尚无一个可以兼容各大汽车公司通信协议的通用标准,也就是说,想用某个公司的通信协议取代其他公司的协议,是很难做到的,因此,在汽车上就形成了多种类型的多路复用系统共存的局面。 目前汽车上应用的典型通信芯片版本有8种。此外,还有多种因篇幅所限不能全部阐述的其他协议,如宝马公司(BMW)1994年提出的增强型通

信协议,该协议的技术关键在于采用集成局部控制器(LCU)和数据压缩(DC)算法——整个数据块的传输时间较无数据压缩时减少约2/3,这样,在不增加物理波特率的前提下,减少了总线负载和信息响应时间,与此同时增加了信息转换速率。另外,在发送器和接收器中,编码表不会发生“失同步”;阿尔法·罗密欧公司的DAN集中式网络协议;卢卡斯(Lucas)公司的光学分布式星形藕合器系统;日立公司的集中式光学单纤维双向通信;飞利浦公司的D2R分布式网络协议等。8种通信芯片版本见表1。 表1典型通信芯片版本 2.典型通信芯片版本的通信协议的名称及匹配的“CPU”类型 8种典型的通信协议名称及匹配的CPU类型见表2。除了AN82526-Q8841(CAN)和REV BB(HBCC)通信芯片因采用不同的总线和接口而匹配不同的CPU外,其他6种通信芯片皆各对应一种CPU。 表2 典型通信芯片版本的通信协议及匹配的CPU

进程间通讯机制

进程间通讯机制 进程在核心的协调下进行相互间的通讯。Linux支持大量进程间通讯(IPC) 机制。除了信号和管道外,Linux 还支持Unix系统V中的IPC机制。 信号 信号是Unix系统中的最古老的进程间通讯方式。它们用来向一个或多个进程发送异步事件信号。信号可以从键盘中断中产生,另外进程对虚拟内存的非法存取等系统错误环境下也会有信号产生。信号还被shell程序用来向其子进程发送任务控制命令。 系统中有一组被详细定义的信号类型,这些信号可以由核心或者系统中其它具有适当权限的进程产生。使用kill命令(kill -l)可以列出系统中所有已经定义的信号。在我的系统(Intel系统)上运行结果如下: 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGIOT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 当我在Alpha AXP中运行此命令时,得到了不同的信号个数。除了两个信号外,进程可以忽略这些信号中的绝大部分。其一是引起进程终止执行的SIGSTOP信号,另一个是引起进程退出的SIGKILL信号。至于其它信号,进程可以选择处理它们的具体方式。进程可以阻塞信号,如若不阻塞,则可以在自行处理此信号和将其转交核心处理之间作出选择。如果由核心来处理此信号,它将使用对应此信号的缺省处理方法。比如当进程接收到SIGFPE(浮点数异常)时,核心的缺省操作是引起core dump和进程的退出。信号没有固有的相对优先级。如果在同一时刻对于一个进程产生了两个信号,则它们将可能以任意顺序到达进程并进行处理。

进程间通信的几种方式

进程间通信的几种方式 2009-06-19 23:28 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。 (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。 (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺 (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 (6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。 (7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。 (8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字

浅析分布式系统进程间通信

浅析分布式系统进程间通信 摘要:若干大量独立的计算机通过网络联系在一起,组成了分布式系统,在这种环境下,合作进程通过消息的传递进行通信需要访问分布在整个网络中的资源,所以一个好的通信机制比较重要。 关键词:分布式系统;进程间通信;通信机制 随着微型电子技术的发展,计算机的硬件成本不断下降,计算机应用技术得到了广泛的应用和很大的提高。特别是高性能微处理器的开发和高速计算机网络技术的发明,可以把若干由大量计算机组成的计算机系统彼此通过高速网络连接,这种系统一般称为分布式系统。分布式系统是若干独立计算机和用于交换信息的通信设备的集合,这些计算机对于用户来说就像是单个相关系统。它主要提供分布计算机和分布处理功能。随着Internet技术的分速发展和应用,进程间通信已经成为分布式系统的重要核心。 一、分布式系统简介 分布式系统便于资源共享。各种信息、文件、数据库和各种昂贵的硬件资源被分布式地管理和维护,并为用户的访问提供了方便。这样就能节省大量的重复投资。 分布式操作系统是运行在分布式计算机系统的操作系统。它是在多机环境下,负责控制和管理以协同方式工作的多种系统资源,进程的同步和执行,处理机间通信,调度等控制事务,自动实行全系统范围为的任务分配和负载平衡,方便用户使用,并具有高度并行性的一种高级系统软件。 二、分布式系统间的通信 一个分布式操作系统应该包括网络上的所有计算机,在一个分布式环境下,合作进行通过消息的传递进行通信因为需要访问分布在整个网络中的拥有资源,所以一个好的通信机制相当重要,进程间通信是一切分布式系统的核心。本文主要介绍以下四种通信模型,远程过程调用(remote procedure call,RPC)、远程方法调用(remote method invocation,RMI)、面向消息的中间件(message-oriented

分布式系统通信技术研究

研究生课程设计(小组报告一) 题目:分布式系统通信技术研究院系:******************* 专业:******************* 小组成员:******************* ******************* ******************* ******************* ******************* 课程:分布式与云计算 分布式系统通信技术研究

一、概述 分布式系统是由一些相互独立的处理部件集合在一起,并且对于使用的用户而言是透明的、单一的相关系统,分布式系统可以管理和利用每个处理部件中相互分散却又有联系的资源,使其共同为解决某个具体问题而相互协作。分布式系统产生的最初的目的是将互联网上计算机的闲置处理能力充分的利用起来作为一个系统进行分布式计算,它最主要是用在高性能计算领域。近年来物联网、云计算、对等计算模式(peer-to-peer,p2p)、网格计算、无线传感网络等概念均为分布式系统技术的商业应用,因此构建分布式系统是有效实现这些应用的基本要求。 进程间通信是所有分布式系统的核心功能。一个分布式系统,可以同时有成千个进程分布在网络上的不同的站点机上,它们通过网络提供的消息通信机制交换信息,实现高层应用的互操作。网络上的不同站点机可以拥有不同的操作系统。分布式应用系统的发展给分布式系统的进程间通信提出一个又一个需解决的技术问题。 本报告主要介绍了分布式系统的通信的模型和通信技术。 二、分布式系统的通信体系结构 分布式系统的核心是通信网络,它完全是一种网状结构,因此称为通信体系结构。按照计算机网原理,通信体系结构包括两个方面,一是处理机互连结构,即系统的物理组织;二是两进程间的通信协议,即系统的虚拟组织。 1.系统的物理组织 按照计算机网的方法,互连结构涉及四个方面:报文、通路、交换和构形,如图2-1所示。合理选择每个方面的具体内容,组合起来,即可得出系统的物理组织。例如,系统可以是报文传输、直通通路、报文交换、环形结构(如DLCN),也可以是报文传输、广播通路、报文分组交换、树形总线结构(如Ethernet)等。 图2-1 处理机互连结构 传输的信息称为报文,即一串比特码,在传输时,不再区分命令、地址、数据或状态,也不分指令流和数据流。 传输报文的道路称为通路或线路,报文从一点传输到另一点的通路,称为直通通路; 从一点可同时发送到多个接收点的,称为广播通路。通路由通信介质构成,常用的有双扭线、带状电缆、同轴电缆、光导纤维、无线电、微波、通信卫星、红外等,可按要求的频宽选用。 为了共享传输介质,在互连结构中设置有交换元件,按其工作原理可分为线路交换方式和存储转发方式两大类。线路交换是在通路上设置开关,只.当选通时才在通信实体之间提供一条通路。由于信息流的不均匀性,如果在通路中设置存储元件进行缓冲,

linux进程间通讯的几种方式

1.信号:(signal)是一种处理异步事件的方式。信号时比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身。 2.信号量:(Semaphore)进程间通信处理同步互斥的机制。是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 linux进程间通讯的几种方式的特点和优缺点,和适用场合 1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道(named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 信号( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 共享内存( shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

分布式控制系统中的网络

第三章 分布式控制系统中的网络
§3.1 概 述
一个网络至少包括以下几部分: 一个网络至少包括以下几部分
(1) 若干个通信设备 (2) 通信子网,由连接这些节点的通信链路组成 通信子网 由连接这些节点的通信链路组成 (3) 协议 为在通信节点之间的通信使用 协议,
工业数据通信网络: 工业数据通信网络
包括DCS网络和设备现场总线 用于传输控制数据 网络和设备现场总线, 控制子网 --- 包括 网络和设备现场总线 用于传输控制数据, 要求实时、可靠 要求实时、 传输企业内部信息和共享资源, 信息子网 --- 传输企业内部信息和共享资源,非实时数据的监视和 生产销售管理

§3.2 网络控制方式
通信模式: 通信模式:
(1)主从模式 通信由主站发起 从站之间不能直接通信 )主从模式: 通信由主站发起, (2)对等模式 依靠令牌或某种仲裁机制获得一定时限 )对等模式: 的总线控制权 (3)混合模式 主从对等同时存在 )混合模式:
对话模式: 对话模式:
(1)轮询模式 ) (2)例外报告模式 ) (3)客户 服务器模式 )客户/服务器模式 (4)生产者 消费者模式 )生产者/消费者模式

一、环形结构中的控制方式
1、令牌(Token)控制方式 分散控制 、令牌( 分散控制) )控制方式(分散控制
ACK 标 志 目的 地址 源地 址 控制 信息 有效 信息 出错检 测码 肯定 回答 令牌 Token
源节点发出一帧非空信息,绕环传递(使令牌非空),达到目的 源节点发出一帧非空信息,绕环传递(使令牌非空),达到目的 ), 节点后将有效信息复制下来, 节点后将有效信息复制下来,使ACK=1,此帧信息返回源节点。 ,此帧信息返回源节点。 根据ACK=1移走全部信息,并将令牌置空,下一节点即可用此令 根据 移走全部信息,并将令牌置空, 移走全部信息 牌。 按一定顺序在各站点之间传递令牌,谁得到令牌谁有权发送数据。 按一定顺序在各站点之间传递令牌,谁得到令牌谁有权发送数据。

相关文档
最新文档