IPC 进程间通信

IPC

InterProcess Communication

The concept of IPC

Each process has a differnt user addess space,and local variables 各自看不见,so 进程间通信 need kernel(内核), so a buffer is opened in the kernel,process 1 copies data from user space to this buffer,and process 2 reads the data from the kernel buffer,this mechanism 机制 calls IPC,InterProcess Communication
在这里插入图片描述

7 ways of IPC

Pipe

也叫做匿名管道

管道,traditional Unix communication mechanism

  • The pipes are half-duplex 半双工,data can only flow in one direction,when two sides need to communicate,we should create 2 pipes
  • this way can only use between parente-child(父子) or sibling(兄弟) processes(具有血缘关系的进程)
  • 管道单独构成一个独立的文件系统,对于管道两头来说,它可以看作是一个文件系统,专门来传输东西的,并且pipes only exists in memory
  • 数据的读写,we know, pipes are flow in one direction,so a process writes to the pipeline, and the other process reads from the other sides,one wirtes,one read,in one direction

管道的实质

  • The essence of a pipeline is kernel buffer,一个内核缓冲区,进程是先入先出来存数据进去,管道一端顺序写入,other side,顺序read
  • The buffer can be seen as a circular queue,the read and write positions are automatically grown,after reading it,it no longer exists in buffer.
  • when a buffer is empty or full,there are some rules to controll the relevant read process or write process,当有新数据写入,or 旧数据读出,就会唤醒在waiting queue里边的process

LImitations of the pipeline

管道的主要的局限性正在于它的特点上

  • only one-way data streams are supported
  • only use between process that are related to each other 为什么只能用于亲缘关系啊?
  • no name 为什么没有名字属于是局限性呢?
  • The buffor of the pipeline is limited,the buffer exists in the memory, so it’s limited
  • The pipeline transmit an unformatted byte stream,无格式字节流,也就是说,管道的输入输出,必须在读写之前规定好数据的格式

这里需要知道的是,为什么说没名字,就只能用于有亲缘关系的进程呢,因为,如果没名字的化,we get two processes, process 1 have pipes, but process 2 don’t know the address of the kernel buffer,so process 2 can’t communicate with process 1. 像父子进程啊,一般都是子process 会copy all parent resouces,including the file decriptor,文件描述符,so they use same pipeline;

Named Pipeline

有名管道 FIFO,就是因为匿名管道,只用于亲缘关系之间,to overcome it,the Named Pipeline was proposed.提出

两者不同之处 在于 named pipeline provides a pathname 与之关联,以有名管道的形式存在于file system中,so two processes 没亲缘关系,也可以互相通信,他们只要访问这个路径就ok了,named pipeline exist in file system,the content exists in the memory

Summary

  • 管道是特殊的文件,并且满足在先入先出的原则进行读写,但是不能进行定位读写
  • 匿名管道是单向的,只能在亲缘关系的process之间通信,有名管道不用,都可以通信
  • 无名管道的blocking 问题,读写的时候,需要确认对方存在,不存在, exit,当前线程向无名管道writre data,必须other sides 有process,不然exit,写入的data,超过max data,blocking. 没数据,blocking. If the pipe lines finds the other 断开, 自动exit
  • 有名管道的blocking 问题,named pipelines must confirm 对方存在,否则blocking,也就是说,当我们读管道的时候,必须在此之前,有一个process 在写管道,否则blocking 此外,我们通过读写模式(O_RDWR)打开有名管道,也就是当前进程读,当前进程写,不会block

Signal

信号

  • Signaling is a mechanism(机制) usedi in Linux to communicate or maniplulate(操作) between processes,signals 任何时候都能发给某个process,and 不用知道它的状态如何
  • If the process is not currently executing, the kernel will save the signal until the process reples to execution and passes it on. 没执行的化,信号会被保存起来,然后等他恢复之后,再传回来
  • If the process is blocking,信号就延迟传递,until its blocking canceled ,然后再发给他.

Common singals in LInux.

(1) SIGHUP: 用户从终端logs out,all 启动的process 都收到
(2) SIGINT: 程序终止信号,while the program is running , press CTRL + C key will传递改sigal
(3) SIGQUIT: 程序退出,运行的时候,按 CTRL + \
etc

信号来源

信号是再软件上对终端机制的一种模拟,是一种asynchronous通信方式,signal can 直接在user space 和 kernel space直接进行交互,kernel can use the signal to inform the user space process of which system events have occured,and there are 2 main sources of signal events

  • 硬件来源: 用户press Ctrl + C,or hardware exception
  • 软件终止,终止进程信号,其他进程调用kill 函数,软件异常发出信号

信号的lifecycle and 处理流程

  • The signal is generated by a certain process, and 设置传递对象,然后传给OS
  • OS 通过接收process的设置选择性的发送给接收者,这个设置就是是否阻塞,也就是说,如果接收者对该信号是阻塞的,then OS will save this signal,不传递,until 它解除了对这个signal的block,If 接收者没blocking,那么OS will pass the signal
  • 目标进程,接收到之后,会根据当前线程对此信号设置的预处理方式,暂时终止当前代码执行,save context(主要包括 临时寄存器的data,当前program的position,以及cpu的status),然后去执行中断服务程序,执行完之后,回到中断位置.

Message Queue

消息队列

  • Message Queue is a linked list of messages stored in the kernel,每个Message Queue 用消息队列标识符表示
  • 消息队列存在于内核中,只有说内核重启或者显示的删除消息队列,才会删除消息队列
  • 和管道不同的是,消息队列在某个进程在写如消息的时候,不需要另外一个线程在那等,也就是说,消息队列是异步的

Summary of message queue features:

  • Message queue is a linked list ,有special format,stored in the memory,通过message queue标识符标识
  • allow multiple process to read or write
  • pipeline and message queue are on a first in first out basics
  • message queue可以实现message random 读取,message不一定是顺序读取,可以按照消息的type,进行分类读取,更有优势
  • The message queue overcomes the shortcomings of the signal carryin the small amout of information and the pipeline can only carry unformatted words,and the limits size of the buffer
  • Now,2 main type of message queue,POSIX message queues and System V message queues,System V message queues are widely used. Sysrtem V 生命周期和kernel 是一样的,只有说kernel重启,或者人工删除queues才会被删除

Share Memory

共享内存

  • Share memory allows multiple processes to read and write to the same memory space,是最快的IPC形式,就是为了针对其他IPC效率低设计的
  • 为了多个进程之间交换信息,kernel 专门流出一块内存区,可以由需要访问的进程将它映射到自己的私有地址space,process 可以直接写这一块区域,并且不用进行copy,从而大大提高效率
  • 因为是share momory,必须depend on a certain synchronization machanism ,like semaphores 信号量,来达到互斥

Semaphore

信号量是一个计数器,为了多进程对share data 的访问,就是进程间的同步

为了获取共享资源,需要干以下的事

  • create a semaphore,要求调用者specify an initial value,usually 1 or 0,对于2值信号量来说
  • wait for a semaphore,该操作会测试信号量的值,if < 0,block,也就是 P操作
  • 挂出一个信号量,该操作,会 将信号量 + 1,也叫做V操作

为了实现semaphore correctly,信号量的测试 + 减一 should be an atomic operation,so 信号量一般在kernel中实现
linux环境中,有三种类型,
Posix 可移植性操作系统接口,有名信号量
Posix 基于内存的信号量
System V信号量

信号量和普通整形变量的区别

  • 信号量事非负整型,除了初始化之后,它只能通过两个atomic operation, wait and singal来进行访问
  • 操作也叫做PV原语,对普通变量来说,什么语句块都能访问

互斥量和信号量之间的区别

互斥量会为了thread之间的互斥,信号量用于线程的同步,他们两的区别就是互斥和同步的区别

  • 互斥,也就是对于某个资源,在同一时间内,只allow 一个user进行访问,但是不能保证对资源的访问顺序,也就是互斥的访问是out of order
  • 同步,在互斥的基础上,通过其他机制,对资源进行有序的访问
  • 互斥量的加锁 + 解锁必须是同一个线程分别使用,信号量可以有一个线程释放,另外一个线程得到

Socket

套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发,既可以在本地单机上运行,也可以跨网络运行,换句话说,它可以通过不再统一计算机上通过connect network 进行通信

套接字是支持TCP/IO的网络通信的基本操作单元,可以看作是2个不同之间之间进程进行双向通信的断电,简单来说,就是一种约定,用套接字种的相关函数完成通信

Socket features

Socket are determined by three attributes, domain ,port number and protocal type
域,端口号,协议类型

  • domain指定socket 通信的网络介质,2 common domains ,One is AF_INET,指的是Internet网络,当客户使用socket来跨网络连接的时候,需要用到服务器computer的ip地址and port来指定一台联网机器上的特定服务,使用socket作为通信的终点,服务器应用程序在通信之前,需要绑定一个port,在指定的port下wait user connect. 另外一个domain AF_UNIX,标识Unix文件系统,他就是文件的输入输出,而他的地址是文件名
  • port number: 每一个基于tcp/ip网络通讯的程序或进程都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用户保留Socket中的输入输出信息,端口号是一个16位无符号整数,范围是0 - 65535,用来区别主机的不同程序,低于256的端口号被用来给标准应用程序,比如pop3的port number是110,每一个socket都组合进了ip地址,port,这样就可以新参整体,以来区分每一个socket
  • socket protocol type: internet provides 3中通信机制,第一种是流套接字,流套接字在domain中通过tcp/ip连接实现,同时还是AF_UNIX中常用的套接字类型,流套接字提供的是一个有序,可靠,双向字节流的连接,因此发送的数据确保不丢失,重复,乱序到达,而且还有一定的出错后的重新发送机制 第二个是数据报套接字,通过udp/ip实现,它对发送的数据有限制,数据报作为一个单独的网络信息被传输,有可能丢失复制或者错乱到达,所以udp不是一个可靠的协议,但是他快 三是原始套接字原始套接字允许对较低层次的协议直接访问,比如IP、 ICMP协议

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

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

相关文章

Linux:运营商在网络中扮演的角色

文章目录 ip目前的问题ip目前的几种解决方案私有ipVS公有ip运营商再谈ip划分运营商的角度看ip 本篇总结的是运营商在网络中扮演的角色 ip目前的问题 在目前看来&#xff0c;ip最大的问题是ip号不够用了&#xff0c;那这个问题如何解决呢&#xff1f; 在之前的内容中有子网掩…

朗之万方程,机器学习与液体中的粒子运动

目录 一、说明二、朗之万方程的诞生2.1 牛顿力学2.2 流体中的随机运动 三、小质量物体布朗运动方程四、布朗运动的Python代码五、稳定性讨论5.1 波尔兹曼分布5.2 梯度下降算法 六、随机梯度下降&#xff08;SGD&#xff09;和小批量梯度下降七、机器学习与物理&#xff0c;作为…

加密软件VMProtect教程:使用脚本-功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

最大连续1的个数||

又用到滑动窗口&#xff0c;关键在于要维持窗口内0的数量在k内 #include<stdio.h> #include<string.h>int Max(int a,int b){return (a>b)?a:b; }int findMaxConsecutiveOnes(int* nums,int numsSize,int k){int left 0;int right 0;int flag 0;//记录包含…

系统设计理念:满足设计要求

在今天的文章中,我们将层层剥离并深入探讨系统设计要求的本质。 让我们了解系统设计的支柱以及如何创建强大且有弹性的应用程序。 什么是好的设计? 在我们深入讨论技术细节之前,让我们先讨论一下什么是好的设计。 当我们谈论系统架构中的良好设计时,我们关注几个关键原则:…

初始C语言最后一章《编译、链接与预处理详解》

前言 感谢老铁们的陪伴和支持&#xff0c;初始C语言专栏在本章内容也是要结束了&#xff0c;这创作一路下来也是很不容易&#xff0c;如果大家对 Java 后端开发感兴趣&#xff0c;欢迎各位老铁来我的Java专栏&#xff01;当然了&#xff0c;我也会更新几章C语言实现简单的数据结…

C++中的面向对象到底是什么

C中的面向对象到底是什么 对象嘛&#xff0c;就和大家都有的对象一样&#xff0c;两只眼睛、一个嘴巴、两条腿…… 对不起跑题了&#xff0c;C的面向对象中的对象可不是显示中的对象哦&#xff0c;但是有一些相似之处&#xff0c;有对象的同学可以参考着去学习C面向对象的概念…

HackTheBox-Machines--Builder

文章目录 1 端口扫描2 测试思路3 漏洞测试 Builder测试过程 1 端口扫描 nmap -sC -sV 10.129.230.2202 测试思路 系统开启了22和8080端口&#xff0c;22端口无账号密码&#xff0c;测试方向主要从8080的jenkins服务开始测试。 在测试开源系统时&#xff0c;可以下载源代码或本地…

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…

电机选型与直线模组(简化版)

2-1电机分类和普通电机选型 1、电机及其原理的基本认知&#xff1a; 电动机我们平时简称电机&#xff0c;大部分情况下指的都是通电后&#xff0c;输出轴会旋转运动的设备。即将电能转换为机械能&#xff0c;供我们使用以驱动机构运行。电机简单的讲&#xff0c;其实就是一个…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

【Qt】常用控件(输入类)

目录 一、Line Edit二、Text Edit三、ComBo四、DateTimeEdit五、Slider 一、Line Edit QLineEdit 用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行。 属性说明test输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoM…

harbor api v2.0

harbor api v2.0 v2.0 v2.0 “harbor api v2.0”与v1区别较大&#xff0c;此处harbor也做了https。另外&#xff0c;通过接口拿到的数据也是只能默认1页10个&#xff0c;所以脚本根据实际情况一页页的循环抓取数据 脚本主要用于统计repo(仓库)、image&#xff0c;以及所有镜像…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN二: 如何训练模型,内附详细损失、准确率、均值计算

手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN&#xff08;新手适用&#xff09;一&#xff1a; model.py&#xff1a;创建模块-CSDN博客 从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 1 设备device定义 2 训练模型定义 3 开始训练 3.1 step、batch…

4.机器学习-十大算法之一线性回归算法(LinearRegression)案例讲解

机器学习-十大算法之一线性回归算法案例讲解 一摘要二个人简介三什么是线性回归四LinearRegression使用方法五糖尿病数据线性回归预测1.数据说明2.导包3.导入数据4.脱敏处理5.抽取训练数据和预测数据6.创建模型7.预测8.线性回归评估指标9.研究每个特征和标记结果之间的关系.来分…

职场成功的关键:提升软实力,成就非凡事业

在竞争激烈的职场中&#xff0c;专业技能固然重要&#xff0c;但软实力同样不可或缺。要想在职场中脱颖而出&#xff0c;实现事业上的成功&#xff0c;我们需要在提升软实力上下功夫。本文将探讨职场软实力的内涵及其在职场成功中的作用&#xff0c;并提供一些建议&#xff0c;…

解决Quartus与modelsim联合仿真问题:# Error loading design解决,是tb文件中没加:`timescale 1ns/1ns

解决Quartus与modelsim联合仿真问题&#xff1a;# Error loading design解决&#xff0c;是tb文件中没加&#xff1a;timescale 1&#xff0c;一直走下来&#xff0c;在modelsim中出现了下面问题2&#xff0c;rtl文件、tb文件2.1&#xff0c;rtl代码2.2&#xff0c;tb测试2.3&a…

java Web实现用户登录功能

文章目录 一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结果 二、JSPServlet方式实现用户登录功能&#xff08;一…

校园通勤车可视化系统的设计与实现

1.需求分析&#xff1a; 校园通勤车可视化系统的设计与实现&#xff0c;不用管什么可视化&#xff0c;就是一个小程序就是可以知道校园车的路线&#xff0c;然后往简单了弄就可以。 校园通勤车可视化系统的设计与实现&#xff0c;不用管什么可视化&#xff0c;就是一个小程序…

【C/C++】C++学籍信息管理系统(源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…