操作系统模型 |
内存的分段模型故事还要从内存分段模型的产生说起…… 产生最初,在16位架构处理器上,由于一个寄存器只有16位,所以只能最高支持 8086处理器通过引入分段机制,很好地解决了问题。该处理器拥有16位数据总线和20位地址总线,为了支持20位地址总线所能支持的最高1MB内存空间,处理器使用两个寄存器来表达一个地址——段基址寄存器和段内偏移寄存器。在地址处理单元中,接收到的段基址将被左移4位,再与段内偏移地址相加,最终得到一个20位的地址,供地址总线进行寻址。 额外优势分段机制通过非常简单的操作,可以方便地实现程序的浮动与重定位。 在编写分段程序时,程序的每个段按照如下方法组织:
在程序加载后,可以得到程序各段在内存中的起始地址。将得到的段基址赋值给段寄存器,或在保护模式下构造段描述符,并将对应段选择子赋值给段寄存器,就可以实现程序的重定位。 内存分页机制引入进入32位(x86)架构处理器时代,引入了处理器的保护模式,程序仍通过分段机制访问内存,在保护模式中,段描述符定义了段的各个属性,如可读可执行,可读/写等,加强了段内存的安全性。但在程序较多或程序段碎片过多时,或是某段内存数据因为不常使用被换出,想换入却找不到合适的大小时,就暴露出仅使用分段模式的不足。 为了解决线性地址连续而对应物理地址不一定连续的问题,操作系统引入了内存分页机制。通过页表构建线性地址与物理地址的映射关系,让不连续的物理内存空间得到了很好的使用。 特点
分段机制的弱化分段机制由数据总线向更宽地址总线的扩展而引入,带来了便捷的程序重定位优势,又通过段描述符增强其访问内存的安全性。然而,这些优势在日后处理器架构的变革和其他机制的引进中逐渐消失,分段机制也随之而式微…… 处理器架构革新进入x86架构时代,32位的数据总线和寄存器大小已经能够支持最高 分页机制的引入通过引入分页机制,程序使用的线性地址可以被映射到物理地址,通过处理器完整总线的支持,线性地址可以访问所有内存空间。 为了简化内存管理模型,分页模型中限制了分段机制的作用,将一个进程的虚拟地址限制在4GB,也就是一个段的最大大小。 另外,分页也可以进行页属性的管理,同样可以提升内存安全性。 程序加载过程中,先进行分段,再将每个段进行分页映射。这样其实是没有必要的。一个程序最多能够使用4GB的内存空间,而一个段的最大空间也是4GB,所以可以省略分段的过程,只用分页进行一次映射就可以完成装载。这就可以引入内存平坦模型的概念。 平坦模型基础
基本特点
原文地址:https://www.csdn.net/tags/MtTacg0sODE1Mi1ibG9n.html 【版权与免责声明】转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章,如 果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,烦请提供相关信息发邮件至387020@qq.com,我们将及时沟通与处理。 |