SystemV

2023-11-21 16:45
文章标签 systemv

本文主要是介绍SystemV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

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

这篇关于SystemV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403661

相关文章

Linux学习之路 -- systemV进程通信 -- 消息队列和信号量(简单介绍)

一、简介:         System V进程通信(System V IPC)是一组在Unix和类Unix操作系统中用于进程间通信的机制。这些机制在System V Release 2中首次引入,并在POSIX标准中得到部分采纳。System V IPC主要包括以下几种通信方式: 消息队列(Message Queues): 消息队列允许一个或多个进程写入或读取消息。消息队列可以看作是一个消

APUE-从SystemV IPC可以学到的设计思路

1. 既然消息队列、信号量、共享内存都有控制数据(结构体),提供一个控制函数对该控制数据进行读写,并且通过一个参数int cmd来决定对该控制数据执行什么控制操作,而且不同的cmd可以有返回值,可以无返回值。增加函数的灵活度。 2. 根据函数的参数,决定是创建一个新的还是打开一个既存的。可以避免把函数写死或写两个函数:创建函数和打开函数。 3. 函数执行的过程,通过设置类似errno的值,解释

posix信号量和systemv信号量

1. posix 无名信号量  : 进程持续 ,其实就是计数器不止1 的互斥锁 #include <stdio.h>#include <pthread.h>#include <semaphore.h>/*使用信号量保护临界资源的访问*//*临界资源*/char* data[5];int size = 0;/*信号量*/sem_t lock;void* task1(void* p

基于systemV的消息队列的多进程间CS通讯实现

因工作需要,需要整改一个C/S架构的进程间通讯,以systemV接口的方式,因为跑在marvell一个芯片上,这个东西起名字叫MIPC,废话少说,如下:        SystemV消息队列的报文结构要求如下:         typedef struct sysV_msg        {            long type;--------------------

linux 进程间通信--systemV 共享内存 实例

1:共享内存代码 #include <sys/shm.h>#include <sys/types.h> /* Type definitions used by many programs */#include <stdio.h> /* Standard I/O functions */#include <stdlib.h> /* Prototypes of comm

linux 进程间通信--systemV 信号量 实例

1:代码 #include <stdio.h>#include <sys/types.h>#include <sys/sem.h>#include <errno.h>#include <stdlib.h>#include <signal.h>#define MAX_SEMAPHORES 3union semun{int val; /

linux 进程间通信--systemV 消息队列 实例

1:消息接收端 #include<stdlib.h>#include<stdio.h>#include<unistd.h>#include<string.h>#include <sys/wait.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#include <errno.h>#include <s

【Linux】SystemV IPC

进程间通信 一、SystemV 共享内存1. 共享内存原理2. 系统调用接口(1)创建共享内存(2)形成 key(3)测试接口(4)关联进程(5)取消关联(6)释放共享内存(7)测试通信 3. 共享内存的特性 二、SystemV 消息队列(了解)1. SystemV 消息队列原理2. 系统调用接口(1)创建消息队列(2)形成 key(3)发送/接收数据(4)释放消息队列 三、IPC在内核中

【Linux】-进程间通信-共享内存(SystemV),详解接口函数以及原理(使用管道处理同步互斥机制)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、共享内存的原理二、直接代码2.1关于共享内存的四大接口2.2如何通信 三、扩展知识3.1 看看维护共

【Linux】-进程间通信-共享内存(SystemV),详解接口函数以及原理(使用管道处理同步互斥机制)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、共享内存的原理二、直接代码2.1关于共享内存的四大接口2.2如何通信 三、扩展知识3.1 看看维护共