news 2026/7/21 22:18:37

Linux 之 【进程间通信】(消息队列与信号量、Systrm VIPC在内核中数据结构设计)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 之 【进程间通信】(消息队列与信号量、Systrm VIPC在内核中数据结构设计)

目录

1.消息队列

2.Systrm V IPC在内核中数据结构设计

3.临界资源与临界区

4.信号量


1.消息队列

操作系统在内核空间创建并维护多个消息队列作为共享资源,每个队列都有唯一的标识符。不同进程通过相同的标识符访问同一个队列,从而实现进程间通信。进程可以向队列发送带类型的数据块,也可以从队列中接收特定类型的数据。操作系统采用"先描述,再组织"的方式管理所有消息队列,为每个队列维护描述结构体,并通过链表等数据结构统一组织,确保通信的有序性和可靠性

消息队列的使用接口这里不做讲解

2.Systrm V IPC在内核中数据结构设计

Systrm V通信标准在操作系统内部是一个独立的模块,与一切皆文件的理念兼容性差

理念维度System V IPC"一切皆文件"理念
访问方式专用系统调用(shmget/shmctl等)统一文件API(open/read/write
标识机制独立的key/shmid/msgid/semid文件路径和描述符
命名空间独立的IPC命名空间统一的文件系统命名空间
权限模型自定义的struct ipc_perm标准的Unix文件权限位
生命周期随内核(需显式删除)文件系统管理(可持久化)

Systrm V标准具有 共享内存、消息队列、信号量 三种进程间通信方式

操作系统内核为每种类型维护一个对象指针数组,数组的每个槽位存储对应IPC对象的指针。当用户通过xxxget()系统调用创建或获取IPC对象时,内核会分配一个数组索引,并结合递增的序列号(较大时会回绕到0)生成用户可见的唯一标识符(shmid/msgid/semid)。
此后,对特定数组的增删查改就是对特定IPC资源的增删查改

共享内存、消息队列、信号量 三种类型中的第一个字段都是struct ipc_perm

所以三种对象都能够通过其首字段位置实现类型安全的对象访问转换

struct ipc_perm { key_t __key; /* Key supplied to semget(2) */ uid_t uid; /* Effective UID of owner */ gid_t gid; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short mode; /* Permissions */ unsigned short __seq; /* Sequence number */ };

struct ipc_perm存储了对象的创建键值(__key)、属主和创建者的用户/组ID(uid/gid、cuid/cgid)、权限模式(mode)以及防重用的序列号(__seq)

封装的实现:系统调用接口(shmget/shmctlmsgget/msgctlsemget/semctl)封装了实现IPC资源访问功能的细节

继承的模拟:三种IPC对象(共享内存、消息队列、信号量)都将struct ipc_perm作为其数据结构的第一个成员

多态的模拟:例如,IPC_STAT命令在三种IPC类型中具有相同的语义(获取状态),但具体实现会根据对象类型访问不同的特有字段,实现了"同一接口,不同实现"的多态行为,而类型参数在运行时决定具体执行路径

3.临界资源与临界区

临界资源是并发环境中共享且任何时刻只允许单个执行流访问的资源,通常为内存空间但也可扩展至文件、硬件设备等

访问临界资源的那部分代码称为临界区,它通常只占整个程序代码的一小部分(如100行中的5-10行),需通过互斥机制(如锁或信号量)保护,以确保执行流在临界区内的操作具有原子性和隔离性

从资源层级看,CPU将进程视为其调度资源,而进程则将其内存空间视为私有资源;当多进程共享同一内存区域时,该区域即成为临界资源

4.信号量

(1)信号量的核心本质

信号量本质是一把共享计数器,其整数值cnt描述临界资源中可用资源的数量。信号量机制实现了对多进程/多线程访问共享资源的预订和控制

(2)资源预订机制

执行流必须先申请信号量才能访问临界资源的机制类似于"资源预订",申请成功表示获得访问权限,这样,信号量就可以通过保证进入共享资源的执行流的数量,有效保护临界资源

信号量值减1(P操作)对应资源分配,信号量值加1(V操作)对应资源释放

(3) 进程间同步

上述的资源预定机制说明信号量本身也是所有通信进程可见的共享资源,用于实现进程间协同工作的基础同步机制,那么

信号量作为共享资源就需要进行自我保护,PV操作的原子性可以确保信号量自身的线程安全

(4) PV操作的原子性

P操作(申请):cnt--,原子减1,申请资源,V操作(释放):cnt++,原子加1,释放资源
原子性要求:单条汇编指令完成,无中间状态,避免普通cnt--/cnt++(3条指令)的竞态问题

(5)二元信号量(互斥锁)

信号量整数值仅为0或1(两态),资源整体使用、整体申请、整体释放时,本质上实现了互斥功能,保护了单一共享资源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 19:39:12

CGO调用OpenCV实现多角度模板匹配性能分析

在计算机视觉领域,模板匹配作为基础实用的图像处理技术,历经传统方法到深度学习方法的迭代。据国际计算机视觉与模式识别会议(CVPR)2023年技术趋势报告,传统模板匹配在现代工业视觉检测中仍占38%应用份额,尤…

作者头像 李华
网站建设 2026/7/19 16:48:53

Zookeeper在大数据实时报表系统中的应用

Zookeeper在大数据实时报表系统中的应用 关键词:Zookeeper、大数据、实时报表系统、分布式协调、一致性协议、分布式锁、元数据管理 摘要:本文深入探讨Zookeeper在大数据实时报表系统中的核心应用场景,包括分布式协调、配置管理、集群节点管理…

作者头像 李华
网站建设 2026/7/16 15:09:01

干瞪眼游戏胜率较高的玩法分析

### **干瞪眼游戏胜率较高的玩法分析**在干瞪眼游戏中,玩家需要通过合理出牌、灵活运用牌型和策略性保留关键牌来提高胜率。以下是胜率较高的玩法策略:---#### **1. ** **炸弹的灵活运用** - **核心作用**:炸弹(四张相同牌&#x…

作者头像 李华
网站建设 2026/7/13 19:58:27

救命神器10个AI论文平台,专科生毕业论文救星!

救命神器10个AI论文平台,专科生毕业论文救星! AI工具助力论文写作,专科生也能轻松应对 随着人工智能技术的不断发展,AI工具已经逐渐成为学术写作中不可或缺的助手。对于许多专科生来说,撰写毕业论文是一项既复杂又耗…

作者头像 李华
网站建设 2026/7/13 21:12:36

从高AI率到轻松通过:5款降重神器详细教程,有效降低AI疑似率!

交论文前最怕什么?肯定不是内容深度不够,而是辛辛苦苦用AI辅助完成的稿件,查重的时候却被标出一片红,AIGC率直接爆表?!看着电脑上超高的“AIGC疑似率”真是不知所措,于是开始手动降AI&#xff0…

作者头像 李华