• 实现地址转换的硬件机构


    一、基本地址变换机构
    1.硬件:
    设置一个页表寄存器,存放页表在内存中的起始地址与页表长度。
    2.执行过程:
    进程未执行时,页表起始地址和长度存放在进程控制块(PCB)中;进程被调度时,OS内核会将其放入页表寄存器中。
    3.具体实现:
    有两次访问内存-第一次查页表(页号是否合法),第二次-访问目标内存单元(访问物理内存对应的内存单元)
    在这里插入图片描述

    二、具有快表的地址变换机构
    1.相关概念
    快表-联想寄存器(TLB),一种访问速度比内存快很多的高速缓存,存放最近访问页表项的副本,可加速地址变换。
    慢表-相对TLB,内存中的页表
    TLB-只存储页表项副本,Cache-会存储各种数据的副本
    在这里插入图片描述

    2.地址变换
    由逻辑地址得到页号与页内偏移量,将页号与快表内的页号进行比较。
    若命中(快表中有副本),只需一次直接访问内存即可。
    若未命中(快表中无副本),需要访问内存中页表,通过基本地址变换得到物理地址,需要两次访存,相当于基本地址变换
    要对快表进行更新,存入快表,实现快表与慢表的内容 同步
    在这里插入图片描述

    3.局部性原理
    时间局部性-指令被多次访问执行(循环)
    空间局部性-多次访某些存储单元(数据在内存中连续存放)
    频繁查询某些页表项,引入快表。
    三、两级页表
    1.目的
    解决单级页表必须要连续存放所有页表的问题
    2.原理
    解决大页表连续存放问题:
    将整个页表项拆成多个小页表(二级页表),新生成一个总页表(一级页表)记录小页表的页号与块号
    逻辑地址=一级页号+二级页号+页内偏移量
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    解决整个页表常驻内存问题:
    采用虚拟存储技术,需要访问页面时才调入内存。页表项中增加一个标志位,标记是否调入内存。若访问页面不在内存中,产生缺页中断(内中断),将目标页面从外存调入内存。
    3.地址变换
    在这里插入图片描述

    4.注意事项
    采用多级页表机制,各级页表大小不能超过一个页面。
    在没有快表机构下,两级页表的访存次数分析:
    第一次访存-访问内存中的页目录表
    第二次访存-访问内存中的二级页表
    第三次访存-访问目标内存单元

  • 相关阅读:
    mysql运行报错:
    互联网医院|互联网医院建设三级等保不可缺
    电机控制、运动控制、过程控制三者关系
    代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
    FreeRTOS移植-教你修改portable(S3C2440、ARM9、gcc)
    【 C++ 】智能指针
    streamlit_echarts的简单理解
    Python3 元组、列表、字典、集合小结
    Mybatis之动态sql、模糊查询、查询返回结果集的处理、分页查询与特殊字符处理
    HOJ排队打水F601题解
  • 原文地址:https://blog.csdn.net/2301_76371717/article/details/134021622