基础知识

内存技术 #

分段机制 #

分段机制可用于实现多种系统设计。这些设计范围从使用分段机制的最小功能来保护程序的平坦模型,到使用分段机制创建一个可同时可靠地运行多个程序(或任务)的具有稳固操作环境的多段模型。多段模型能够利用分段机制全部功能提供由硬件增强的代码、数据结构、程序和任务的保护措施。通常,每个程序(或任务)都使用自己的段描述符表以及自己的段。对程序来说段能够完全是私有的,或者是程序之间共享的。对所有段以及系统上运行程序各自执行环境的访问都由硬件控制。

80386虚拟地址空间中的虚拟地址(逻辑地址)由一个段部分和一个偏移部分构成。段是虚拟地址到线性地址转换机制的基础。每个段由三个参数定义:

  1. 段基地址(Base address),指定段在线性地址空间中的开始地址。基地址是线性地址,对应于段中偏移0处。
  2. 段限长(limit),是虚拟地址空间中段内最大可用偏移位置。它定义了段的长度。
  3. 段属性(Attributes),指定段的特性。例如该段是否可读、可写或可作为一个程序执行;段的特权级等。

image

Linux 系统主要采用了分页管理,但是由于 Intel 处理器的发展史,Linux 系统无法避免分段管理。于是 Linux 就把所有段的基地址设为 0,也就意味着所有程序的地址空间都是线性地址空间(虚拟地址),相当于屏蔽了 CPU 逻辑地址的概念,所以段只被用于访问控制和内存保护。

image

分页机制 #

其中CR3寄存器指定页目录表的基地址。线性地址的高10位用于索引这个页目录表,以获得指向相关第二级页表的指针。线性地址中间10位用于索引二级页表,以获得物理地址的高20位。线性地址的低12位直接作为物理地址低12位,从而组成一个完整的32位物理地址。

image

comments powered by Disqus