2.1.4 进程通信

顾名思义,进程通信就是指进程之间的信息交换。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。同时为了保证安全,一个进程不能随意的访问另一进程的资源,但有时进程通信又是必要的,所以操作系统提供了共享存储消息传递管道通信三种方式来实现进程之间的通信。

目录

2.1.4 进程通信

2.1.4.1 共享存储

2.1.4.2 消息传递

2.1.4.3 管道通信

2.1.4.1 共享存储

在共享存储这一形式中,两个进程对于某一共享内存的访问必须是互斥(不能同时访问)的。共享存储又可以进一步分为基于数据结构的共享以及基于存储区的共享。

 基于数据结构的共享:在这种通信方式中,要求诸进程公用某些数据结构,借以实现诸进程间的信息交换。比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式。

  基于存储器的共享:为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。

2.1.4.2 消息传递

消息传递的方式是现在应用最广泛的一种进程通信方式,进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。运用这种方式不仅实现了大量数据的传递而且向用户透明,隐藏了其中的实现细节,因此应用较为广泛。消息传递又可以分为直接通信方式和间接通信方式。

  直接通信方式:消息直接挂到接收进程的消息缓冲队列上。

间接通信方式:消息要先发送到中间实体(信箱)中,因此也称“信箱通信方式”。

2.1.4.3 管道通信

所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名 pipe 文件。其实就是在内存中开辟一个大小固定的缓冲区。

1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。

2. 各进程要互斥地访问管道。

3. 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。

4. 如果没写满,就不允许读。如果没读空,就不允许写。

5. 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

操作系统(十)进程通信相关推荐

  1. 【操作系统】进程通信-思维导图

    https://www.liuchuo.net/archives/1690 因为图片上传大小限制,复制过来会看不清晰,直接放链接吧~

  2. 清华大学《操作系统》(二十):死锁和进程通信

    一.死锁 死锁:一组阻塞的进程(两个或多个),持有一种资源,等待获取另一个进程所占有的资源,而导致谁都无法执行. 可重复使用的资源: 在一个时间只能一个进程使用,且不能被删除. OS避免杀死拥有资源的 ...

  3. 【操作系统】第十一章死锁与进程通信

    以下是操作系统的各部分知识点的目录: 第一章:操作系统的概述 https://blog.csdn.net/weixin_44751294/article/details/104172847 第二章:启 ...

  4. 操作系统学习笔记-2.1.4进程通信

    操作系统学习笔记-2019 王道考研 操作系统-2.1.4进程通信 文章目录 4进程通信 4.1知识总览 4.2前置知识:什么是进程通信? 4.3共享存储 4.4 管道通信 4.5消息传递 4.6小结 ...

  5. 操作系统——实验贰——进程通信(一)管道及共享内存

    一. 实验目的 熟悉并掌握管道机制,并实现进程间通信 熟悉并掌握共享内存机制,并实现进程间通信 二. 实验内容 任务一: (1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析 ...

  6. 操作系统之进程管理:3、进程控制(进程状态转化的实现)、原语、进程通信(共享、管道、消息)

    3.进程控制 进程控制 思维导图 进程控制相关的原语 创建原语 撤销原语 阻塞原语.唤醒原语 切换原语 原语要做的几件事 进程通信 思维导图 进程通信方式 数据共享 管道通信 消息传递 进程控制 1. ...

  7. (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)

    文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...

  8. 同一主机的多个子进程使用同一个套接字_在操作系统中进程是如何通信的

    这是我在毕业时校招阿里系公司时,终面的面试官问我印象最深的一道题,别问,问就是挂了.要是过了早就忘了 首先了解进程是什么 狭义定义就是,进程是一段程序进行的过程. 广义定义:进程是一个具有一定独立功能 ...

  9. 操作系统-为什么进程之间的通信必须借助操作系统内核功能?

    原因 每个进程有自己独立地地址空间.在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,所以必须借助于操作系统的系统调用函数实现进程之间的通信. 进程通信的主要方式 (1)共享内存区.通 ...

最新文章

  1. 4月份阿里云ECS和VPC升级公告
  2. bind()和connect()函数:绑定套接字并建立连接
  3. vue ui 创建项目 ,添加样式时报错,通过vue ui安装less-loader 和less 依赖后报错,百度告诉说版本太高导致
  4. C#数组解决约瑟夫环问题
  5. .NET Core开发实战(第25课:路由与终结点:如何规划好你的Web API)--学习笔记(上)...
  6. clone-graph
  7. 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面
  8. java 静态绑定_java的动态绑定和静态绑定
  9. vbs整人代码蓝屏_来人。教你们用vbs代码和bat代码整人。高手勿进。
  10. oracle linux 下载地址
  11. 二进制、八进制、十进制与十六进制
  12. C# WPF 的多国语言处理
  13. 白岩松人生哲学-听后感
  14. Python入门(二)-编程环境
  15. 手机软件测试英语,手机软件测试,mobile phone software testing,音标,读音,翻译,英文例句,英语词典...
  16. 4.23以上UE4 版本HTC-VIVE VR项目打包的注意事项
  17. 基于RSA和AES混合加密实现的加解密小工具
  18. QTextLine、QGlyphRun、QTextLayout
  19. oop三大特性--封装性
  20. 4810: [Ynoi2017]由乃的玉米田

热门文章

  1. BeanDefinition的载入和解析
  2. linux 网络编程 2---(TCP编程)
  3. NSNumber 以及NSInteger,NSNumber以及Int的区别
  4. 如何识别一个指针式的时种的时间?
  5. 第一阶段站立会议05
  6. 文件上传到ubuntu -- WinSCP 登录ftp服务器
  7. HTML中的div标签
  8. asp.net后台代码动态添加JS文件和css文件的引用
  9. 关于jsp中 对只转发结果集的无效操作: last 异常
  10. 纯Python模块发布setup脚本编写示例