【笔记】共享内存
来源:互联网 发布:java命令行打包jar 编辑:程序博客网 时间:2024/06/05 15:17
Linux内存管理机制中,内核对内存的管理是以页(page)为单位的,一般一个page大小是4k。而程序本身的虚拟地址空间是线性的,所以内核管理了进程从虚拟地址空间到起对应的页的映射。创建共享内存空间后,内核将不同进程虚拟地址的映射到同一个页面:所以在不同进程中,对共享内存所在的内存地址的访问最终都被映射到同一页面。图三显示了内存共享的映射机制。
图三内存共享的映射机制
内存共享的使用过程分为:创建—>连接—>使用—>分离—>销毁。
(1)创建
segment_id=shmget(shm_key, size,IPC_CREAT|IPC_EXCL|S_IRUSR|S_IWUSER|0666);
shmget根据shm_key创建一个大小为size的共享内存空间,返回创建共享内存的ID。
(2)连接
shared_memory = (char*) shmat(segment_id,NULL, 0);
上述函数返回映射到共享内存的地址指针。这样进程就能像访问一块普通的内存缓冲那样访问共享内存。其中后两个参数传入0,表示采用默认的连接方式。
(3)使用
shmctl( shmid, IPC_STAT, &buf) ;
得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中
shmctl( shmid, IPC_SET, &buf) ;
改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存
(4)分离
shmdt(shared_memory);
将shared_memory与共享内存分离,这样用户就不能通过shared_memory来操作共享内存了。
(5)销毁
shmctl(segment_id,IPC_RMID,0);
删除共享内存,彻底不可用,释放空间。
- 【笔记】共享内存
- Android匿名共享内存笔记
- linux笔记之共享内存
- 【面经笔记】内存映射、共享内存
- Unix System V共享内存学习笔记(共享内存、信号量)
- 共享内存的实现---Linux内核笔记
- 【共享内存】共享内存
- CUDA学习笔记(6) 共享内存与全局内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 共享内存
- 纠结
- 有用的十大算法
- STC的keil安装补丁说明
- fwrite与fprintf区别、printf与fprintf区别
- 常用语句
- 【笔记】共享内存
- mybatis解决oracle数据库存储长字符串问题
- struts2源码分析(一)(初始化)
- 尽量使用初始化而不要在构造函数里赋值
- linux下gdb使用技术
- JSP学习笔记3-getRequestDispatcher()与sendRedirect()的区别
- 《苹果的产品设计之道》迷你书
- 犬儒主義
- 【小明的调查作业 48】