IPC

前言

有了信号量和管程,为什么还需要进程间通信机制(Interprocess communication, IPC)呢?其一,信号量和管程传递的信息较为简单,无法传递大量信息;其二,不适用于多CPU情况

消息传递(message passing)

发送进程S和接受进程R的地址空间不同,S不能在R的地址空间进行任何操作,所以消息的发送需要操作系统来完成,操作系统有一组消息缓冲区,发送进程要发送消息时,调用send原语,陷入内核、复制消息,然后操作系统将该消息挂接到R的消息队列的末尾(PCB中的一项数据,消息队列指针),此时,发送进程完成了发送;当接受进程被调度时,调用receive原语,陷入内核,然后操作系统将消息复制到接受进程的地址空间

共享内存(shared memory)

多个进程的地址空间共享一段物理内存,该物理内存都映射到两个进程的地址空间,所有进程都可以访问共享内存中的地址,就像自己独占的内存一样。使用共享内存的优点是快、效率高,因为是内核级访问内存,省去了用户态到内核态的切换,对比消息传递的四次(两次数据,两次上下文切换——PCB到寄存器)数据拷贝,共享内存只需要两次;但是共享内存并未提供同步和互斥,可能会出现类似读写者的问题,可以使用信号量等方式解决

管道(pipe)

利用一个缓冲传输介质——内存或两个文件连接两个互相通信的进程

特点:

  • 字符流方式写入/读出
  • 先进后出顺序
  • 管道必须提供同步、互斥

显然管道也是需要陷入内核的,类似于消息传递

除此之外,IPC还可以使用套接字(socket)、远程过程调用(remote procedure call,即RPC,若采用面向对象编程,又称之为远程调用/远程方法调用,见wikipedia),前者属于网络编程,后者属于分布式计算,不做过多讨论

屏障(barrier)

用于进程组,将应用程序分为若干阶段,除非所有进程都就绪准备着手下一个阶段,否则任何进程都不能进入下一个阶段——每当一个进程到底屏障就被阻拦,直到所有进程都到达屏障

参考资料:

  1. 现代操作系统
  2. 北大陈向群——操作系统原理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值