首页 > 系统相关 >轻松理解操作系统 - 一文讲明 共享内存

轻松理解操作系统 - 一文讲明 共享内存

时间:2024-11-29 13:28:32浏览次数:11  
标签:共享内存 操作系统 int 参数 key shmid 讲明 include

大家好,我是菲英。

在前面呢,我们了解了进程间通信模块管道机制消息队列机制

管道机制是什么?

消息队列是什么?

本期,我们就继续来了解进程间通信模块共享内存机制

首先,为什么它是最快的进程间通信机制?

因为,它是多个进程的一块虚拟内存映射到同一块物理内存区域来实现数据共享,而无需使用内核来中转数据。

然后,我们来看看它的优缺点

图片

所以它到底是怎么使用的呢?

首先,我们一般先通过系统提供的接口获取一个 key

#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);

第一个参数 pathname:文件路径,用于生成 key

第二个参数 proj_id:一个整数,也是用于生成 key

返回值:成功返回 key失败返回 -1

然后,我们需要创建一个共享内存

#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);

第一个参数 key 是一个唯一标识:一般用第一个函数生成的 key

第二个参数 size共享内存的大小,一般设置为内存页大小的整数倍,也就是 4KB 的整数倍

第三个参数 shmflg如何创建共享内存,它有一下几种入参:

IPC_CREAT  // 如果不存在,则创建;如果存在,则返回旧的共享内存标识符。

IPC_EXCL   // 如果存在则返回错误,即创建一个全新的共享内存。

0666   // 权限位:用于设置创建的共享内存的权限,通常以经典八进制表示。

例子:

int shmid = shmget(key, 409600, IPC_CREAT | IPC_EXCL | 0666);

返回值:成功返回该块内存的标识,失败还是返回 -1

想使用这块内存的话,我们还需要连接它

#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);

第一个参数 shmid:由上一个函数 shmget 返回的共享内存标识符。

第二个参数 shmaddr:指定连接的地址,一般为 NULL,表示由系统自动选择一个地址

第三个参数 shmflg:设置对共享内存的读写权限,通常为 0 表示读写权限

返回值:成功时返回连接的共享内存地址,失败时返回 -1(void* 类型)。

那如何断开它呢?

#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);

入参 shmaddr 显然就是要断开的共享内存地址了。

返回值:成功为 0,失败为 -1

用完了得删除它吧,那怎么删除它呢?

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

第一个参数 shmid:还是由 shmget 返回的共享内存标识符。

第二个参数 cmd 参数:控制命令,有以下几种取值

IPC_STAT   // 获取共享内存的状态信息。
IPC_SET   // 设置共享内存的状态信息。
IPC_RMID   // 删除共享内存。

第三个参数 buf:一个保存着共享内存的信息(模式状态和访问权限)的数据结构 struct shmid_ds。

通常设置为 nullptr

返回值:成功为 0,失败为 -1

那它的原理是什么呢?

其实它的原理非常简单:它就是把同一块物理内存映射到了不同进程的虚拟内存空间里面。

图片

作者简介

从材料专业一路转行,深知计算机基础的重要性,所以经常分享这些知识,期待你的关注、和我一起学习

也给大家整理了免费的计算机求职学习资料,下方CSDN卡片关注后私信“求职”、“考证”获取下载方式。

标签:共享内存,操作系统,int,参数,key,shmid,讲明,include
From: https://blog.csdn.net/H_P10/article/details/144117045

相关文章

  • Perplexity 计划推出低价语音问答硬件;/dev/agents:AI Agents 的操作系统,种子轮估值 5
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • UUP 是 Unified Update Platform 的缩写,是微软推出的一种更新机制,用于 Windows 操作系
    UUP是UnifiedUpdatePlatform的缩写,是微软推出的一种更新机制,用于Windows操作系统的版本更新和升级。它主要用于通过较小的增量更新来减少Windows系统升级过程中的下载和安装时间。UUP的特点和工作原理:增量更新:UUP允许用户通过下载最小的更新包来升级操作系统,而不是......
  • Linux操作系统3:用户,用户组,权限
    Linux用户,用户组,权限用户和用户组基础1.计算机通过用户名和密码识别用户;2.Linux中新建用户后,需要设置密码;3.系统中有一个特殊的用户root;4.用户组:把几个用户归在一起,这样的组被称之为用户组,规定文件所属用户组的权限可以使该组所有成员拥有这些权限。普通用户和最高管......
  • 【原创】linux实时操作系统xenomai看门狗(watchdog)机制及作用介绍
    版权声明:本文为本文为博主原创文章,转载请注明出处https://www.cnblogs.com/wsg1100。如有错误,欢迎指正。目录一、前言PREEMPT-RT(RTThrottling)一、xenomaiwatchdog介绍二、xenomaiwatchdog工作原理三、使用场景本文介绍xenomaiwatchdog,有什么用?它是如何工作的?一、前言介绍......
  • 操作系统三种处理机调度算法介绍
    以下是对先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN)详细介绍:先来先服务(FCFS)算法•算法原理:按照作业或进程到达系统的先后顺序进行调度,先到达的先被服务,就如同日常生活中排队办事一样,先来的人先得到处理。•计算步骤:1.记录每个作业(或进程)的到达时间和服务时间(即执......
  • 操作系统实验 4 文件系统设计
    一、实验目的通过一个简单文件系统的设计,加深理解文件系统的内部功能及内部实现。二、主要仪器设备、试剂或材料VMware虚拟机三、实验内容为Linux系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令。mkdir创建目录rmdir删除目录c......
  • 【操作系统】2.3_11_ 哲学家进餐问题
    https://www.bilibili.com/video/BV1YE411D7nH?spm_id_from=333.788.videopod.episodes&vd_source=6c2daed6731190bb7d70296d6b9746bb&p=36方法1n个哲学家,n个筷子创建一个初值为n-1的信号量,保证最多只有n-1个进程并发争抢资源,必有1个筷子资源余留,可以1个进程拿到两支筷子,不......
  • AS-V1000视频平台:部署在国产操作系统麒麟上并实现实时视频监控的浏览查看和回看
    目录一.问题来源二.银河麒麟系统的介绍三.下载麒麟系统的步骤四.配置平台并查看结果4.1外部设备接入4.1.1摄像机配置4.1.2平台配置4.2配置资源组4.3配置角色和用户4.4查看最终结果一.问题来源        客户想要在安装银河麒麟服务的服务器上使用AS-V1000......
  • 【Linux探索学习】第十六弹——进程地址空间:深入解析操作系统中的进程地址空间
    Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482前言:进程地址空间是操作系统进程管理的重要概念之一,它定义了进程在执行时所能访问的内存布局。理解进程地址空间不仅有助于掌握操作系统的运行原理,也为程序优化、内存管......
  • [豪の学习笔记] 操作系统#001
    1.1.1-操作系统的概念、功能操作系统(OperatingSystem,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。①操作系统是系统资源的管理者提供的功能:处理......