免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2535 | 回复: 4
打印 上一主题 下一主题

想深入理解进程的栈 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-06 15:52 |只看该作者 |倒序浏览
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1
在调查D进程的过程中,了解到上面那个链接中的测试程序把栈搞乱了,
小生自觉对其中的解释理解的不是很透彻
所以想深入理解进程的栈

不知道能看些什么资料或书能帮助我深入理解呢?

万分的感谢:)

论坛徽章:
0
2 [报告]
发表于 2011-12-07 20:04 |只看该作者
工作之余找到了些文章,看了一些,觉得受益匪浅。
分享顺便帮自己up一下,嘿嘿...

Anatomy of a Program in Memory:
http://duartes.org/gustavo/blog/ ... a-program-in-memory
这篇文章讲了内存布局,每个段都讲了
http://www.searchforum.org.cn/se ... s/Others/MemMan.htm
这里面的图补充了高地址的只读的命令行参数和环境变量

How the Kernel Manages Your Memory:
http://duartes.org/gustavo/blog/ ... manages-your-memory
这篇承接上文内存布局,讲了内核管理内存,task_struct中的mm_struct,链表vm_area_struct各描述每个段,接着是将了页表,重点分析了页表项的每个位的作用,然后页帧是物理内存管理的单元4KB在32bit系统上Win和Linux。最后举了一个简单的例子讲内核对缺页异常的处理

Page Cache, the Affair Between Memory and Files
http://duartes.org/gustavo/blog/ ... en-memory-and-files
这篇继续承接上文,讲文件和IO的内存映射,把它们缓存在page cache中

这些文章理解的还很有限,明天再回头继续看看,呵呵...

论坛徽章:
0
3 [报告]
发表于 2011-12-08 10:11 |只看该作者
Mark Mark Mark

楼主继续研究,回头整理个资料出来,如何?

论坛徽章:
0
4 [报告]
发表于 2011-12-09 15:16 |只看该作者
本帖最后由 J_O_H_N 于 2011-12-09 15:21 编辑
Mark Mark Mark

楼主继续研究,回头整理个资料出来,如何?
雨过白鹭洲 发表于 2011-12-08 10:11



    多谢鼓励!在下一定再接再厉^_^b
    希望大家多多指点迷津

    昨天来了个着急的事再加班,没赶上再看。刚刚告以段落,把上文提到的第三篇又看了一遍。
    这篇文章首先引入读写的文件需要解决的两个问题:
            其一,就是文件保存在磁盘上,读写速度和内存比起来相去甚远
            其二,各程序很有可能读取相同文件的内容,比方说库文件。如果程序各自为政,重复内容浪费内存空间。

    然后引入页缓存解决这两个问题,并立刻举了个例子来解释页缓存在一个读操作中缓存未缓存数据
            进程向内核发送一个读操作,内核查找缓存页是否已缓存,未命中就开辟页帧并读取磁盘数据,最后内核把请求的内容拷贝到用户空间
            页帧在前文提及,是管理物理内存的单位,一般在32位系统上是4kb一个页帧

     普通文件的IO都是要查找页缓存的,linux把文件视为一堆有序的页帧,每次从磁盘也是以页帧为单位读取

     然后递进,指出页缓存引入的一个问题,就是带来重复拷贝,浪费内存和CPU的时间片和缓存。
     引入解决方法,即文件映射,内核将页缓存直接映射到进程的虚拟地址空间。这种方法在Windows和Linux中对效率提升都非常可观

     如果页缓存没有达到上限,就会使之驻留在内存中,以充分利用内存空间。

      然后开始分析写操作。
              写操作直接写脏页缓存,但不会立即触发脏数据写回磁盘。所以write不必被block而read需要等待数据。重要的文件需要sync()强行立即写回,以防程序当掉丢失数据。linux中文件映射做了read ahead

      私有和共享的文件映射:
              一个例子解释PTE和写时拷贝机制如何支持共享的文件映射的:
                      进程1写脏一个页帧,PTE为只读,触发缺页异常,拷贝原页帧到新的页帧,新页帧PTE标记为读写。
                      ps: 这块儿还没有看的太清晰,他讲也有限了。

     最后,动态链接就是文件映射到进程中的

     以上是读完之后自己的总结,希望大家多多帮助^_^b

论坛徽章:
0
5 [报告]
发表于 2011-12-09 21:40 |只看该作者
一切皆缓存,代码即数据。

强烈希望楼主能好好整理一个全面的pdf出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP