没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实现进程间通信的方法很多,比如:
管道(同一台机器上两个进程双向通信)
套接字(不同机器上的两个进程间的通信)
机制(同一机器上,许多进程相互通信) 有以下三个机制:
消息队列:
用于信息传递频繁且内容较少的进程间通信
信号量:
用于实现进程间同步通信
共享内存:
用于信息内容比较多的进程间通信
内核中实现 子系统的源码组织结构:
其中 组成第一种 机制消息队列, 组成信号量, 组
成共享内存机制。 将三种独立的机制结合起来,统一初始化,统一管理标识。
是一组系统调用,且每个 资源是一个 位的关键字(),和一个 的唯一标识
()。每个 资源都有一个 的数据结构记录了 关键字,创建者和所
有者的 , ,读写权限,! 为 标识符的当前序号信息。
创建机制的函数分别为 ()、()、 (),创建成功后都会返回一个
唯一的 标识,使用完成后可根据这个标识释放资源。
共享内存 ":
()创建一块共享内存
#()将已经存在的共享内存映射到进程地址空间
()取消该映射
()根据操作管理共享内存
int shmget(key_t key,int size,int shmg)
成功返回共享内存标示符,失败返回$;
唯一标识键值,有两种情况会创建新的共享内存%
# 值设为 &'"()。
* 值为 +,但是 ,# 为 &)"()
- 建立共享内存的长度
内存的分配以页为单位,- 为 ./+01 之间都会分配一页 /,页数的整数倍。
,#&)"())2)3
每创建好一块共享内存。都会用 去维护:
void *shmat(int shmid,const void *shmaddr,int shmg)
成功返回链接的地址,失败返回$;调用完成后,#456;
返回的内存标识
#
把 标识的内存连接到进程数据段,根据 # 值可分为:
#6+%内核从 .7 范围从高位到低位自动选择一块空闲的未被映射的内存,并返
回地址。
#86+, 未设置 9:&;,以 # 为连接地址
#6+,,# 设置了 9:&;,# 自动规整为 9:3"< 的整数倍。
,
设置 9:&; 同时可设置 9:&=;3> 标志位,改变读写权限,以只读方式绑定。
nt shmdt(const void *shmaddr)
返回值跟 # 相似。调用完成后,#4$6;
nt shmctl(int shmid, int cmd, struct shmid_ds *buf)
将要控制的操作
("(将 复制到缓冲区 *。
&: 标记共享内存已销毁,最后一个连接分离也即 #46+;时销毁。
IPC 机制中共享内存的工作流程
中系统创建共享内存的函数和函数之间的调用关系。
Ipc_i ni t
shm_i ni t Msg_i ni t Sem_i ni t
I pc_i ni t_i ds
I pc_i ni t_proc_i nterf
ace
Sysvi pc_shm_proc_sho
w
I pc_i ni t_proc_i nterfa
ce
Sysvi pc_shm_proc_show
I pc_rcu_al l oc
Rcu_use_vmal l oc
kmal l oc
kmal l oc
Create_proc_entry
kfree
Seq_pri ntf
在 里面有 函数:
初始化了三种 机制,其中 是初始化共享内存的。以下进入 函数详细
介绍。
1、先看的 shm_ids 结构体
里面包括了指向保存 资源的指针数组
是 ?类型。
存储资源的基本信息,包括 值,创建者、拥有者的 以及访问权限,当前唯
一标识的顺序编号 !。
其中 @ 是一个自旋锁,类型如下:
、跟踪到 函数
设置 结构体中的参数,开辟资源。
为 rcu 头结构和对象分配内存,返回对象的指针,分配失败返回 NULL。
剩余22页未读,继续阅读
资源评论
Agoni_xiao
- 粉丝: 44
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- python:利用matplotlib绘制直方图
- 基于matlab块匹配全景图像拼接系统代码12
- 基于matlab小波变换图像融合系统代码11
- 精雕3.5NC后置文件
- yolov8n-pose.pt 用 yolov8n-pose.onnx下载
- C++之STL的vector详解,包括初始化和各种函数:vector的初始化、数据的增删查改等
- stable-diffusion-webui-master
- openPLC-Editor C语言编程 在mp157 arm板上调用io等使用记录
- 无人机悬停时间计算软件.rar
- 主要讲解 mybatis中 实体层的属性与表的列不一致时如何处理? 可以采用将列重命名方法还可以采用resultMap 方式
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功