进程通信的类型

本文介绍了进程通信的高级通信方式,包括共享存储系统、消息传递系统(直接和间接通信)和管道通信。共享存储系统允许进程共享数据结构,消息传递系统支持一对一、一对多、多对一和多对多的通信模式,而管道通信则是半双工的数据流。这些通信机制在操作系统中用于实现进程间的高效信息交换。
摘要由CSDN通过智能技术生成

前言

进程间的通信要解决的问题的是进程之间信息的交流,信息的交流量可大可小。按交换信息的大小,可把进程间的通信分成低级通信和高级通信。

低级通信中,进程之间只传递状态和整数值,信号量机制属于低级通信方式。其优点是传递信息的速度快,缺点是传递的信息量少,通信效率低。

高级通信中,进程间可以传送任意数量的数据,传递的信息量大,操作系统隐藏了进程间通信的细节,简化了写代码的复杂性。

高级通信

高级通信机制分为三类,分别为共享存储系统、消息传递系统和管道通信。

共享存储系统

在共享存储系统中,相互通信的进程共享某些数据结构或存储区域,进程之间通过共享的区域进行通信。

共享区域:将同一块物理地址映射到不同的进程和虚拟地址空间中,实现不同进程对同一资源的共享,其通信方式最快。

特点:

  1. 不用从用户态到内核态频繁的切换和拷贝数据,直接从内存中读取就可以。
  2. 共享内存是临界资源,所有操作要保证其原子性。使用信号量或互斥锁。
  3. 生命周期随内核

常用函数:

//创建共享内存
int shmget(key_t key,size_t size,int shmlg);
//key_t key:共享内存名字
//size_t size:共享内存大小
//shmflg:权限标志,等同于创建文件时的权限标志
//返回值:成功返回非负整数,失败返回-1
//将共享内存端连接到进程地址空间
void shmat(int shmid,const void *shmaddr,int shmlg);
//int shmid:由shmget返回的共享内存标识
//const void *shmaddr:连接地址
//shmflg:权限标志,等同于创建文件时的权限标志
//返回值:成功返回一个指针指向共享内存第一个节点,失败返回-1
//用于控制共享内存
int shmctl(int shmid,int cmd,struct shmid_ds *buf);
//int shmid:由shmget返回的共享内存标识
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值