操作系统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 的相关文章

  • MySQL基础(非常全)

    MySQL基础 一 MySQL概述 1 什么是数据库 答 数据的仓库 如 在ATM的示例中我们创建了一个 db 目录 称其为数据库 2 什么是 MySQL Oracle SQLite Access MS SQL Server等 答 他们均是
  • Tomcat7安装及配置教程

    Apache Tomcat7 0安装及配置教程 Apache Tomcat7 0官方网站链接 http tomcat apache org apache tomcat 7 0 73 windows x64 先解压下载的压缩包 然后在bin目
  • Minikube 架构及启动流程剖析

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

    1 安装CentOS 7 3操作系统mini版本即可 2 设置关闭Selinux 编辑 etc selinux config vi etc selinux config SELINUX disabled 重启机器 查看selinux状态 s
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Ubuntu 10.10下安装TFTP的步骤 tftp-hpa版本

    背景 由于想要在tq2440板子上用tftp下载kernel 所以要在自己的PC机的Ubuntu 10 10上安装tftp服务 所以就去网上找了些教程 但是很悲剧 按照那些教程去操作 结果还都是无法正常运行tftp服务 最后还是从一个外国人
  • win10 Enable developer Mode

    经过漫长的安装过程 win10终于装上了vs2015 rc 写个小程序试试 结果提示 根据提示打开 设置 更新 for developer 据说应该有这么个界面 但是这个界面根本出不来 直接闪退的说 翻 MSDN 终于翻出了解决方法 htt
  • 操作系统笔记六(文件管理)

    1 文件逻辑结构 1 1逻辑结构的文件类型 分类 有结构文件 例如 PNG文件 无结构文件 1 2顺序文件 1 3索引文件 2 辅存的存储空间分配 2 1分配方式 连续分配 直接分配连续的存储空间 链接分配 隐式链接 在盘块内指定下一个盘块
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • OS——文件管理系统磁盘的结构之搞清盘面和柱面

    如上图 每个柱面有三个盘面 即就是3个磁道 柱面可以抽象的理解成是一个套一个的立体的同心圆柱体 例 2019年408真题 磁盘有300个柱面 每个柱面有10个磁道 每个磁道有200个扇区 扇区大小为512B 则磁盘容量 分析 每个柱面有10
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • 使用ShellJS提升你的开发效率(一)

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

随机推荐

  • 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 进