Bootstrap

80386虚模式内存管理(2)

页转换

     这种转换主要是把线性地址(经过段转换过的)转换成物理地址。页转换是操作系统实现虚拟内存的基础,CPU也可以在也转换基础上实现页访问保护,增强系统的稳定性。

    页转换是可选的,只有当CR0寄存器的PG为设为1的时候,CPU才进行页转换。一般PG位在系统初始化的时候由操作系统来设置。

1、页面

    页面大小固定为4K(2^12)字节,必须为连续的物理内存。

2、线性地址

    页转换过程中需要用查询页面目录表和页面表。32位线性地址包括两个表的索引。线性地址如下:

图1 线性地址的格式

    线性地址的22-31位表示页面目录表中索引值,通过该索引可以查找该目录对应的页面表的物理地址。

   线性地址的12-21位表示页面表的索引值,通过页面目录表的查询已经可以查询到该目录对应页面表物理地址,在此基础上用该索引值可以查询到页面的物理地址。

   线性地址的0-11位为页内偏移地址,在页的物理地址基础上,加上该偏移地址即可得到所要访问的物理地址。

   综上,页转换可以用下图进行宏观描述:

图2 页转换

3、页面目录表

     页面目录表存在于内存中,其物理地址保存在CR3(或者称为PDBR)中,如果启用分页转换,则系统初始化的时候CR3必须进行初始化。CR3可以用MOV进行显示的初始化和在任务切换的时候进行隐式的初始化。

     当任务切换的时候,必须要保证先把目标任务页目录表物理地址加载到CR3中,然后才能切换到该任务,并执行他。

4、页面目录表项和页面表项

    下图展示了页面目录表项和页面表项:

图3 页面目录表项和页面表项

1)页表基地址

     页面目录表项的12-31位表示,该目录对应的页表基地址(一个目录对应1k个页表,这里的基地址为第一个页表的物理地址)。注意CPU的这个设计要求页表必须要4K对齐,否则20位无法表示页表的基地址。

    页表项的基地址表示该页的起始的物理地址。

2)可用位(Avail)

    对于系统程序员可用,Intel不对此进行定义。

3)提交位(P)

   表示改页面或者该目录是否已经提交到物理内存,如果已经提交,则为1,没有提交则为0。

   其他的位都是和访问控制有关的位,主要用来提供页面访问控制,增强系统稳定性。

总结:

    80386内存转换(开启页转换),可以用下图表示:

图4 80386内存转换

 

参考资料:

Intel 80386 programmer’s refference manual

IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide

;