当前位置: 首页 > article >正文

2.29、共享内存(2)

2.29、共享内存(2)

  • 1、问题1:操作系统如何知道一块共享内存被多少个进程关联?
  • 2、问题2:可不可以对共享内存进行多次删除 shmctl
  • 3、共享内存和内存映射的区别

1、问题1:操作系统如何知道一块共享内存被多少个进程关联?

  • 共享内存维护了一个结构体struct shmid_ds 这个结构体中有一个成员shm_nattch
  • shm_nattach 记录了关联的进程个数

2、问题2:可不可以对共享内存进行多次删除 shmctl

  • 可以的
  • 因为shmctl 标记删除共享内存,不是直接删除
  • 什么时候真正删除呢?
    • 当和共享内存关联的进程数为0的时候,就真正被删除
  • 当共享内存的key0的时候,表示共享内存被标记删除了
    • 如果一个进程和共享内存取消关联,那么这个进程就不能继续操作这个共享内存。也不能进行关联。

3、共享内存和内存映射的区别

  1. 共享内存可以直接创建,内存映射需要磁盘文件(匿名映射除外)
  2. 共享内存效果更高
  3. 内存
  • 所有的进程操作的是同一块共享内存。
  • 内存映射,每个进程在自己的虚拟地址空间中有一个独立的内存。
  1. 数据安全
  • 进程突然退出
    • 共享内存还存在
    • 内存映射区消失
  • 运行进程的电脑死机,宕机了
    • 数据存在在共享内存中,没有了
    • 内存映射区的数据 ,由于磁盘文件中的数据还在,所以内存映射区的数据还存在。
  1. 生命周期
  • 内存映射区:进程退出,内存映 射区销毁
  • 共享内存:进程退出,共享内存还在,标记删除(所有的关联的进程数为0),或者关机
    • 如果一个进程退出,会自动和共享内存进行取消关联。

http://www.kler.cn/a/10276.html

相关文章:

  • 用 Collections.synchronizedSet 创建线程安全的 HashSet
  • 你真的了解Canvas吗--解密十四【ZRender篇】
  • 【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
  • printf影响单片机中断速度
  • leetcode20.括号匹配
  • 使用 API 和离线库查询 IP 地址方法详解
  • Springboot整合Quartz实现定时任务数据库动态配置
  • Python数据分析:轻松实现数据处理、分析和可视化的入门教程
  • 代码自动发布系统
  • qt - 隐式共享与d-pointer技术
  • Android 11.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)
  • ptuning v2 的 chatglm垂直领域训练记录
  • 银行数字化转型导师坚鹏:金融科技与数字化转型成功案例
  • 腾讯云服务器TencentOS系统安装宝塔Linux面板命令
  • 软件管理 基础配置(运维笔记)
  • 所有知识付费都可以用 ChatGPT 再割一次?
  • 设计师都在用的6个免费设计素材网站~
  • 【C++】内联函数理解
  • d修复导入c的问题
  • MySQL日志
  • 如何驯化生成式AI,从提示工程 Prompt Engineering 开始
  • Day939.如何小步安全地升级数据库框架 -系统重构实战
  • 银行数字化转型导师坚鹏:ChatGPT解密与银行应用案例
  • 鸟哥的Linux私房菜 学习 Shell Scripts
  • 【CSS】实现梯形
  • C语言实例:求一个整数的所有因数,创建各类三角形图案(代码+思路)