没有合适的资源?快使用搜索试试~ 我知道了~
linux进程间通信与同步.pdf
4星 · 超过85%的资源 需积分: 31 58 下载量 14 浏览量
2011-06-27
15:51:05
上传
评论 1
收藏 193KB PDF 举报
温馨提示
试读
11页
Linux系统中的进程间通信是典型的虚拟内存系统中的进程间通信:Linux 的进程间通信是不同进程间交换数据的机制。由于Linux系统支持虚拟内 存, 对于每一个进程,系统会为它分配一个单独的进程空间,不同的进程有不同的进 程空间,相互之间没有什么关系,在这种系统中,不能用全局变量等一般的手段 来实现不同进程间的数据交换,所以必须提供特有的数据交换机制:进程间通信。
资源推荐
资源详情
资源评论
进程间通信与同步
一、概述
在单任务系统中,任务是线性执行,任务不可能被抢占,所以不需要同步来
保护共享资源与临界资源,同时单任务也不存在数据交换的问题,但对于多任务
操作系 统,会出现与但任务系统不同的问题,进程间通信与同步就是为了解决
这些问题而提出的特有机制,它们为多任务系统提供了不同进程的通信机制,同
时也提供了对 于临界资源和共享资源的保护。
进程间通信与同步是多任务系统中的不同表现形式,,对于一些嵌入式操作
系统,进程间通信与同步处于同一地址空间,这样使一些进程间通信机制同时可
以用作同 步机制,比如在 UCOS 中的一些进程间通信与同步机制。对于另外一些
嵌入式操作系统中,进程间通信与同步处于不同的地址空间,它们是截然不同的
两种机制, 相互间没有什么联系(不包括同一进程中的不同线程同步),最典型
的就是嵌入式 Linux 中的进程间通信与同步机制。
二、进程间通信与同步区别与联系
在不同的嵌入式系统中,进程间通信与同步的实现方式有所不同,但是基本
原理都差不多。对于进程间通信与同步,主要有 2 种方式:虚拟内存系统中的进
程间通信 与同步和 Falt 内存系统中的进程间通信与同步。
Linux 系统中的进程间通信是典型的虚拟内存系统中的进程间通信:Linux
的进程间通信是不同进程间交换数据的机制。由于 Linux 系统支持虚拟内 存,
对于每一个进程,系统会为它分配一个单独的进程空间,不同的进程有不同的进
程空间,相互之间没有什么关系,在这种系统中,不能用全局变量等一般的手段
来实现不同进程间的数据交换,所以必须提供特有的数据交换机制:进程间通信。
同时此类系统中,由于内核空间是由不同的进程共享,所以在内核的数据可以由
不同的进程共享,不同的进程也可能同时需要访 问临界资源,同时要考虑内核
中的中断,这种情况下,进程间的数据交换已经不是问题,现在的问题是如何保
护临界资源和共享资源不被同时访问造成资源的紊乱, 这就是 Linux 的同步机
制。
UCOS 是比较典型的 Falt 内存系统,它不支持虚拟内存机制,也没有用户空间
和内核空间的区别,实际上它就象是 Linux 的内核空间,不同任务间可以相互访
问,没有不同进程间内存保 护机制。所以可以完全利用 Linux 系统中的同一进
程中不同线程的通信机制。由于所有的任务与中断都共享同一地址空间,所以同
步机制也与任务间通信在同一 空间中实现,是这 2 种机制的相互替换成为可能。
详细介绍:
linux 下的进程通信手段基本上是从 Unix 平台上的进程通信手段继承而来的。
而对 Unix 发展做出重大贡献的两大主力 AT&T 的贝尔实 验室及 BSD(加州大学
伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者
对 Unix 早期的进程间通信手段进行了系统的改进和扩 充,形成了“system V
IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接
口(socket)的进程间通信机制。Linux 则把两者继承了下来,如图 示:
其中,最初 Unix IPC 包括:管道、FIFO、信号;System V IPC 包括:System V
消息队列、System V 信号灯、System V 共享内存区;Posix IPC 包括: Posix
消息队列、Posix 信号灯、Posix 共享内存区。有两点需要简单说明一下:1)由
于 Unix 版本的多样性,电子电气工程协会(IEEE)开 发了一个独立的 Unix 标
准,这个新的 ANSI Unix 标准被称为计算机环境的可移植性操作系统界面
(PSOIX)。现有大部分 Unix 和流行版本都是遵循 POSIX 标准的,而 Linux 从一
开始就遵 循 POSIX 标准;2)BSD 并不是没有涉足单机内的进程间通信(socket
本身就可以用于单机内的进程间通信)。事实上,很多 Unix 版本的单机 IPC 留
有 BSD 的痕迹,如 4.4BSD 支持的匿名内存映射、4.3+BSD 对可靠信号语义的实
现等等。
图一给出了 linux 所支持的各种 IPC 手段,在本文接下来的讨论中,为了避免
概念上的混淆,在尽可能少提及 Unix 的各个版本的情况下,所有问题的讨论最
终都会归结到 Linux 环境下的进程间通信上来。并且,对于 Linux 所支持通信
手段的不同实现版本(如对于共享内存来说,有 Posix 共享内存区以及 System V
共享内存区两个实现版本),将主要介绍 Posix API。
linux 下进程间通信的几种主要手段简介:
1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程
间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具
有的功能外,它还允许无亲缘关系进程间的通 信;
2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种
事件发生,除了用于进程间通信外,进程还可以发送信号 给进程本身;
linux 除了支持 Unix 早期信号语义函数 sigal 外,还支持语义符合
Posix.1 标准的信号函数 sigaction(实际上,该函数 是基于 BSD 的,BSD
为了实现可靠信号机制,又能够统一对外接口,用 sigaction 函数重新实
现了 signal 函数);
3. 报文(Message)队列(消息队列):消息队列是消息的链接表,包括 Posix
消息队列 system V 消息队列。有足够权限的进程可以向队列中添加消息,
被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载
信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。
4. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用 IPC
形式。是针对其他通信机制运行效率较低而设计的。往往与其它 通信机
制,如信号量结合使用,来达到进程间的同步及互斥。
5. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同
步手段。
6. 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的
进程间通信。起初是由 Unix 系统的 BSD 分支开发出 来的,但现在一般可
以移植到其它类 Unix 系统上:Linux 和 System V 的变种都支持套接字。
下面将对上述通信机制做具体阐述。
附 1:参考文献[2]中对 linux 环境下的进程进行了概括说明:
一般来说,linux 下的进程包含以下几个关键要素:
• 有一段可执行程序;
• 有专用的系统堆栈空间;
• 内核中有它的控制块(进程控制块),描述进程所占用的资源,这样,进
程才能接受内核的调度;
• 具有独立的存储空间
进程和线程有时候并不完全区分,而往往根据上下文理解其含义。
Linux 下进程间通信:管道-pipe 函数
* IPC
* Linux
* pipe
* 管道
* 进程间通信
摘 要:在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道
是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管
道没有名字的限制,因 此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通
信。 认清管道和有名管道的读写规则是在程序中应用它们的关键,本文在详细讨论了管道
和有名管道的通信机制的基础上,用实例对其读写规则进行了程序验证,这样做 有利于增
强读者对读写规则的感性认识,同时也提供了应用范例。本文来自网络,但原文出处难以查
证。
剩余10页未读,继续阅读
资源评论
- 周王武耳耳2013-09-23有用,谢谢分享
daguai_0_0
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功