操作系统(九)进程通信

news/2024/4/27 22:46:52/文章来源:https://blog.csdn.net/qq_40212968/article/details/127611903

文章目录

  • 1 IPC
    • 1.1通信操作
    • 1.2通信链路的实现
    • 1.3通信分类
      • 1.3.1直接通信与间接通信
        • 直接通信
        • 间接通信
      • 1.3.2消息传递的特征
    • 1.4缓冲问题
    • 1.4.1容量问题
  • 2信号(signal)
    • 2.1原理
    • 2.2接收信号后处理方式
    • 2.3不足
    • 2.4实现
  • 3管道
    • 3.1
  • 4消息队列
  • 5共享内存
  • 6socket机制

1 IPC

inter process comutation 进程间通信
进程地址空间不会被其他进程访问,当出现进程协作时,需要进程之间有效沟通。

1.1通信操作

IPC提供两个操作:

send
receive

如果两个进程之间想通信,需要建立通信链路,通过send和receive交换消息

1.2通信链路的实现

通信链路的实现:

物理:共享内存、硬件总线
逻辑:逻辑属性

1.3通信分类

1.3.1直接通信与间接通信

从发射路径来看(发送给谁):

  • A:间接通信,通过内核(邮件)
  • B:直接通信(打电话)
    在这里插入图片描述

直接通信

1 .必须正确命名对方

  • send(P,message)——发送信息到进程P receive(P,message)——从进程Q接受消息

2.通信链路的属性

  • 1.自动建立链路
  • 2.一条链路对应一个链接存在
  • 3.链接可以是单向的,但通常为双向

间接通信

1.定向从信息队列接收消息

  • 每个信息队列都有唯一一个ID,只有共享了一个消息队列,进程才能通信
  • 创建消息队列,通过消息队列发送和接收消息,销毁消息队列
  • send(A,message) 发送消息到队列A
  • receive(B,message) 从队列A接收消息

2.通信链路属性:

  • 1.进程共享一个共同的消息队列,才能建立链路
  • 2.链接可以与多个进程相关联
  • 3.每对进程可以共享多个通信链路
  • 4.链接可以是双向或单向

1.3.2消息传递的特征

  • 消息传递可以是阻塞和非阻塞的
  • 阻塞:被认为是同步的,发送进程会阻塞直到接收进程接收,接收进程会阻塞知道资源可用。
  • 非阻塞:被认为是异步的。发送进程发送资源后继续运行,接收进程接收消息或者接收空

1.4缓冲问题

将消息缓存起来,避免接收的不匹配。

1.4.1容量问题

1.容量为0,相当于同步。

2.有限容量,当数据满,发送等待,数据空,接收等待。
3.无限容量,发送方不需要等待,数据空,接受仍然需要等待

2信号(signal)

2.1原理

硬件中断interrupt,signal是软件中断通知事件处理。

2.2接收信号后处理方式

1.catch:指定信号处理函数被调用(c++ try…catch)
2.ignore:依靠操作系统的默认操作(进程终止或挂起)
3.mask:闭塞信号因此不会传送,禁止进程接收和处理信号(登录程序不能暂停,因为暂停程序被屏蔽掉了)

2.3不足

不能传输要交换的任何数据,传送信息量小,只有一种数据类型。

2.4实现

1.注册:注册信号处理函数给操作系统内核。
2.发送信号时,操作系统内核负责把信号送给指定进程,启动对应信号处理函数。
3.执行信号处理函数。

  • 操作系统从内核返回进程时,返回信号处理函数的入口如不是调用系统语句的后条命令,需要将用户空间堆栈修改。先返回信号处理函数,再返回中断位置。(木马病毒会这么做)
    在这里插入图片描述

3管道

3.1

组合程序,一个程序的输出是另一个程序的输入。子进程从父进程继承文件描述符。进程不知道从键盘、文件、程序读取还是写入到终端、文件、程序。
系统调用:读管道(read)、写管道(write)、创建管道(pipe)
在这里插入图片描述
shell:1.创建管道 2.为1s创建进程,设置stdout为管道写端 3.为more创建进程,设置stdin为管道读端

4消息队列

由操作系统维护的以字节序列为及本单位的间接通信机制。
管道:父进程帮子进程建立关系。数据是字节流。
消息队列:实现多个不想管进程通过消息队列通信,send和receive传递的是有意义字节结构。
系统调用:获取消息队列标识msgget,发送消息msgsnd,接收消息msgrcv,消息队列控制msgctl

5共享内存

把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制。
管道和消息队列是间接的。
共享内存直接通信方式。开辟了两个进程都能访问的共享内存空间。传输速度快,在最开始就开辟共享内存。直接通信方式需要加入同步互斥机制。

进程:每个进程有私有的内存地址空间,需要明确设置共享内存段
线程:共享共享相同的内存地址空间

系统调用:创建共享段shmget、把共享段映射到进程地址空间shmat、取消共享段到进程地址空间的映射shmdt、共享段控制shmctl

6socket机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410408.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么选择高防DNS云解析?

DNS(Domain Name System,域名服务器)是互联网的一项核心服务,是域名与对应IP地址进行转换的系统,可将易于记忆的域名转换为可由服务器识别的用于互连通信的数字IP地址。随着大数据时代的到来,传统DNS所存在…

C语言~指针变量

给自己找的基础啊~~ 给自己学 多谢大佬指点 别的勿扰 指针变量的基本操作基本操作 int a,*iptr,*jptr,*kptr; iptr &a; jptr iptr; *jptr 100; kptr NULL; 己址和己空间 指针变量也是一个变量,对应一块内存空间,对应一个内存地址…

DJ8-2 主存储器的组织

如何由存储芯片到存储器? 确定设计容量:多大设计容量 芯片的选用:多大容量,位数,多少片,如何分组 地址分配:将CPU提供的全部地址空间的哪些地址空间分配给所设计的存储器,确定各芯…

docker搭建zabbix服务

docker搭建zabbix服务zabbix简介1、本次安装zabbix的镜像版本2、zabbix组件2.1 创建子网2.2 MySQL容器2.3 zabbix-server-mysql容器2.4 zabbix-web-nginx-mysql容器2.5 zabbix-agent2容器2.6 zabbix-snmptraps容器3、zabbix访问3.1 中文字体修改zabbix简介 zabbix(…

esp32通过micropython-->MQTT--上传至腾讯云,实时显示温湿度数据保姆级教程(上)

esp32通过micropython-->MQTT--上传至腾讯云,实时显示温湿度数据保姆级教程(上)1.注册登录和创建产品:1.1注册账号/登录账号:1.2创建产品:1.注册登录和创建产品: 1.1注册账号/登录账号&…

销售人员应关注的 5 个指标

在上一篇博客 不想写代码,想要灵活性?这个指标平台全都有 中,我们提到了指标的分类一般分为基础指标、衍生指标和复合指标。其中基础指标可用于量化统计事务属性,如总金额等。而对于销售人员来说,最常接触/使用的指标是…

自动泊车的路径动态规划问题研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【附源码】计算机毕业设计java支持协作知识建构的Python程序设计课程学习活动平台设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

iPhone通讯录如何完整导入到新手机

概要:iPhone通讯录如何完整导入到新手机?在此部分中,我们将示范几个从iPhone转移通讯录到另一台iPhone的选项。其中,第一种更为推荐,因为更灵活且更容易操作。当然您也可以根据自身情况选择喜欢的方法。 iPhone14已经发…

【HDLBits刷题笔记】12 More Circuits

Rule90 第一次见这东西有点莫名其妙,但是其实看懂了之后就是左移和右移相异或,注意这里使用的是逻辑右移,会自动补零,不能使用算数左移<<<。module top_module(input clk,input load,input [511:0] data,output reg[511:0] q ); always@(posedge clk)beginif(load…

QT调用OpenCV绘制直线、矩形、椭圆、圆、不规则曲线、文本

开发环境&#xff1a;QT5.14.2OpenCV4.5 提前准备&#xff1a;准备编译好的OpenCV开发环境(如自行编译的mingw版的opencv库&#xff0c;本地路径D:\opencv\qt_build64)&#xff0c;准备一张测试图片&#xff08;如&#xff1a;d:\test.jpg&#xff09;。 项目结构&#xff1a…

零零信安-DD数据泄露报警日报【第31期】

01 概述 2022.10.26共发现匿名网络资讯信息70,642条&#xff1b;最近7天共发现匿名网络资讯信息472,185条&#xff0c;同比增长-42%&#xff1b;最近30天共发现匿名网络资讯信息2,498,093 条。 D&D评论&#xff1a; 国际上&#xff0c;近日监测到国外公司源代码泄漏事件增加…

Web响应式(二)

内容:媒体查询 媒体查询语法 组合媒体查询一、媒体查询 媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几行CSS代码就改变内容的显示方式。 二、媒体查询语法 媒体查询类型大全媒体查询属性大全:例子: …

理解vim工作的几个关键字

理解vim工作的几个关键字 下面我们再来认识一下 vim ,理清下面的 vim 的几个名词,这样方便我们以后更好的去使用和进阶vim : 缓冲区(Buffer), 窗口 (Window ) , 标签(Tab) , 标记(Mark ), 寄存器(Register) , 插件(Plugin) , vim 脚本(VimScript)。 缓冲区(buffer) 什…

【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《LeetCode》 &#x1f516;题目链接&#xff1a;移除元素、删除有序数组中的重复项、合并两个有序数组 目录一、移除元素示例 1&#xff1a;示例 2&#xff1a;理解思路1&#xff1a;代码…

Linux——页面置换算法(OPT、FIFO、LRU的实现与比较)

目录 1、 实验题目 2、实验要求 &#xff08;1&#xff09;指令的地址按下述原则生成 &#xff08;2&#xff09;具体的实施方法 &#xff08;3&#xff09;将指令序列变换为页地址流 3、算法实现参考代码&#xff1a; 4、运行结果 5、算法比较 1、 实验题目 设计一个虚…

使用Git Bash Here代码上传本地项目到GitLab

使用Git Bash Here代码上传本地项目到GitLab,上传到到GitHub等其它项目管理也类似。 一、第一次用代码上传项目 1.使用Git Bash Here打开代码输入框&#xff0c;创建克隆目录&#xff1a; git clone xxx/androidprojects.git 2. 把项目放到创建的目录下&#xff0c;并代码进…

Side Window Filtering 论文笔记

引言 Side Window Filtering是上了数字图像处理这门课后看的第二篇论文&#xff0c;这是一篇2019年发表的论文&#xff0c;提出的技术方法也相对比较新。由于我对CV方面涉猎不多&#xff0c;所以看的时候比较懵&#xff0c;似懂而非懂&#xff0c;于是打算做点笔记&#xff0c…

珠宝加工厂:我的成本下降空间在哪里?

摘要&#xff1a;珠宝加工厂&#xff0c;如何通过IoT边缘技术&#xff0c;OT/IT数据融合&#xff0c;实现成本的下降、效率的提升本文分享自华为云社区《玩转物联网IoT边缘服务系列二-珠宝加工的成本下降空间在哪里&#xff1f;》&#xff0c;作者&#xff1a;eleven1111 。 本…

小程序配置详解

小程序新生成时的目录 有4中不同的文件类型 .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxss 后缀的 WXSS 样式文件.js 后缀的 JS 脚本逻辑文件json app.json 是对当前小程序的全局配置&#xff0c;包括了小程序的所有页面路径、界面表现、网络超时时间、底部 ta…