【学习笔记】第三章——内存 II(分页存储、快表与局部性原理、两级页表)

一. 分页存储概念

  • 内存分成等大区域(页框),页框号从0开始
  • 进程也分成和页框等大的区域(页),页号也从0开始
  • 页框不能太大,可能产生过大内部碎片(进程的最后一个页面不一定撑满页框)
  • 进程页面 - 内存页框一一对应。
    在这里插入图片描述

二. 地址转换

  • 找逻辑地址对应页号
  • 找页号对应内存的起始地址①
  • 计算逻辑地址在页面内的偏移量②
  • 物理地址 = 页面起始① + 页内偏移量②
    在这里插入图片描述

1)为什么页面大小为2的次幂?

  • 方便计算
    在这里插入图片描述
  • 偏移量最大值 - 对应一个页面持有内存单元个数(k 位 - 2 k 2^k 2k个)
  • 页号 - 对应一个进程最多允许持有页面个数(m 位 - 2 m 2^m 2m个)

在这里插入图片描述

三. 页表

  • 记录每个页面在内存中的位置
  • 页表项 = 页号 + 块号(由块号获取内存地址)
    在这里插入图片描述

1)页表项长度、页号"隐含"

  • 因为页表项按序连续存于内存,且页号长度相同,因此页号无需明确表示。
  • 延申:理论上 3B 就够,但是为了方便页表的查询,常常会让一个页表项占有更多字节,使得每个页面恰好装得下整数个页表项(也就没有内存碎片,比如此处 4KB % 3B = 1B 的内存碎片,但是 4KB % 4B = 0B)
    在这里插入图片描述

四. 局部性原理与快表

  • 时间局部性:指令一段时间内可能多次执行(由于程序存在循环
  • 空间局部性:存储单元附近的存储单元可能被访问(由于很多数据在内存中连续存放
    在这里插入图片描述
  • 快表:高速缓冲寄存器,比内存块。用来存放当前访问的若干页表项,达到加速地址变换的效果。
  • 慢表:内存中的页表
    在这里插入图片描述
  • 快表使用:
    在这里插入图片描述
  • 快表:命中率高一次访问内存。满则置换
  • 慢表:两次访存
    在这里插入图片描述

五. 二级页表

1)单级页表存在的问题

  • 单级页表太大,又由局部性原理知道一段时间内只需访问几个页面即可,没必要让整个页表常驻内存
    在这里插入图片描述
  • 解决方法:对页表分组,分组与内存块等大。可以离散存放页表分组了,也因此,需要再给离散的页表建一个页表——顶层页表。
    在这里插入图片描述

2)两级页表

  • 32位、页 4KB、页表项 4B 的情况下,可知页表需要占用 2^10 = 1024 个页框。
  • 那么,我们可以使用离散的1024个页框,然后用一个顶级页表来记录这些页框的块号
    在这里插入图片描述
  • 也就可以推出:一级页号用 10B,二级页号用 10B(二级页表的排法)
    在这里插入图片描述
    在这里插入图片描述

3)如何解决单级页表的问题

  • 需要记录某一页表是否在内存
    在这里插入图片描述
  • 两级页表不够,就用更多级
  • 多级页表的访存次数 = N级页表用 N + 1 次(没有快表的情况)
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值