两级页表(单级页表存在的问题,两级页表的地址转换)

1.单级页表存在的问题

根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以正常运行了。
因此没有必要让整个页表都常驻内存。

1.问题1

页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。

解决方法:

  1. 可将长长的页表进行分组,使每个内存块刚好可以放入一个分组
  2. 每个页表项4B,每个页面可存放1K个页表项,因此每1K个连续的页表项为一组,每组刚好占一个内存块,再将各组离散地放到各个内存块中)
  3. 另外,要为离散分配的页表再建立一张页表,称为页目录表或称外层页表,或称顶层页表.

2.问题2

没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

解决方法:

  • 可以在需要访问页面时才把页面调入内存(虚拟存储技术)。

  • 可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存

  • 若想访问的页面不在内存中,则产生缺页中断(内中断),然后将目标页面从外存调入内存

    两级页表(单级页表存在的问题,两级页表的地址转换)_第1张图片

2.两级页表的原理、逻辑地址结构

两级页表(单级页表存在的问题,两级页表的地址转换)_第2张图片

3.实现地址变换

  1. 按照地址结构将逻辑地址拆分成三部分
  2. 从PCB中读出页目录表始址,根据一级页号查页目录表,找到下一级页表在内存中的存放位置
  3. 根据二级页号查表,找到最终想访问的内存块号
  4. 结合页内偏移量得到物理地址

1.例题

将逻辑地址(0000000000,0000000001,111111111111)转换为物理地址(用十进制表示)。

两级页表(单级页表存在的问题,两级页表的地址转换)_第3张图片

4.两级页表问题需要注意的几个细节

1.若采用多级页表机制,则各级页表的大小不能超过一个页面

两级页表(单级页表存在的问题,两级页表的地址转换)_第4张图片

  • 如果只分为两级页表,则一级页号占18位,也就是说页目录表中最多可能有 2 18 2^{18} 218个页表项,显然,一个页面是放不下这么多页表项的。
  • 若两级页表不够,可以分更多级.

在这里插入图片描述

2.两级页表的访存次数分析(假设没有快表机构)

  1. 第一次访存:访问内存中的页目录表
  2. 第二次访存:访问内存中的二级页表
  3. 第三次访存:访问目标内存单元

N级页表访问一个逻辑地址需要N+1次访存.

你可能感兴趣的:(操作系统,运维,服务器,linux,jvm)