[关闭]
@wangjialin 2017-03-24T21:05:40.000000Z 字数 1693 阅读 2362

进程通信以及常见的应用场景

os


用户提交的任务都是通过一个一个进程来完成的,由于进程拥有自己独立的地址空间,所以进程间通信需要特殊的方法来进行。比如,同一个计算机内的进程处于同一个软件和硬件环境下,利用操作系统提供的编程接口,用户可以很方便的实现进程间通信;而不同计算机的应用进程间想要通信来实现数据共享和信息交换,就只能通过网络协议才能实现了,暂且不提。下面是常见的几种进程通信机制:

信号(signal)通信机制

  1. 特点:只能发送单个信号而不能传送数据
  2. 信号机制是UNIX为处理进程中断设计的,通过发送指定信号来通知进程某个异步事件的发生,以迫使进程执行信号处理程序。换言之,这个通信机制就相当于只能由一方发出某个命令让另一方按照约定去做相应的操作,至于另一方做了没做怎么做发出方并不关心。信号本质是一组预定义的值(比如SIGIN是与终端交互相关的信号,代表键盘中断等等),是一种“软中断”,
  3. 应用场景:进程执行非法指令或段违例,发生浮点错,某些按键(ctrl+c)

管道(pipeline)通信机制

  1. 特点:官道实质是一个连接读写进程的共享文件,但是是单向的
  2. 管道分为有名管道和无名管道。
    • 无名管道实际上是内存的一个临时存储区,由系统安全控制并独立于创建他的进程的内存区。读写进程就是通过这个存储区来进行数据交流的。管道对于数据采取先进后出的方式管理,只能读一次不能搜索,两个进程必须拥有共同的祖先,具体是通过管道的inode节点的特征位互斥标志实现读写不能同时发生;其次,必须确定两方都存在的时候才能进行读写操作;管道大小有限,需要传输的数据太大的时候需要进行切分,否则会引起管道溢出而阻塞write,反之,管道内是空的时候读进程会出现read阻塞直到被唤醒。
    • 有名管道解决了无名管道只能连接两个具有共同祖先的进程的问题,有名管道类似于一般文件,具有文件名,进程就像调用一般文件一样进行系统调用open打开管道并通过read和write来读写管道内数据
  3. 应用场景:无名管道——操作系统内需要进程间有较大数据量通信的的地方;有名管道——服务器通过网络与多个用户进行交互

消息传递(message passing)通信机制

  1. 特点:消息传递机制不仅使进程可以通信并且提供了同步的能力,对于开发者而言,编写程序比较简单,方便易用;
  2. 进程间通过一个共享的数据结构——信箱来进行异步通信,每一个信箱都有唯一标识符,简介通信使得发送进程和接受进程不再非得是一对一的关系,还可以一对多。发送进程发送消息的时候,通过send(A,消息),如果信箱A没有满,信件就送到信箱A指针所指的位置并释放接受者,否则发送者切换到等待状态;接受进程接收消息时,通过receive(A,消息),如果信箱非空,就取出消息并释放等待信箱的发送者,若信箱为空,就切换为等待状态
  3. 应用场景:B.Hansen的消息缓冲机制,客户机和服务器交互

共享主存(shared memory)通信机制

  1. 特点: 类似管道,在主存中开辟一个公共存储区,最大的特点是可由多个独立进程共享效率比较高,常常和其他通信机制比如信号配合使用无需复制,快捷,信息量大
  2. 要通信的进程将自己的虚地址空间映射到共享主存区,发送进程将信息写入共享主存后接受进程可以从此位置读取信息。需要注意的是共享主存的页面在么一个共享进程的页表中都有页表项引用,但是不是所有进程的虚存段都有相同的地址,因为不止一个进程可将共享主存映射到自己的虚地址空间去
  3. 应用场景:需要多个进程使用并维护一个资源的情况

信号灯

  1. 特点:操作系统提供实现机制和编程接口,由用户在程序中实现,保证进程间可以进行快速的信息交换和大量数据的共享。但是,上述方式主要适合在同一台计算机系统内部的进程之间的通信
  2. 在UNIX中,信号灯是一组进程共享的数据结构,当几个进程竞争同一资源时(文件、共享内存或消息队列等),它们的操作便由信号灯来同步,以防止互相干扰。信号灯保证了某一时刻只有一个进程访问某一临界资源,所有请求该资源的其它进程都将被挂起,一旦该资源得到释放,系统才允许其它进程访问该资源。信号灯通常配对使用,以便实现资源的加锁和解锁。
  3. 使用外设的时候
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注