现在的位置: 首页 > 综合 > 正文

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

2013年05月20日 ⁄ 综合 ⁄ 共 947字 ⁄ 字号 评论关闭
注:对于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
原文的第一版

抱歉!评论已关闭.