Segment/Section/Virtual Memory/Page之间的区别

对于 Segment, Section, Virtual Memory, Page 这些词我们肯定不会陌生. 但在阅读一些书籍和文章的时候, 不知是那些作者的缘故还是自己的原因, 我们不能正确区分他们之间的区别. 我不得不承认, 真要 100% 弄清楚这些概念并不是一件容易的事情, 因为它们涉及到很多不同方面的内容 (例如编译/连接, 汇编, 操作系统等) , 同时这些内容本身就不太容易掌握. 但是我想写这篇文章, 一方面是为了总结我对这些内容的分析和理解, 另一方面在以后的学习中我可以对这篇文件进行修改和完善, 最终可以很深入的理解这些内容. 

接触过 PE 文件格式的都知道, 在 PE 文件中, 文件的不同内容被分成不同的部分, 一个部分对应一个方面的内容, 这里的部分被称为 "Section". 这样的划分既是"物理"的, 也是"逻辑"的: 不同的内容被划分成不同的 section 并给予一个有提示性意义的 section name, 通过这个名字我们就可以大致猜测到这部分内容是什么; 当可执行文件被操作系统的 Loader 装载到内存中的时候, 可执行文件在内存的镜像 (image) 和 PE 文件的物理布局基本是相同的. 

接下来让我们把讨论的重点 zoom in 到可执行文件在内存中的镜像. 和 PE 文件一样, 内存镜像也被划分成不同的部分, 划分的依据和 PE 文件中划分 section 的依据一致. 这时候这些被划分的部分被称为 segment. 这里的 segment 很容易将我们把它和内存的"分段"式管理联系起来. 在老的 CPU 体系结构中, 内存是以"段 (segment) "的形式管理的. 在新的 CPU 体系结构中, 内存是以虚拟内存的形式管理的. 在以虚拟内存管理占主流的今天仍然使用 segment, 我觉得, 无非是为了兼容老的 CPU 型号, 同时也是照顾那些从老的 CPU 体系结构一直走过来的程序员. 所以我们需要注意区分这里的 segment 和内存"分段"管理中的 segment. 

在一个以虚拟内存方式管理内存的系统中 (现在大部分主流的系统都是以这种方式管理内存的), 一个可执行文件的内存镜像被映射到一个进程的部分虚拟内存空间内 (注: 另外一部分的虚拟内存空间被操作系统占用). 虚拟内存本身又被划分成"页 (page) ", 页是虚拟内中最小的内存单元. 

历史记录
05/06/2007   v1.0
原文的第一版


http://blog.csdn.net/houdy/archive/2007/05/06/1598085.aspx

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值