SystemV

news2024/11/16 19:24:16

一、共享内存
1、直接原理
进程间通信的本质是:先让不同的进程,看到同一份资源!!
我们要把这句话奉若圭臬一般
到了共享内存了支持双向通信能读也能写,但是一般都是一个读一个写
要想通信先看到同一个份资源,则
OS帮助申请内存,通过页表挂接到进程地址空间中,给应用层返回起始虚拟地址
如果要释放共享内存:先去关联,再释放共享内存

上面的操作都是进程直接做的吗?不是。直接由操作系统来做。
因为不能让进程直接malloc,你这样申请了那这块空间就是你的,会破坏了进程的独立性
所以必须利用系统调用,这样创建出来的共享内存就不属于进程私有的
在这里插入图片描述

操作系统要不要管理所有的共享内存呢??先描述,在组织
内核结构体描述共享内存,就得有结构体,这个共享内存多大,谁申请的,当前几个进程和我关联…
然后把所有的结构体用链表数组管理起来
所以在OS层面上,对共享内存的管理行为,变成对某种数据结构的增删查改

接下来要学习共享内存,要么就应用层面上学,系统调用接口搞懂
往底层学,就要找对应的先描述在组织是怎么做的!

在释放共享内存时,为什么先去关联,再释放共享内存?
因为共享内存的管理属性结构体中同样也维护了这块内存的引用计数,有多少个进程引用了它
万一别的进程还在引用着你难道直接释放吗?不可能
所以利用属性中引用计数,让引用计数–,等引用计数–到0在释放
共享内存的这块物理内存只是单纯保存数据,引用计数放在属性结构体中

2、直接代码
在物理内存中的这块共享内存呢,如果有人创建出来了,别人下一次就不需要再创建了直接获取就行了
也就会有如何创建,如何获取的概念
系统调用接口shmget
在这里插入图片描述

OS中会有很多共享内存,你怎么保证让不同的进程看到同一个共享内存呢??
shmget参数中的key,有进程用这个key创建,你拿着这个key去OS中 的共享内存中去获取,找到了那你们两个不就看到的是同一个内存吗
所以谈谈key:
1.key是一个数字,这个数字是几,不重要。关键在于它必须在内核中具有唯一性,能够让不同的进程进行唯一性标识
2.第一个进程可以通过key创建共享内存,第二个之后的进程,只要拿着同一个key就可以和第一个进程看到同一个共享内存了!
3.对于一个已经创建好的共享内存,key在哪?key在共享内存的描述对象中!
4.第一次创建的时候,必须有一个key了。怎么有?
利用算法ftok来生成一个冲突率小的key
在这里插入图片描述

这个Key值干嘛那么费劲让用户去设置,设置完成还有可能出现冲突,让OS生成一个key行不行?
OS不清楚哪个进程和哪个进程要通信,只有用户最清楚
这个key如果第一次创建共享内存由OS生成,并且我这个进程也拿到了key,但是另一个进程怎么知道对应的共享内存的key是多少呢?那有人说你把这个key传给另一个进程不就行了,可是我们正在解决的就是进程间通信的问题,这不就鸡生蛋,蛋生鸡了吗
所以与其说key由用户自由指定,不如说用户约定的,只要他们两个约定了同一个key,OS有属性Key相同的共享内存,那他们两个进程一定能找到
所以不需要系统随机指定key,因为系统随机不解决把这个key传递给另一个进程的目的,我们通过约定的方式让他们两个形成同一个key。所以必须由用户层下达给OS
pathname 和 proj_id让那几个进程看到,那哪几个进程就能通信!

  1. key —类似----路径---- 唯—

Key vs shmid
在这里插入图片描述
key也就是在创建时用,往后就都不用了,控制共享内存都用shmid
key是给OS用的
共享内存标识符shmid是用户层用它控制共享内存的

现象
创建共享内存的进程退了,可是利用
ipcs -m 查OS共享内存发现 共享内存仍然存在
在这里插入图片描述

说明
共享内存的生命周期是随内核的!
用户不主动关闭,共享内存会一直存在。
除非内核重启(用户释放)
因为你通完信走了,如果关闭了,上面还有数据的话,下次还想用就用不了了。
所以创建好一直存在,你想用就挂接,不用用户直接释放(ipcrm -m)

那释放用key还是shmid呢?
一定是shmid,因为命令行也属于用户层并不属于OS,key是给OS用的

3、共享内存的特性,扩展代码

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

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

相关文章

Spring-IOC-FactoryBean机制(难点且重点)

1、第一个案例 1.1、Book.java package com.atguigu.ioc; import lombok.Data; Data public class Book {private String bid;private String bname; }1.2、Book2.java package com.atguigu.ioc; import lombok.Data; Data public class Book2 extends Book {private String co…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大难点分析

数字化时代银行网点厅堂营销存在以下5大难点: 1、识别难。识别有效的客户比较难,传统的厅堂识别主要依据客户的衣着气质等主管感受,判断客户是否为潜在中高端客户,提供相关服务。大堂经理主管识别与智能化系统识别相结合&#xf…

新安装win11,搜索框无法输入的问题

正确的做法是如下: 1首先进入win11系统,在搜索框中输入“ 控制面板 ”将其打开2在控制面板中找到“时间和语言“ 标题 再选择“ 语言和区域”, 标题 在显示的语言上面,点击省略号,进入语言选项 标题 在键盘处,删除不需要的输入法…

speech studio-神经网络定制自己的声音

Speech Studio - 神经网络定制声音 - 概述 (microsoft.com)

Zero-Shot Restoration of Back-lit Images Using Deep InternalLearning

ABSTRACT 如何恢复背光图像仍然是一项具有挑战性的任务。该领域最先进的方法基于监督学习,因此通常仅限于特定的训练数据。在本文中,我们提出了一种用于背光图像恢复的“零样本”方案,该方案利用深度学习的力量,但不依赖于任何先…

从大模型到内容生成,初窥门径的AI新次元

视频云AI进化新纪元。 最近Gartner发布2024年十大战略技术趋势,AI显然成为其背后共同的主题。全民化的生成式人工智能、AI增强开发、智能应用......我们正在进入一个AI新纪元。 从ChatGPT的横空出世,到开发者大会的惊艳亮相,OpenAI以一己之力…

JVM--Java虚拟机

0. java代码的执行过程 了解Java虚拟机(JVM)首先需要了解一下一段Java代码的具体执行过程。 Java代码的具体执行过程如下: 执行 javac 命令编译源代码为字节码执行 java 命令,二进制字节码通过解释器翻译为机器码 创建 JVM&…

《QT从基础到进阶·三十五》QT插件实现侧边工具栏tabBar

tabBar是用QT插件实现的一个dll,对于插件的使用可以参考文章: 《QT从基础到进阶三十三》QT插件开发QtPlugin 源码放在文章末尾 该功能类似侧边工具栏,可以在该标签栏上添加自己开发的界面,实现代码如下: 1、所有功能…

【大数据分布并行处理】实验测试(一)

文章目录 测试任务1测试任务2测试任务3 测试任务1 使用HDFS相关命令完成下列四个操作(20分) 操作1:在HDFS根目录创建以自己名字命名的目录,并查看是否创建成功(5分)。 提示:截图包括&#xff…

目标检测 详解SSD原理,数据处理与复现

原理详解 前言 今天我们要读的这篇VGGNet(《Very Deep Convolutional Networks For Large-Scale Image Recognition》),就是在AlexNet基础上对深度对网络性能的影响做了进一步的探索。它是ImageNet 2014年亚军,相比于AlexNet&am…

智能车入门补充篇——电感值处理、转向控制与巡线

冒泡法 冒泡法是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序的时间复杂度为O(n^…

电脑上可以写便签的软件哪些界面比较可爱且好用?

电脑上可以安装使用的便签类软件比较多,在选择使用电脑便签软件时,很多人对便签的外观界面还是比较在意的,一个好看的便签界面在一方面可以引起大家的注意,另一方面可以增加电脑桌面背景和便签类软件的协调性。 电脑便签软件通常…

Web测试中文件上传测试

总体情况 1、功能实现: (1)文件类型正确、大小合适 (2)文件类型正确,大小不合适 (3)文件类型错误,大小合适 (4)文件类型和大小都合适&#x…

引迈-JNPF低代码项目技术栈介绍

从 2014 开始研发低代码前端渲染,到 2018 年开始研发后端低代码数据模型,发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示: 1. 项目前后端分离 前端采用Vue.js,这是一种流行的前端JavaScript框架&a…

风丘远程试验管理平台TFM 支持“一键式“数据管理和监控

随着信息技术的高速发展,企业对远程试验实时监控与数据管理的需求日益增强。而利用远程试验信息协同技术,可突破部门与地域的限制,并把试验现场的车辆状态信息、试验数据和分析结果实时传输给数据分析部门和设计部门等,从而缩短时…

SQL的连接join

一、连接说明 union、intersect等集合运算,它的特征是以 “行” 为单位进行操作,通俗点说,就是进行这些集合运算,会导致记录行数的增减,使用union会增加记录行数,使用 intersect 或 expect 会减少行记录&a…

印刷企业数字工厂管理系统建设方案

随着科技的飞速发展,传统印刷企业正面临着前所未有的挑战。产能短缺、质量控制不足、成本控制不力以及服务质量不高等问题成为了制约企业发展的瓶颈。为了解决这些问题,印刷企业需要积极拥抱数字化转型,构建数字工厂管理系统。 一、印刷企业数…

Figma 是什么软件?为什么能被Adobe收购

很多人一定早就听说过Figma的名字了。看到很多设计同行推荐,用了很久,疯狂的安利朋友用。是什么让这么多设计师放弃了FigmaSketch的魅力?下面的内容将详细分享一些与Figma相关的知识点,并介绍这个经常听到但不熟悉的工具。 Figma…

nacos鉴权报invalid username or password

操作 你得检查一下nacos的配置的数据库有没有缺少表,可以在下图找到nacos的官方的配置库: 然后注意到这个SQL文件的最后的两行,这两行就是插入默认的nacos的登录密码的,如果你设置了对应的配置的文件其实也是没有用的最后他还是…

最小最大表示法超详细讲解

文章目录 前言循环同构串最小表示法暴力解法暴力解法的可优化之处最小表示法的代码实现 最大表示法 前言 最小/最大表示法是用来找出字符串的最小/最大字典序的循环同构串的方法,其求解算法可以达到O(N),过程很像KMP算法的next数组推导过程,都…