首页
社区
课程
招聘
[原创]Linux0.11共享内存机制
发表于: 2019-1-14 20:17 7362

[原创]Linux0.11共享内存机制

2019-1-14 20:17
7362

Linux操作系统设计的精妙之处简直让人赞叹不已,不得不佩服Linus这个天才!

共享内存也是一种节约内存使用、减小系统硬件开销的机制,他基于写时复制

设想这样一个场景:一个可执行文件x.bin被加载到内存中以进程A的形式首次运行,由于某些原因x.bin只是部分被加载,剩下的部分还在硬盘里。当执行到逻辑地址address时由于缺页,引发缺页异常,剩下的部分从硬盘被加载到内存中,进程A得以继续运行。在A还没退出时,shell再次执行了x.bin,此时x.bin以进程B的形式运行,同样还是运行到逻辑地址address发生了缺页异常,这次异常处理函数首先发现竟然还有A进程也在运行x.bin,于是去查找A的进程空间里面有没有B缺少的页面,结果找到了,于是直接将这一页映射到B的页表项中,B又可以继续运行。

以上就是共享内存的过程,可以看到共享内存发生在缺页的时候。


                                                            mm/memory.c

如果进程中还未加载任何可执行文件或者缺页发生在可执行文件数据段以外(这里数据段指的是可执行文件中的数据段,是静态的,包括了代码段和数据段)比如用户堆栈,则重新申请一块空闲页面并映射到线性地址address处。

如果是在数据段内发生了缺页则进行内存共享。


如果共享内存失败则申请一个空闲页面,并把所缺页面从磁盘中读入刚申请的页面,把新页面映射到address处然后继续执行。这就是整个的缺页异常处理流程。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
写的哼不错,期待后续内容,建议也分析下 linux 4.7 以后内核的,与时俱进嘛~
2019-1-17 19:45
0
雪    币: 6313
活跃值: (3212)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
3
必须的,更新完0.11分析高版本内核
2019-1-17 21:15
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
4
 顶一下
2019-1-23 16:00
0
雪    币: 1656
活跃值: (2676)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
2019-1-23 16:06
0
雪    币: 7379
活跃值: (4086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好好研读学习学习
2023-2-21 23:51
0
游客
登录 | 注册 方可回帖
返回
//