操作系统原理:进程间通信 IPC

     操作系统通信方式可以分为两种方式直接通信和间接通信,对于直接通信进程A将通知进程B ,进程必须指明发送方或者接收方来发送/获取消息。对于间接通信进程A将通知消息发送操作系统内存种的某个区域,由进程B从该区域获取消息,发送消息方只负责把消息放到指定位置,接收方只负责在对应的位置不断地检查是否有新消息进入,从而触发事件。消息传递可以是阻塞/同步的。A确认完B接收到了消息才会继续执行A的任务,也可以是非阻塞/异步的A发送消息给B 可以继续执行A的任务。

目录

     一、信号 Signal

    二、管道

    三、消息队列 按FIFO来管理消息

    四、共享内存


     一、信号 Signal

     信号是一个很小的一个bit,不能传递数据。通过通知应用程序有一个紧急的事情需要处理,中断应用程序,这个中断不是硬件中断而是软件意义上的信号中断。信号有多种类型例如进程终止相关的信号,异常信号,kill 信号,键盘中断信号等。接收该信号的进程B可以使用操作系统的默认操作,也可以用catch捕捉信号等。进程A通过操作系统给B发送信号的过程中。操作系统确认PCB和信号处理函数,找到进程B,修改进程B的栈空间,退出对应栈帧执行信号处理函数。由于要修改别的进程的栈空间,通常正常的应用程序不允许这么操作,除了木马和病毒。

    二、管道

   在Unix设计过程中,一个小的应用程序完成一个小的功能,但是Unix科学家想要把这些小的功能灵活地组合起来,把前面一个功能的输出,定向程下一个功能的输入。之后才有了Unix和Linux的管道符“|”。例如Linux命令   history | grep java 

  管道实际上是一个缓存区。每一个功能之间有一个管道。上一个功能负责往管道里传消息,不关心下一个功能要怎么做,下一个功能负责从管道里读数据,不关系上一个功能是怎么做的。管道传输的是一群字节流。管道的读写需要对字节流进行解析。

    三、消息队列 按FIFO来管理消息

  消息队列也是一个内存区,只不过是先进先出进行管理消息,消息队列可以传递有意义的数据结构。

    

    四、共享内存

    共享内存是一种直接的通信方式,共享内存是指两个或多个进程都有权访问的相同内存块。通过读进程里的共享空间的数据进行进程间通信。没有数据复制,没有系统调用,能够快速、方便地访问共享资源,但是这个访问需要程序员提供同步机制。

猜你喜欢

转载自blog.csdn.net/superSmart_Dong/article/details/117136571
今日推荐