进程间通信
文章平均质量分 89
guoguangwu
这个作者很懒,什么都没留下…
展开
-
进程间通信--信号量
前面讲过,共享内存为进程间通信提供了一种效率很高的手段,但是这种机制所提供的只是狭义的通信手段,而并不提供进程间同步的机能。所以,共享内存作为广义的进程间通信手段还必须要有其它机制的配合。同时,除共享内存以外,还有其他需要共享资源的场合也需要有进程间同步的手段。举例来说,如果有两个进程共享同一个tty终端。。。。。。。...原创 2022-02-18 22:14:17 · 505 阅读 · 0 评论 -
进程间通信-共享内存
共享内存,顾名思义就是两个或更多个进程可以访问同一块内存区间,使得一个进程对这块空间中某个单元内容的改变可以为其它进程所看到。共享内存是针对(命名或无名)管道以及其它机制运行效率比较低的缺陷而设计的。虽然报文队列比之前管道有了很大的改进,但是从运行效率的角度来说却并无什么明显的不同。而共享内存,则由于参数共享的各个进程就像访问普通内存一样地访问所共享的内存区间,其运行时的效率可以很高。对于某些运行效率显得很关键的应用来说,可能会觉得管道或报文队列的速度太慢,所以宁愿放弃一些由这些机制所提供的好处,而采用共享原创 2022-01-20 11:45:38 · 733 阅读 · 0 评论 -
进程间通信-报文传递
从本博客开始,我们用三篇博客的篇幅集中介绍Linux内核对Unix系统V进程间通信机制的继承和实现。早期Unix系统的进程间通信(IPC)机制主要有两种,就是管道和信号。后来,针对普通管道只能在近亲进程之间建立的缺点,又有了命名管道。但是,对于一个现代的操作系统以及日益发展的各种应用来说,这些机制虽然很重要,但也确实存在明显的不足。首先,信号所能载送的信息量很小,单独使用时不适合信息量要求比较大的场合。而管道,即使是命名管道,虽然可用于信息量较大的场合,但是对于不同的应用而言还是有许多缺点,主要有:原创 2022-01-17 21:16:28 · 1116 阅读 · 0 评论 -
系统调用ptrace和进程跟踪
为方便应用软件的开发和调试,从Unix的早期版本开始就提供了一种对运行中的进程进行跟踪和控制的手段,那就是系统调用ptrace。通过ptrace,一个进程可以动态地读写另一个进程的内存和寄存器,包括其指令空间、数据空间、堆栈以及所有的寄存器。与信号机制(以及其他手段)。。。。。。...原创 2022-01-16 13:25:08 · 1848 阅读 · 0 评论 -
进程间通信-信号
如前面博客所述,信号(signal,亦称软中断)机制是软件层次上对中断机制的一种模拟。从概念上说,一个进程接收到一个信号与一个处理器接收到一个中断请求是一样的。而一个进程可以向另一个(或另一组)进程发送信号,也跟在多处理器系统中一个处理器可以向其他处理器发出中断请求一样。当然,对一个处理器的中断请求并不一定来自其他处理器,也可以是来自各种中断源,甚至来自处理器本身。相应地,信号也不一定都来自其他进程,也可以来自不同的来源,还可以来自本进程的执行。更重要的是,二者都是异步的。处理器在执行一段程序时并不需要停下原创 2022-01-08 19:18:14 · 683 阅读 · 0 评论 -
进程间通信-命令管道
应该说,前一篇“管道”机制是一项重要的发明,它为Unix操作系统所带来的变化是革命性的,甚至可以说,没有管道就没有当初Unix环境的形成。但是,人们也认识到,管道机制也存在着一些缺点和不足。由于管道是一种无名、无形的文件,它就只能通过fork的过程创建与近亲的进程之间,而不可能成为可以在任意两个进程之间建立通信的机制,更不可能称为一种一般的、通用的进程间通信模型。同时,管道机制的这种确定本身就强烈地暗示着人们,只要用有名、有形的文件来实现管道,就能克服这种确定。这里所谓有名是指这样一个文件应该有个文件名,使原创 2022-01-07 22:57:55 · 383 阅读 · 0 评论 -
管道与系统调用pipe
管道机制的主体是系统调用pipe,但是由pipe所建立的管道的两端都在同一进程中,所以必须在fork的配合下,才能在父子进程之间或两个子进程之间建立起进程间的通信管道。我们先来看系统调用pipe。由于管道两端都是以(已打开)文件的形式出现在相关的进程中,在具体实现上也是作为匿名文件来实现的,所以pipe的代码与文件系统密切相关。原创 2022-01-01 21:05:00 · 1477 阅读 · 1 评论 -
传统的Unix进程间通信-概述
对于多用户、多进程的操作系统来说,进程间通信(IPC)是一项非常重要、甚至必不可少的基本手段和设施。在一个多进程操作系统所提供的运行环境下,可以通过两种不同的途径,或者说采用两种不同的策略,来建立起复杂的大型应用系统。一种途径是通过一个孤立的、大型的、复杂的进程提供所需的功能。早期的操作系统往往倾向于前者,而Unix及其衍生的各种系统则倾向于后者。这种基本方法和策略的改变正是Unix操作系统在程序设计领域中引起革命性转变的结果。原创 2022-01-01 15:04:46 · 691 阅读 · 0 评论