操作系统12----进程间通信IPC

2023-11-15

 

                                                         进程间通信IPC

1.进程通信(IPC, Inter-Process Communication)

1.1直接通信

1.2间接通信

1.3阻塞通信

1.4非阻塞通信

2.信号(Signal)

3.管道(pipe)

4.消息队列

5.共享内存


1.进程通信(IPC, Inter-Process Communication

进程通信是进程进行通信和同步的机制

IPC提供2个基本操作  发送操作:send(message)  接收操作:receive(message)

进程通信流程  在通信进程间建立通信链路  通过 send/receive交换消息

通信方式

通信方式大致分为直接通信和间接通信。直接通信使用共享信道来通信,间接通信使用内核来间接通信。

1.1直接通信

进程必须正确的命名对方

send (P, message) – 发送信息到进程P

receive(Q, message) – 从进程 Q接受消息

通信链路的属性

自动建立链路,一条链路恰好对应一对通信进程,每对进程之间只有一个链接存在,链接可以是单向的,但通常为双向的

1.2间接通信

通过操作系统维护的消息队列实现进程间的消息接收和发送,每个消息队列都有一个唯一的标识,只有共享了相同消息队列的进程,才能够通信。

通信链路的属性

只有共享了相同消息队列的进程,才建立连接,连接可以是单向或双向,消息队列可以与多个进程相关联,每对进程可以共享多个消息队列

1.3阻塞通信

阻塞发送  发送者在发送消息后进入等待,直到接收者成功收到

阻塞接收  接收者在请求接收消息后进入等待,直到成功收到一个消息

1.4非阻塞通信

非阻塞发送   发送者在消息发送后,可立即进行其他操作

非阻塞接收   没有消息发送时,接收者在请求接收消息后,接收不到任何消息

IPC通信方式主要由信号,管道,消息队列和共享内存等。


2.信号Signal

进程间的软件中断通知和处理机制

信号的接收处理

捕获(catch):执行进程指定的信号处理函数被调用

忽略(Ignore):执行操作系统指定的缺省处理

屏蔽(Mask):禁止进程接收和处理信号

信号的实现


3.管道(pipe)

进程间基于内存文件的通信机制

子进程从父进程继承文件描述符  缺省文件描述符:0 stdin, 1 stdout, 2 stderr

进程不知道(或不关心)的另一端

与管道相关的系统调

读管道:read(fd, buffer, nbytes)

写管道: write(fd, buffer, nbytes)

创建管道:pipe(rgfd)  rgfd2个文件描述符组成的数组  rgfd[0]是读文件描述符 rgfd[1]是写文件描述符

shell

创建管道

ls创建一个进程 , 设置 stdout 管道写

more 创建一个进程, 设置 stdin 为管道读端


4.消息队列

消息队列是由操作系统维护的以字节序列为基本单位的间接通信机制.

每个消息(Message)是一个字节序列

相同标识的消息组成按先进先出顺序组成一个消息队列(Message Queues)

消息队列的系统调用

msgget ( key, flags) 获取消息队列标识

msgsnd ( QID, buf, size, flags )发送消息

msgrcv ( QID, buf, size, type, flags )接收消息

msgctl( … ) 消息队列控制


5.共享内存

共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制。

每个进程都有私有内存地址空间,每个进程的内存地址空间需明确设置共享内存段。

同一进程中的线程总是共享相同的内存地址空间。

快速、方便地共享数据;必须用额外的同步机制来协调数据访问

共享内存的实现

利用逻辑地址到物理地址的映射来完成

共享内存系统调用

shmget( key, size, flags)创建共享段

shmat( shmid, *shmaddr, flags)把共享段映射到进程地址空间

shmdt( *shmaddr)取消共享段到进程地址空间的映射

shmctl( …)共享段控制

需要信号量等机制协调共享内存的访问冲突

参考:清华大学 操作系统  陈渝  http://os.cs.tsinghua.edu.cn/oscourse/OS2015/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统12----进程间通信IPC 的相关文章

  • fork之后子进程到底复制了父进程什么

    fork之后子进程到底复制了父进程什么 发表于2015 4 3 9 54 08 2161人阅读 分类 操作系统 include
  • Minikube 架构及启动流程剖析

    原文作者 wzqnls 编辑 夏天 对于要学习 Kubernetes 或者需要本地开发的开发人员来说 Minikube 是一个不错的选择 通过使用 Minikube 这个工具 我们可以非常快捷地在本地部署一套单节点的 Kubernetes
  • java调优总结

    JVM调优总结 序 几年前写过一篇关于JVM调优的文章 前段时间拿出来看了看 又添加了一些东西 突然发现 基础真的很重要 学习的过程是一个由表及里 再由里及表的过程 呵呵 所谓的 温故而知新 而真正能走完这个轮回的人 也就能称为大牛或专家了
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • win10 Enable developer Mode

    经过漫长的安装过程 win10终于装上了vs2015 rc 写个小程序试试 结果提示 根据提示打开 设置 更新 for developer 据说应该有这么个界面 但是这个界面根本出不来 直接闪退的说 翻 MSDN 终于翻出了解决方法 htt
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • Anaconda 安装 Python 库(MySQLdb)的方法-(转)

    安装python库的过程中 最重要的地方就是版本需要兼容 其中操作系统为64位 Python为2 X 64位 下载安装文件的时候也要注意版本匹配 其中文件名中包含的cp27表示CPython 2 7版本 cp34表示CPython 3 4
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • CentOS Linux服务器安全设置

    转自 http www osyunwei com archives 754 html 引言 我们必须明白 最小的权限 最少的服务 最大的安全 所以 无论是配置任何服务器 我们都必须把不用的服务关闭 把系统权限设置到最小话 这样才能保证服务器
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • 使用ShellJS提升你的开发效率(一)

    Shelljs Unix shell commands for Node js Shelljs是Node js下的脚本语言解析器 具有丰富且强大的底层操作 Windows Linux OS X 权限 Shelljs本质就是基于node的一层
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • C++智能指针简介

    C 智能指针简介 一 简介 前言 从C到C C malloc 和 free C new 和 delete 从C 到Morden C C new 和 delete morden C shared ptr unique ptr 和 weak p
  • IDEA创建Zookeeper客户端

    IDEA创建Zookeeper客户端 解决单机Zookeeper的错误 不是Zookeeper集群问题 但是集群问题也可以参考 网上看到的教程基本上都是服务器端口号 防火墙的问题 但是个人测试之后发现没有解决问题 于是自己尝试一下方法 最后
  • 梯度下降法的推导(非常详细、易懂的推导)

    原作者 红色石头 来自 AI有道 梯度下降 算法的公式非常简单 沿着梯度的反方向 坡度最陡 是我们日常经验得到的 其本质的原因到底是什么呢 为什么局部下降最快的方向就是梯度的负方向呢 也许很多朋友还不太清楚 没关系 接下来我将以通俗的语言来
  • WSL2开启后Vmware虚拟机性能下降

    开启WSL2 需要开启 虚拟机平台 功能 实际就是HyperV 开启后 Vmware虚拟机里面性能下降大约10 再次断绝了我的WSL2直接挂在ext分区的念想 见图 开启前 CPU Z跑分464 开启后414 按照Vmware建议关闭侧信道
  • C++学习(六十六)IoT和AIoT

    loT是物联网的英文名称 是Internet of Things的缩写 AloT AI IoT 是人工智能 物联网的英文名称 智能物联网
  • 修复ROS2使用zsh无法用tab补全 ros2 指令的相关问题

    安装完ROS2 后 改用zsh发现无法使用tab补全 ros2相关指令 现记录下修复办法 首先 安装python3 argcomplete sudo apt install python3 argcomplete 然后 在 zshrc里面添
  • STM32 CAN通信的学习笔记总结(从小白开始)

    知识来源于互联网 回馈于互联网 目录 1 总体概述 1 1 基本概念 1 2 通讯方式 1 3 为什么使用CAN 1 4 CAN的协议及组成 2 上帝视角看CAN的通讯过程 2 1 数据传输原理实现 2 2 通信的整个过程 2 2 1 空闲
  • Python读写excel文件

    1 使用pandas库读取Excel 最常用 pandas可以读取各种各样格式的数据文件 一般输出dataframe格式 如 txt csv excel json 剪切板 数据库 html hdf parquet pickled文件 sas
  • FSCapture注册码

    企业版序列号 name bluman serial 序列号 注册码 VPISCJULXUFGDDXYAUYF 转载于 https www cnblogs com wshsdlau p 4396184 html
  • HTML<DIV>常用标签

    目录 1 什么是DIV 1 1 div是什么意思 1 2 div标签怎么用 1 3 div布局优势 1 4 DIV作用是什么 1 5 有哪些DIV方式 1 5 1行内样式 1 5 2内嵌样式 1 5 3外部样式 1 6 样式使用规则 2 D
  • 使用队列实现stack

    两个队列实现一个stack q1只保持一个元素即可 多余的转换到q2当中 出队列元素 有两种情况 q1不为空 直接出队列 如果连续出队列 q1可能为空 需要q2的部分元素放到q1当中去 说白了就是元素捣鼓来捣鼓去的问题即可 class My
  • Linux-安装redis6.2.1及主备复制模式(replication)

    Linux 安装redis6 2 1 下载redis6 2 1资源 上传至安装目录 解压及编译 解压 修改名称 编译 修改配置文件 主节点 从节点 启动及测试 启动 主节点 从节点 测试 下载redis6 2 1资源 地址 https re
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:101-120)

    第101题 可用于多种路由协议 由 if match 和 apply 子句组成的路由选择工具是 A route policy B IP Prefix C commnityfilter D as path filter 答案 A 解析 Rou
  • QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent

    建了一个对话框 我不想把边框去掉 只想去掉关闭按钮 setWindowFlags windowFlags Qt WindowCloseButtonHint Qt WindowContextHelpButtonHint 结果那个问号的按钮去掉
  • c++序列化以及反序列化实现

    1 什么是序列化和反序列化 当我们在写程序时 比如说我们自定义了一个实体类Person 然后在程序中创建一个该实体类对象 并给对象赋了一些值 但是我们想将这些数据发给我们的其他的程序员朋友 让他们也可以调用我们创建的这个实体类并使用我们的数
  • 数据库实时同步利器——CDC(变化数据捕获技术)

    在进行数据ETL过程中 我们经常需要通过周期性的定时调度将业务数据按照T 1的方式同步到数据仓库中 进行数据分析处理 最终通过BI报表展示给最终用户 但这种方式实时性较差 用户往往只能看到昨天的数据 会影响用户决策的及时性 而如果用户要近实
  • 更换持续集成工具,从 Travis 到 Github Actions

    我真傻 真的 单单受文档的推荐就选择了 Travis 作为部分项目的持续集成工具 没有料到它早已于 2020 年 12 月更换了免费政策 不再为开源项目提供免费的用于持续集成使用的 Credits 了 当赠送的 10000 个点数用完 就需
  • 【踩坑经历】Java Long 类型传给前端损失精度的问题

    最近在做一个 SpringBoot Vue 的项目 持久层框架用的是 MyBatis Plus 然后遇到了一个问题 一起来看下怎么回事 这个项目就是一个文章收藏器 可以收藏一些技术文章 然后可以选择星标 以便查找这篇文章 那么点击星标的按钮
  • 服务器的tomcat调优和jvm调化

    下面讲述的是tomcat的优化 及jvm的优化 Tomcat 的缺省配置是不能稳定长期运行的 也就是不适合生产环境 它会死机 让你不断重新启动 甚至在午夜时分唤醒你 对于操作系统优化来说 是尽可能的增大可使用的内存容量 提高CPU 的频率
  • 操作系统12----进程间通信IPC

    进程间通信IPC 1 进程通信 IPC Inter Process Communication 1 1直接通信 1 2间接通信 1 3阻塞通信 1 4非阻塞通信 2 信号 Signal 3 管道 pipe 4 消息队列 5 共享内存 1 进