内存分页

本文为本人总结他人博客得来

分段

分段本是由于8086是16位总线,为寻址20位内存地址而增加的。在32位操作系统中,分段依然有用。

1)段描述符:描述该段的安全属性,为一个64位长的值。在实地址模式中,只需要使用段寄存器(CS,DS,SS和ES)就可以了,每个段寄存器都是16位的,对应于地址总线中的高16位。每条“访问”指令中的“内部地址”都是16位的,但是在送上地址总线之前都在CPU内部自动地与某个段寄存器中的内容相加,形成一个20位的实际地址。这样,就实现了从16位内部地址到20位实际地址的转换。这个方法与“段式内存管理”(现代意义的操作系统使用)相似,但并不完全一样,主要是没有地址空间的保护机制(后来出现的保护模式)。在保护模式中,在内存中存放“地址端描述结构”,即段描述符(8个字节),在段描述符中有关于段的基地址与段的长度的说明,也有一些访问权限的控制。通过段寄存器可以找到对应的段描述符。

2) 段描述符表:表中存放段描述符。段描述符表可以看作一个数组,存放的是各个段描述符。

3) 段寄存器:存放段描述符表的索引值,用于段选择子。段寄存器中存放的是段描述符表(数组)的索引,通过段寄存器中的值,找到段描述表中存放的段描述符。

4) GDTR(全局性的段描述表寄存器,80386才有): 该寄存器指向全局描述符表(gdt),gdt中保存操作系统使用的代码段,堆栈段等段描述符,及各个任务的ldt,gdt的内容不随任务的切换而切换。48位。

5) LDTR(局部性的段描述表寄存器,80386才有): 该寄存器指向局部描述符表(ldt),ldt中保存当前任务所使用的代码段,数据段,堆栈段等的段描述符。ldt随任务的切换而切换。16位。

6) 所有寄存器中只有cr3(保存当前也目录表地址,目录表存放在内存中,实现线性地址到物理地址的转换)中地址为物理地址,其他都为线性地址。

 

分页

1) 如果没有分页机制,则由分段寻址方式计算出的地址即为物理地址。

2) 分页机制为程序提供了4G的连续地址空间。

3) 每个页占据4k,则4G的地址空间需要4G/4K = 1M个页。每个页需要4个字节来描述其物理基地址。这样则需要4M的地址空间存放页信息。

4) 操作系统将每1024个页分成一组,组成一个页表,页表项中保存该页的物理基地址。则最多有1024个页表。

5) 目录表中有1024个项,每个项占用4个字节,项的内容为页表的地址。

 

线性地址到物理地址的映射过程:

1)从CR3寄存器取得页目录的基地址

2)以线性地址中的dir位段(前10位)为下标,在目录中取得相应页表的基地址

3)以线性地址中的page位段(中间10位)为下标,在所得到的页面表中取得相应的页描述项

4)将页描述项中给出的页基地址与线性地址中的offset位段(后12位)相加得到物理地址

 

在页面映射过程中,CPU要访问内存三次。第一次是页目录,第二次是页表,第三次才是真正的目标。为了缩短查找时间,可以使用高速缓存(cache),有了高速缓存,虽然在第一次用到具体的页面目录和页面表时要到内存中区读取,但一旦装入了高速缓存以后,一般可以在高速缓存中找到,而不需要再到内存中去读取了。另一方面,这整个过程是由硬件实现的,所以速度很快。

 

分页和分段的区别:

1)页是信息的物理单位;段是信息的逻辑单位。

2)页的大小固定且由系统确定;段的长度不固定(取决于用户所编写的程序,通常由编译程序在对源程序编译时,根据信息的性质来划分)。

3)分页的作业地址空间是一维的,只需一个记忆符,就可表示一个地址;分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

4)分段物理空间不连续,但段内是连续的;分页物理空间不连续。



 因为4GB的虚拟内存空间对应着1048576个4KB页, 可以随机的抽取这些页, 将它们组织在1024个页表内, 每个页表可以容纳1024个页. 页表内的每个项目叫做页表项, 占4字节, 存放的是页的物理地址, 故每个页表的大小是4KB, 正好是一个标准页的长度. 注意, 页在页表内的分布是随机的, 哪个页位于哪个页表中, 这是没有规律的.


内存分页_第1张图片



            每个任务都有自己的页目录和页表. 如下图所示, 在处理器中有个控制寄存器CR3, 存放着当前任务页目录的物理地址, 故又叫做页目录基址寄存器(Page Directory Base Register: PDBR). 每个任务都有自己的TSS, 其中就包括了CR3寄存器域, 存放了任务自己的页目录物理地址. 当任务切换时, 处理器切换到新任务开始执行, 而CR3寄存器的内容也被更新, 以指向新任务的页目录位置. 相应的, 页目录又指向一个个的页表, 这就使得每个任务都只在自己的地址空间内运行. 从下图可以看出, 页目录和页表也是普通的页, 混迹于全部的物理页中. 它们和普通页的不同支持仅仅在于功能不一样. 当任务撤销之后, 它们和任务所占用的普通页一样会被回收, 并分配给其他任务.


内存分页_第2张图片


你可能感兴趣的:(内存分页)