0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析嵌入式Linux中进程间的几种通信方式

Q4MP_gh_c472c21 来源:未知 作者:胡薇 2018-08-20 09:03 次阅读

线程间通信:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统

所以线程间通信和同步的方式主要有锁、信号、信号量进程间的通信则不同,它的数据空间的独立性决定了它的通信相对比较复杂,需要通过操作系统。

通信机制主要有:管道、有名管道、消息队列、信号量、共享空间、信号、套接字(socket)。

下面简单介绍下进程间的几种通信方式:

管道:它传递数据是单向性的,只能从一方流向另一方,也就是一种半双工的通信方式;只用于有亲缘关系的进程间的通信,亲缘关系也就是 父子进程或兄弟进程;没有名字并且大小受限,传输的是无格式的流,所以两进程通信时必须约定好数据通信的格式。

管道它就像一个特殊的文件,但这个文件之存在于内存中,在创建管道时,系统为管道分配了一个页面作为数据缓冲区,进程对这个数据缓冲区进行读写,以此来完成通信。其中一个进程只能读一个只能写,所以叫半双工通信,为什么一个只能读一个只能写呢?因为写进程是在缓冲区的末尾写入,读进程是在缓冲区的头部读取,他们各自 的数据结构不同,所以功能不同。

有名管道:看见这个名字就能知道个大概了,它于管道的不同的是它有名字了。这就不同与管道只能在具有亲缘关系的进程间通信了。

它提供了一个路径名与之关联,有了自己的传输格式。有名管道和管道的不同之处还有一点是,有名管道是个设备文件,存储在文件系统中,没有亲缘关系的进程也可以访问,但是它要按照先进先出的原则读取数据。同样也是单双工的。

共享内存:就是分配一块能被其他进程访问的内存。共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。首先说下在使用共享内存区前,必须通过系统函数将其附加到进程的地址空间或说为映射到进程空间。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。

由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易 见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就 解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存 中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。

信号:信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。

信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源。信号分为可靠信号和不可靠信号,实时信号和非实时信号。进程有三种方式响应信号1.忽略信号2.捕捉信号3.执行缺省操作。

信号量:也可以说是一个计数器,常用来处理进程或线程同步的问题,特别是对临界资源的访问同步问题。临界资源:为某一时刻只能由一个进程或线程操作的资源,当信号量的值大于或等于0时,表示可以供并发进程访问的临界资源数,当小于0时,表示正在等待使用临界资源的进程数。更重要的是,信号量的值仅能由PV操作来改变。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信号
    +关注

    关注

    11

    文章

    2636

    浏览量

    75380
  • 共享内存
    +关注

    关注

    0

    文章

    16

    浏览量

    8277

原文标题:盘点嵌入式Linux中进程间通信和线程间通信的几种方式

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式Linux学习步骤

    内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程通信几种方式 熟悉
    发表于 05-04 15:01

    Linux进程通信方式-管道

    Linux进程通信方式-管道分享到: 本文关键字: linux 管道
    发表于 08-29 15:29

    Linux进程通信

    华清远见嵌入式linux学习资料《Linux进程通信》,通过前面的学习,读者已经知道了
    发表于 09-04 10:07

    新手必看--嵌入式Linux学习步骤,教你怎么入门

    几种方式 熟悉嵌入式Linux中的任务同步与通信编写一个简单的管道程序实现文件传输 编写一个
    发表于 06-30 11:23

    嵌入式Linux开发学习如何入门、如何深入?

    任务调度管道信号共享内存任务管理 API 了解Linux系统任务管理机制熟悉进程通信几种方式
    发表于 07-08 11:03

    嵌入式Linux学习步骤

    API 了解Linux系统任务管理机制 熟悉进程通信几种方式 熟悉
    发表于 03-24 10:41

    新手必看--嵌入式Linux学习步骤

    几种方式 熟悉嵌入式Linux中的任务同步与通信编写一个简单的管道程序实现文件传输 编写一个
    发表于 03-25 14:53

    嵌入式linux学习步骤

    一个守护进程程序 sleep系统调用任务管理、同步与通信 Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉
    发表于 09-12 14:23

    嵌入式学习路线 嵌入式学习路线详解

    ,编写一个守护进程程序,sleep系统调用任务管理、同步与通信Linux任务概述任务调度管道、信号共享内存,任务管理 API,了解Linux系统任务管理机制,熟悉
    发表于 03-17 18:05

    嵌入式linux学习步骤

    几种方式 熟悉嵌入式Linux中的任务同步与通信编写一个简单的管道程序实现文件传输 编写一个
    发表于 10-25 10:12

    嵌入式Linux学习步骤

    调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程通信几种方式
    发表于 07-03 00:56

    初学者嵌入式linux系统的学习步骤

    /O 编写串口通信程序 编写多串口通信程序7、嵌入式系统中多进程程序设计Linux系统进程概述
    发表于 01-18 10:34

    嵌入式设计应具备的基本技能

    编写一个守护进程程序 sleep系统调用任务管理同步与通信Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉
    发表于 11-04 07:39

    嵌入式linux学习步骤

    几种方式 熟悉嵌入式Linux中的任务同步与通信编写一个简单的管道程序实现文件传输 编写一个
    发表于 09-08 11:51

    常用的进程通信主要有哪几种方式

    这里说的嵌入式系统,是嵌入式linux系统,嵌入式linux系统其实和电脑端的linux系统一样
    发表于 11-08 07:38