在操作系统中进程是如何通信的

这是我在毕业时校招阿里系公司时,终面的面试官问我印象最深的一道题,别问,问就是挂了 。要是过了早就忘了
首先了解进程是什么 
狭义定义就是,进程是一段程序进行的过程 。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动 。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元,简单说就是你的系统运行时最小单位吧 。
 进程间通信(IPC)进程间通信,指的是进程之间信息交换,所交换的信息量少则是一个状态或数值,多则成千上万个字节 。
方式分为两类:共享内存,消息机制 。
重点!!要考的!!
共分为8种

1、共享内存:共享内存就是映射一段能被其他进程所访问的内存 。这段内存由一个进程创建,但多个进程可以访问 。共享内存是最快的IPC方式,它是针对其他进程间通信方式效率低所创建的 。它往往与其他的通信机制来配合使用 。来实现进程间的同步通信 。
因为直接在内存上操作,所以共享内存的速度也就提高了,所以最快 。
 
在操作系统中进程是如何通信的

文章插图
多进程共享内存
 
2、管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,通常指父子进程关系 。
 
在操作系统中进程是如何通信的

文章插图
单行道[图片来源网络]
 
管道就像一辆单向行驶的车【单行道谁也不能掉头】,只有车上坐满人后,车才可以发动,而当车到达目的地,全体人员都要下车
3、有名管道:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信 。
  • (1)可以用于没有亲缘关系的进程之间的通信;
  • (2)同一数据不能重复读,读一次就相当于从管道中拿走;
  • (3)可以多端写入,多端读取;
4、高级管道:将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们称为高级管道方式 。
 
5、信号量:信号量是一个技术器,可以用来控制多个进程对共享资源的访问 。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源 。因此,主要作为进程间以及同意进程内不同线程的同步手段 。
信号量分为两种
  1. 内核信号量,由内核控制路径使用
  2. 用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEM V信号量 。
POSIX信号量又分为有名信号量和无名信号量 有名信号量,其值保存在文件中, 所以它可以用于线程也可以用于进程间的同步 。
无名信号量,其值保存在内存中 。
内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行 。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起 。只有在资源被释放时,进程才再次变为可运行 。
6、消息队列:消息队列是由消息的链表存放在内核并有消息队列标识符标识 。消息队列克服了信号传递信息量少,管道只能承载无格式字节流以及缓冲区太小受限 。
  1. 我司目前主要通讯方式就是MQ,使用的IBM 的 。我认为有几个好处
  2. 承受高并发,服务暂时处理不了高并发,可以对消息队列消息积压持久化 。
  3. 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度【场景如微信动账】
  4. 解耦,将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而前置不需要做任何修改 。
7、信号:信号是一种比较复杂的通信方式,用于通知接受进程某个时间已发生 。
8、套接字:套解口也是一种进程间通信机制,与其他通信机制不同的是,不可用于不同主机间的进程通信 。
常用在后端系统和后端系统间通讯,见下图
 
在操作系统中进程是如何通信的

文章插图
socket通讯[图片来源网络]

【在操作系统中进程是如何通信的】


    推荐阅读