IPC
来源:互联网 发布:web应用数据库设计 编辑:程序博客网 时间:2024/05/22 12:21
前言
有了信号量和管程,为什么还需要进程间通信机制(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)
用于进程组,将应用程序分为若干阶段,除非所有进程都就绪准备着手下一个阶段,否则任何进程都不能进入下一个阶段——每当一个进程到底屏障就被阻拦,直到所有进程都到达屏障
参考资料:
- 现代操作系统
- 北大陈向群——操作系统原理
- IPC
- ipc$
- ipc$
- ipc$
- ipc$
- IPC
- IPC$
- IPC$
- IPC
- IPC
- IPC
- IPC
- IPC
- IPC
- IPC
- ipc
- IPC
- IPC
- 倒车辅助Park Assist
- Widget 是Django 对HTML 输入元素的表示,Widget 负责渲染HTML和提取GET/POST 字典中的数据。
- hdu 5818 Joint Stacks (模拟 技巧)
- Java 集合框架分析:ArrayBlockingQueue java1.8
- HTML头部元素
- IPC
- java挑战高并发(12):ThreadLocal那些事儿
- maven scm 配置git
- HDU 5543 Pick The Sticks
- RectF、Rect 和Matrix,Paint及Canvas
- 微服务实践(五):微服务的事件驱动数据管理
- Android 仿联系人菜单,带字母索引,顶部挤压动画,recyclerview实现联系人页面
- 雨量、阳光、防雾传感器
- javascript