• 存储器-页式存储


    页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的“页面”,“页面”大小和“块”的大小相同。每个页面可以离散地放入不同的主存块中。

     虚拟地址VS实地址

    逻辑地址(虚地址):程序员视角看到的地址。

    物理地址(实地址):实际在主存中的地址。

     程序员视角:整个程序共4KB=2^{10}B,地址范围:000000000000~111111111111

    假设变量x的逻辑地址:001000000011

    假设变量y的逻辑地址:110000001010

    取变量x至ACC寄存器:

    机器指令:000001001000000011(操作码+地址码)(使用逻辑地址)

    如何判断变量x和y属于哪个分页:

    可以将逻辑地址分为两部分(一部分是逻辑页号,一部分是页内地址)

    在这个例子中,由于分为4个页,所以只需要取前两位作为逻辑页号,剩余10位作为页内地址

     主存的物理地址共22位分为(主存块号12位,块内地址10位)

    由第一张图的存储情况可知,变量x的物理地址:0000000000101000000011

                                                  变量y的物理地址: 11111111111110000001010

    页表:逻辑页号-主存块号

    操作系统会创建一个页面(一个数据结构)在主存中。页表的作用:记录了每个逻辑页面存放在哪个主存块中

    页表中的每一项记录着一对逻辑页号和主存块号的相对位置

     

     

     CPU执行的机器指令中,使用的是“逻辑地址”,因此需要通过“页表”将逻辑地址转为物理地址 

    地址变换过程

    第一步:先将逻辑地址拆分为逻辑页号和页内地址,页内地址

    第二步:CPU中的页表基址寄存器会指明了页表在主存中的存放地址,比如该页表是从主存号1058开始存储的,如果每一行的页表项占4B,那么就意味着从1058号开始往后取4B数据就是第一个页表项,依次。

    第三步:查询页表,根据页表基地址和逻辑页号找到逻辑页面存放的主存块号。

    第四步:用主存块号凭借页内地址得到最终的物理地址

    第五步:根据物理地址访存主存和Cache

     

     由于程序具有局部性,近期访问过的页表项可能会被再次访问,那么就可以将近期访问过的页表项放入更高速的存储器,可加快地址变换的速度,基于这个思想引入下面的地址变换过程(增加TLB)

    地址变换过程(增加TLB)

    快表(TLB):类似于Cache的一个硬件结构,查找速度非常快

    注意区别:

    1. 作用不同:快表的作用是为了加快辅存向主存的地址映射速度,Cache作用是用于解决CPU与主存速度不匹配问题。
    2. 存储的内容不同:快表中存储的是页表项的副本,Cache中存储的是主存块中的副本
    3. 电路设计不同:快表是一种“相联存储器”,可以按内容寻访,Cache需要按物理地址寻访 

    逻辑地址=逻辑页号+页内地址(虚地址=虚页号+页内地址)

    物理地址=主存块号+页内地址(实地址=实页号+页内地址) 

  • 相关阅读:
    学习黑马程序员JavaScript总结
    【Selenium4自动化测试(1)】Selenium4简介
    【数据分析】2022年北京交通大学计算机学院学术型博士录取数据分析
    Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀
    基于JavaWeb的微博系统设计与实现
    UVA-1374 旋转游戏 题解答案代码 算法竞赛入门经典第二版
    Revit二次开发——HelloRevitApp
    通过Git Bash将本地文件上传到本地github
    HDLbits exercises 6 (MULTIPLEXERS节选题)
    Flink 环境对象
  • 原文地址:https://blog.csdn.net/m0_59860403/article/details/127712887