为什么说进程间通信 信号量的信号通信较为复杂

LINUX进程间通信--信号_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
LINUX进程间通信--信号
L​I​N​U​X​进​程​间​通​信​-​-​信​号
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩26页未读,继续阅读
你可能喜欢一、进程空间和多进程父子关系:
进程是分配资源的最小单位(进程内存空间)。fork后,子进程会复制父进程的task_struct结构;并为子进程的堆栈分配物理页(开始只是标记为只读的),延迟到当父或子线程尝试写这些区域,内核才为需要修改的那片内存拷贝副本。
二、进程间通信方式:
1. 共享内存(share memory),
信号量(semaphore/s?m??f?r/)。
2. 消息队列(message queue),信号(signal)。
3.文件(file),&匿名管道(pipe)/命名管道(name
pipe),套接字(socket)。
说到子进程只是一个额外的流程,那他跟父进程的联系和区别是什么呢?
我很想建议你看看linux内核的注解(有兴趣可以看看,那里才有本质上的了解),总之,fork后,子进程会复制父进程的task_struct结构,并为子进程的堆栈分配物理页。理论上来说,子进程应该完整地复制父进程的堆,栈以及数据空间,但是2者共享正文段。
关于写时复制:由于一般&fork后面都接着exec,所以,现在的&fork都在用写时复制的技术,顾名思意,就是,数据段,堆,栈,一开始并不复制,由父,子进程共享,并将这些内存设置为只读。直到父,子进程一方尝试写这些区域,则内核才为需要修改的那片内存拷贝副本。这样做可以提高&fork的效率。
由于多进程要并发协调工作,进程间的同步,通信是在所难免的。
稍微列举一下linux常见的IPC.
linux下进程间通信的几种主要手段简介:
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程 本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于 BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺点。共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
或许你会有疑问,那多线程间要通信,应该怎么做?前面已经说了,多数的多线程都是在同一个进程下的,它们共享该进程的全局变量,我们可以通过全局变量来实现线程间通信。如果是不同的进程下的2个线程间通信,直接参考进程间通信。
进程间通信(IPC,Inter-Process
Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。
进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。
使用IPC&的理由:
信息共享加速;模块化;方便;&以及私有权分离.
主要的&IPC&方法
提供方(操作系统或其他环境)
多数操作系统
多数操作系统
多数操作系统
消息队列(en:Message
多数操作系统
管道(en:Pipe)
所有的&POSIX
systems, Windows.
具名管道(en:Named
所有的&POSIX&系统,
信号量(en:Semaphore)
所有的&POSIX&系统,
所有的&POSIX&系统,
Message passing(en:Message passing)
用于&MPI规范,Java
RMI, CORBA, MSMQ, MailSlot&以及其他.
Memory-mapped file(en:Memory-mapped file)
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:81282次
积分:2757
积分:2757
排名:第6899名
原创:185篇
转载:43篇
(18)(32)(15)(12)(6)(21)(26)(40)(1)(4)(9)(22)(3)(4)(1)(1)(1)(1)(2)(1)(18)(1)几种进程间的通信方式&比较
# 管道( pipe
):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) :
有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) :
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) :
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory )
:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC
方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) :
套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
1,管道:根植于文件系统,管道一端读,一端写,只可以在父子进程间共享。父子进程有同一个文件标号(内核中file数组的下标),但是指向的file结构是不同的(file结构和具体的进程相关)。而file结构又指向一个dentry结构,这个dentry结构是同一个,dentry结构又指向一个inode结构(以上都是在内核中)。父进程发送消息,系统从用户态转到内核态,内核调用inode结构中的函数操作指针(具体的函数实现由虚拟文件系统下面的具体的文件系统实现),数据写入inode结构的缓存。内核在找到子进程的task_struct结构,添加标志告诉子进程有数据发送过来了,子进程由阻塞进度就绪。此时父进程进入就绪阶段。内核根据调度算法找到一个进程执行。不久,子进程被选择执行,同样的流程找到inode结构,读取缓存数据。这样,一个完整的进程通信完成了。
2,命名管道:匿名管道是根据相同的文件fd找到对方,而命名管道是根据相同的文件名字。因此只要预定了文件名就可以通信,从找到file结构开始,过程都类似。都是根植于虚拟文件系统。不同于块文件和字符文件,命名管道是一种特殊的文件系统FIFO队列,因此不可以定位指针。
3,信号:信号时一种异步的通信方式。一个进程向另一个进程发送信号,系统从用户态进入内核态,内核根据接收进程的id找到其task_struct,把发送的信号放入接收进程队列。若干时刻过后,接收进程运行,运行一段时间后,接收进程需要用到内核服务,所以通过系统调用(异常或者中断)进入内核态,内核首先找到进程的信号队列,进入用户态,处理信号处理程序。处理完之后,再次进入内核态,找到信号处理前的指令,一切恢复正常,就好像没有信号处理一样。信号处理程序和主程序就好像是两个不同线程,共享进程的用户空间,却没有方法同步。信号处理程序不可能中断执行阻塞然后又转到主程序执行。信号处理程序的优先级高,但是指向条件苛刻。
4,共享内存:共享内存其实是不同进程的同一个物理页面,虽然虚拟内存地址不同。甲进程往共享内存写数据,乙进程也可以访问。共享内存可以不涉及内核操作,但是需要同步和通知控制。比如可以用信号来实现通知。
5,报文传递:不同于管道通信,每个进程都有一个报文队列,而每个报文都是一个有结构的数据。相对来说,管道只是一个字符流。管道通信缓冲区满之后,发送进程就会阻塞,报文不会。报文不是根植于文件系统。
6,信号量:很简单的通信方式,再访问一段内存的时候查看某一个信号是否可以访问,访问,关闭,保证同一时刻只有一个进程访问这段内存。如此......
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。进程间通信机制的分析与比较_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
进程间通信机制的分析与比较
进​程​间​通​信​机​制
大小:4.54MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 进程间通信 信号量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信