zoukankan      html  css  js  c++  java
  • 计算机组成原理3.7虚拟存储器

    3.7.1虚拟存储器概念

    3.7.2页式存储器

    主存和Cache之间是分块映射存储,同样,利用局部性原理,也可以将主存和辅存之间进行分块映射存储。
    举个粒子,假如现在使用微信文字聊天,该部分程序占用大小了4KB的空间,那么可以分为大小位1KB的四块,分别映射存储到主存中。如下图,在这里插入图片描述
    分页式存储,在这个问题中就是把程序进程逻辑上大小相等的四块页面,每个页面大小与主存块大小相等,可以离散的存储到主存块中。
    那么,4KB的程序被拆分成四块存储到主存后,要如何执行该程序呢?这个问题留到3.7.3.3部分来回答。

    3.7.3页式虚拟存储器

    3.7.3.1页表

    虚拟存储,如上文提到的微信文字聊天,假设微信程序大小1GB,主存大小只有512MB,在文字聊天时候不需要把全部的微信程序相关数据调入到主存,只调入需要的4KB,剩余的空间可以继续调用其他程序进程,512MB大小的主存可以运行许多个1GB的程序,这就是虚拟存储。
    关于分页式虚拟存储,依然借用学习讲义里的图片,在这里插入图片描述
    逻辑页号:记录程序数据在逻辑地址的哪一块地址页中。
    主存块号:记录程序数据在主存储器的哪一块主存中,与逻辑页号有映射关系。
    外存块号:记录程序数据在辅存的哪一块。
    有效位:初始化位0,记录某一块程序数据所在的逻辑页面是否被调用到主存中,若是为1,若否为0。
    访问位:初始化为0,记录某块程序数据被访问的次数,用访问位帮助实现页面替换,需要替换时优先淘汰访问位记录数较小的。
    脏位:初始化为0,发生数据修改时变为1。

    举个粒子,假设要访问逻辑页号为1的数据,则从页表中找到对应的对应逻辑页号,有效位是1,则直接根据映射访问主存块号位2的主存块,并且访问位+1。假设访问逻辑页号为3的数据,根据页表找到逻辑页号,有效位是0,主存中没有数据,则需要到辅存中找到外存块号为d的存储块,将数据调入到主存中,有效位修改为1,访问位+1;若对该块数据进行修改,则脏位0变1,这一块数据被替换掉时,需要把数据写入辅存。
    这一部分主存和辅存的关系,与Cache和主存的关系类似。

    3.7.3.2快表(TLB)

    与Cache和主存的关系类似,利用程序局部性原理,访问的某块数据,如上文的4KB程序进程,可能会在未来一段时间内继续访问。将刚访问过的页表复制一份,放入用SRAM制作的更高速存储器中,后续将逻辑地址转换成物理地址时直接访问快表。与Cache类似,快表也需要替换算法,这需要学习OS才能明白。

    3.7.3.3关于页式虚拟存储器执行过程

    先把关于页表的详细工作流程贴上来。
    在这里插入图片描述
    这里需要先了解一个定义,页表基址寄存器。CPU中,每一个进程都有一个页表基址寄存器,存储相应进程的页表首地址,页表首地址对于页表相当于数组首地址对于数组的关系。

    举个粒子,假设一台小型计算机,Cache为8KB,主存为4MB,辅存为1GB。要调用4KB=212B的聊天小程序,程序中有一个变量X的逻辑地址是001000000011。
    现在需要其中的2KB=211B文字聊天进程,CPU中页表基址寄存器寻找页表,根据页表将程序逻辑地址转换成物理地址,根据物理地址同时从Cache和主存中寻找,由于是第一次调用该程序,因此Cache未名中,因此CPU会继续到主存中寻找,从辅存中把所需数据调用到主存,再把2KB的数据从主存复制一个数据副本到Cache中,提供CPU调用程序。下图是整体流程,
    在这里插入图片描述
    题目中已知4KB数据,假设分成大小相同的四块逻辑页面,其中2KB被调用,4MB主存块号的块内地址和逻辑页面的页内地址,地址长度相同,因此逻辑页面和块内地址的详细分配分别是,在这里插入图片描述
    在这里插入图片描述
    题目中已知001000000011是程序变量X的逻辑地址,逻辑页面的页内地之长度为10位,因此逻辑地址后10位存入逻辑页面,前两位00作为页号。主存块的块内地址与逻辑页面的页内地之是一样的,因此根据主存块块号与页内地址拼接出最终需要的物理地址。

    3.7.4段式虚拟存储器

    段式虚拟存储的具体实现需要在OS中学习,这里不再赘述。
    在这里插入图片描述

    3.7.5关于Cache和虚拟存储器的比较

    虚拟存储由主存和辅存完成,需要操作系统和硬件共同完成,Cache由硬件实现。
    虚拟存储器解决存储容量不足的问题,Cache解决CPU和主存速度部匹配的问题。
    两者的替换算法思想相同,且有依据了程序局部性原理,两者都有价格、容量、速度的梯度。

    3.7.6段页式虚拟存储

    段页式虚拟存储器和段式虚拟存储器的部分会在OS中详细讲解,需要等待后续更新。

  • 相关阅读:
    qt QTimer 计时器
    qt DateTime 计算时间
    c++ win32 关机 注销 重启
    uniapp 修改meta:viewport
    初次使用 VUX
    移动端web app自适应布局探索与总结
    前端js模版 预编译工具Tmod js使用入门
    谷歌 Uncaught SecurityError: Failed to execute 'replaceState' on 'History 错误
    H5 前端页面适配响应式
    微信video标签全屏无法退出bug 本文系转载
  • 原文地址:https://www.cnblogs.com/kevibglaser/p/14817402.html
Copyright © 2011-2022 走看看