用分段方法来分配和管理虚拟存储器。把任务的地址空间分成若干段,而每一段有自己的段名和段大小。任务所使用的每一个地址空间都抽象为段基址:段偏移的格式,极大的方便了程序的编写和调试。
3、分页机制与线性地址(linear address)
线性地址(linear address)或也叫虚拟地址(virtual address),跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。
用分页方法来分配和管理实存。即把整个主存分成大小相等的存储块,可装入作业的任何一页。这样分配内存时,操作系统以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
“页”,我们称之为物理页,或者是页框、页桢的。是分页单元把所有的物理内存也划分为固定长度的管理单位,它的长度一般与内存页是一一对应的。
1、分页单元中,页目录是唯一的,它的地址放在CPU的cr3寄存器中,是进行地址转换的开始点。万里长征就从此长始了。
2、每一个活动的进程,因为都有其独立的对应的虚似内存(页目录也是唯一的),那么它也对应了一个独立的页目录地址。——运行一个进程,需要将它的页目录地址放到cr3寄存器中,将别个的保存下来。
3、每一个32位的线性地址被划分为三部份,面目录索引(10位):页表索引(10位):偏移(12位)
依据以下步骤进行转换:
1、从cr3中取出进程的页目录地址(操作系统负责在调度进程的时候,把这个地址装入对应寄存器);
2、根据线性地址前十位,在数组中,找到对应的索引项,因为引入了二级管理模式,页目录中的项,不再是页的地址,而是一个页表的地址。(又引入了一个数组),页的地址被放到页表中去了。
3、根据线性地址的中间十位,在页表(也是数组)中找到页的起始地址;
4、将页的起始地址与线性地址中最后12位相加,得到最终我们想要的葫芦;
4、地址空间和地址转换
虚拟存储器由大小可变的存储块(段)构成。实模式下直接由段基址:段偏移来得到虚拟地址。而保护模式下,CPU采用称为段描述符的数据来描述段的地址,大小和属性信息以及使用情况。虚拟存储器的地址(逻辑地址)由指示描述符的段选择子和段内偏移两部分构成,这样的地址合成为虚拟地址空间。
显然,只有在物理存储器的程序才能够被执行,也只有物理存储器中的数据才可以被访问。因此,虚拟地址空间必须被映射到物理地址空间,二维的虚拟必须被转换成一维的物理地址。而由于物理地址空间远小于虚拟地址空间。所以只有虚拟地址空间的部分可以映射到物理地址空间。由于物理存储器的大小远小于物理地址的空间,所以只有上述部分中的部分才能真正映射到物理存储器。
每一个任务都有一个虚拟地址空间。为了避免多个并行任务的多个虚拟地址空间直接映射到同一物理地址空间,采用线性地址空间来隔离虚拟地址空间和物理地址空间。
线性地址空间由一维的线性地址构成,线性地址空间和物理地址空间对等。
因此将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址,CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。
通过描述符表和描述符,分段管理机制实现了虚拟地址到线性地址的映射。完成了把二维的虚拟地址转换为一维的线性地址。这一步总是存在的。
分页管理机制把线性地址空间和物理地址空间分别划分为大小相同的块,这样的块称为页。通过在线性地址空间的页和物理地址空间的页之间建立的映射表,分页管理机制实现了线性地址空间到物理地址空间的映射,实现线性地址到物理地址的转换。分页管理机制是可选的,在不采用分页管理机制时,线性地址空间就直接等同于物理地址空间,线性地址直接等于物理地址。
分段管理机制所使用的可变大小的块,使分段管理机制比较适宜处理复杂系统的逻辑分段。存储块的大小可以根据适当的逻辑含义进行定义,而不用考虑可大小的页所强加的人为限制。每个段可作为独立的单位进行处理,以简化段的保护和共享。分页机制所使用的固定大小的块最适合管理物理存储器。无论是管理内存还是外存都同样有效,分页管理机制能够有效的支持虚拟存储器(虚拟内存)。