操作系统之进程与线程3

进程与线程-通信

  • 进程间通信是指在不同进程之间传播或交换信息。进程间通信分为两大类:1同步、2消息传递

  • 同步使用的方式有:信号量、管程等。

  • 消息传递有:管道(有名无名)、消息队列、套接字、信号、共享内存 。

  • 同步

    • 这一分类主要包括那些负责协调进程间合作的,也就是进程同步相关的通信方式,一般不负责除同步功能外的消息传递。

    • 信号量

    • 用于进程间同步使用,PV操作。

    • 管程

    • 管程可以看做一个软件模块,它是将共享的变量和对于这些共享变量的操作封装起来,形成一个具有一定接口的功能模块,进程可以调用管程来实现进程级别的并发控制。

  • 消息传递

    • 管道

      • 无名管道
      • 无名管道简称管道(pipe),是一种半双工的通信方式,数据单向流通,且必须在父子进程间传递消息。
      • 命名管道
      • 命名管道(fifo)也是半双工的,它和无名管道的区别主要在于,命名管道有名字,且对应一个磁盘索引节点,任何进程都可以对它进行访问,
  • 消息队列

  • 消息组成的链表,放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点

  • 共享内存

  • 共享内存允许多个进程共享一个给定的内存区域,这一段存储区可以被共享的进程映射至自身的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个共享内存的进程,通过简单的内存读取操作来读出,从而实现了进程间的通信。

  • 采用共享内存进行通信的一个主要好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝,对于像管道和消息队里等通信方式,则需要再内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次:一次从输入文件到共享内存区,另一次从共享内存到输出文件。

  • 套接字

    • 套接字(socket)是一个抽象层,主要用于网络间传递消息,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
发布了27 篇原创文章 · 获赞 1 · 访问量 893

猜你喜欢

转载自blog.csdn.net/hu853996234/article/details/104758623
今日推荐