栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

正文9:共享内存区和posix共享内存介绍(10/9)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正文9:共享内存区和posix共享内存介绍(10/9)

文章目录
    • 1.posix共享内存和System V共享内存的区别
    • 2.共享内存区
      • 1)mmapmunmap和msync函数
        • mmap函数
      • 2)在内存映射文件中给计数器持续加1(通过创建文件,这种原始方法让父子进程共享计数器)
      • 3)4.4BSD提供匿名内存映射(彻底避免了文件的创建和打开)
      • 4)SVR4 /dev/zero内存映射(SVR4提供/dev/zero设备文件,我们open它之后可在mmap调用中使用得到文件描述符)
      • 5)访问内存映射的对象
      • 6)小结
    • 3.Posix共享内存区(这里开始,共享内存的概念扩展到无亲缘关系进程间共享的内存区)
      • 1)shm_open和shm_unlink函数
      • 2)ftruncate和fstat函数
      • 3)简单的程序
      • 4)给一个共享的计数器持续加1
      • 5)向一个服务器发送消息
      • 6)小结

前倾提要:文章内容来自进程间通信

1.posix共享内存和System V共享内存的区别

System V总结

区别:

posix共享内存区对象的大小可在任何时间通过调用ftruncate修改,而System V共享内存对象的大小是在调用shmget时固定下来的,静态的

2.共享内存区 1)mmapmunmap和msync函数 mmap函数
  • 作用:

人话:把一个文件或一个Posix共享内存区对象映射到调用进程的地址空间
非人话:
①使用普通文件以提供内存映射I/O
②使用特殊文件以提供匿名内存映射
③使用shm_open以提供无亲缘关系进程间的Posix共享内存区
这些非人话,我没看过前面的进程间通信章节,所以我不懂

2)在内存映射文件中给计数器持续加1(通过创建文件,这种原始方法让父子进程共享计数器) 3)4.4BSD提供匿名内存映射(彻底避免了文件的创建和打开) 4)SVR4 /dev/zero内存映射(SVR4提供/dev/zero设备文件,我们open它之后可在mmap调用中使用得到文件描述符) 5)访问内存映射的对象 6)小结

①mmap是有亲缘关系的进程间共享内存的一种方法,一旦内存映射了一个文件,就不能再使用read、write和lseek来访问该文件,而只是存储已由mmap映射到该文件的内存位置
②如果设置共享内存区的目的是为了让父子进程间共享,那么通过匿名内存映射可简化其步骤,这样就不需要创建一个待映射的普通文件
③这里讨论mmap的理由:
-1)文件的内存映射是一种很有用的技巧
-2)还因为Posix共享内存区也使用mmap
④补充:posix还定义了处理内存管理的4个额外函数
mlockall会调用进程的整个内存空间常驻内存
munlockall则撤销这种锁定
mlock函数会调用进程地址空间的某个指定范围常驻内存,该函数的参数指定了这个范围的起始地址以及从该地址算起的字节数
munlock则撤销某个指定内存区的锁定

3.Posix共享内存区(这里开始,共享内存的概念扩展到无亲缘关系进程间共享的内存区) 1)shm_open和shm_unlink函数 2)ftruncate和fstat函数 3)简单的程序 4)给一个共享的计数器持续加1 5)向一个服务器发送消息 6)小结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号