目录

  • 一、什么是虚拟存储器
    • 物理寻址和虚拟寻址
    • 页表
    • 地址翻译
  • 二、加快地址翻译
    • TLB
    • 多级页表
  • 三、虚拟存储器作用
    • 虚拟存储器作为缓存的工具
    • 虚拟存储器作为存储器管理的工具
    • 虚拟存储器作为存储器保护的工具

虚拟存储器是非常重要的一个概念。先抽丝剥茧的了解下什么是虚拟存储器,再理解下虚拟存储器有什么作用。

一、什么是虚拟存储器

(1)虚拟存储系统通过虚拟地址寻址;
(2)虚拟地址和物理地址通过页表实现一一映射;
(3)页表存放在主存中;

物理寻址和虚拟寻址

存放在存储器中每一个字节都有一个地址,这个地址称为物理地址(PA, physical address)。处理器通过物理地址访问数据的方式称为物理寻址。处理器也可以通过虚拟地址(VA, visual address)寻址,称为虚拟寻址。处理器生成一个虚拟地址来访问处理器,在地址到达存储器之前需要先转换为物理地址。存储器管理单元负责将虚拟地址转换为物理地址。
物理地址由物理页号(PPN)和物理偏移量构成(PPO)。虚拟地址由虚拟页号(VPN)和虚拟偏移量构成(VPO)。一般情况下,物理偏移量等于虚拟偏移量,物理页号和虚拟页号通过页表实现映射。

页表

计算机的存储结构包括:高速缓存(SRAM),主存储器(DRAM)以及磁盘(固态硬盘或者机械硬盘)。处理器从缓存中取数据,如果缓存没命中,处理器从主存中取数据。如果主存也没命中,处理器就先要把需要的数据从磁盘中搬运到主存中,再从主存中取数据。如何判断数据是否在主存中,我们需要一个东西,叫做页表(PTE, page table entry)来告诉我们数据是否在主存中。页表由有效位和一个n位地址字段组成。如果有效位为1,则地址段放置虚拟页在磁盘上的起始物理地址,虚拟页典型值为4K-2M。页表只有三种状态,a.未分配。地址段上没有数据。b.已缓存。地址段上有数据,有效位为1,表明该虚拟页数据都缓存在主存中。c.未缓存。地址段上有数据,有效位为0。如下图所示,页表共有八项,其中PTE0,PTE5未分配,PTE1,PTE2,PTE4, PTE7已缓存,PTE3,PTE6未缓存。

因此,处理器访问主存有两种状态,一是页命中,数据缓存在主存中,二是缺页,数据没有缓存在主存中。虚拟页号VPN与PTE是一一对应的,例如VPN0-PTE0, VPN1-PTE1等等。

地址翻译

地址翻译由以下几个步骤组成:
(1)处理器生成虚拟地址,传给MMU;
(2)MMU提取虚拟页号VPN,传送给高速缓存/主存;
(3)通过高速缓存/主存中页表,查询虚拟页号对应的PTE内容,并返还给MMU;
(4)如果有效位为0,进入第五步,有效位为1,进入第八步;
(5)MMU触发异常,处理器进入缺页异常处理程序;
(6)缺页异常处理程序从磁盘中调入新的页面,更新进PTE页表中;
(7)CPU重新发送虚拟地址,进入第二步;
(8)MMU构造物理地址,并将地址送给高速缓存/主存;
(9)高速缓存/主存返回数据给处理器

二、加快地址翻译

TLB

翻译后备缓冲器(TLB,translation lookaside buffer)。TLB是一个小的,虚拟地址缓存,其功能相当于高速缓存,特别的,作为页表的高速缓存。TLB存放在处理器中,因此,处理器可以非常快速的从TLB中取出PTE。

TLB由标记位和索引位构成。相当于全相联高速缓存。处理器访问数据步骤如下:
(1)处理器产生虚拟地址;
(2)如果TLB 命中,TLB返回PTE给MMU;如果不命中,MMU从高速缓存中取出PTE,放在TLB中,覆盖已经存在的条目。
(3)MMU根据PTE生成物理地址,并将它发送给高速缓存或者主存;
(4)高速缓存或者主存返回数据给处理器

多级页表

TLB解决了访问速度的问题,多级页表可以解决页表占用空间大小的问题。假设地址空间为32位,则处理器最高可访问4GB的存储器,假设存储器物理页大小为4K,每个PTE占用4个字节。则页表大小为4MB,意味着主存中至少留下4MB空间用来存放页表。这无疑是一种浪费,使用多级页表可以压缩页表大小。
一级页表每个PTE对应4MB虚拟页,总共需要1024个PTE可以映射4GB虚拟地址空间。二级页表每个PTE对应4KB虚拟页,1024个二级PTE可以映射4MB虚拟地址空间。如果一级页表的PTE为空,则对应的二级页表就根本不会存在,如图中的PTE2/3/4/5/6/7等。这大大节省了主存的空间。一级页表总是存放在主存中,只有需要二级页表时,虚拟存储器系统才会创建,调入或调出二级页表。

三、虚拟存储器作用

虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互,为每个进程提供了一个大的,一致的和私有的地址空间。主要有三个作用:
(3)保护进程的地址空间不被其他进程破坏。

虚拟存储器作为缓存的工具

在虚拟存储系统中,可以将主存看成是一个存储在磁盘上的地址空间的高速缓存。处理器通过页表可以知道物理页有没有缓存在主存中。

虚拟存储器作为存储器管理的工具

虚拟存储器为每个进程提供了一致的地址空间,简化存储器管理。
(1)简化链接
(2)简化加载
(3)简化共享
(4)简化存储器分配

笔者对于链接,加载这些过程都不了解,因此只将大概记录下来,日后有所了解,再做补充。详情可以参考《深入理解计算机系统》9.4节

虚拟存储器作为存储器保护的工具

在示例中,PTE添加了三个许可位。SUP位表示进程是否必须运行在内核(超级用户)模式下才能访问,运行在内核模式下的进程可以访问任何页面。运行在用户模式下的进程只能访问SUP值为0的页面。READ和WRITE位控制处理器对页面的读和写访问。
如果一条指令违反了许可条件,CPU将会触发一个保护故障,将控制传递给一个内核中的异常处理程序。

简单理解什么是虚拟存储器相关推荐

  1. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  2. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  3. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  4. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  5. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

  6. linun——SElinux的简单理解

    SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...

  7. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  8. c语言理解参数,c语言中对可变参数列表的简单理解

    函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...

  9. QGraphicsScene 的简单理解--关于手册的简要翻译

    文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...

最新文章

  1. 计算机领域专业术语中英文对照(时常更新)
  2. cf1208G Polygons 欧拉函数
  3. TCP协议疑难杂症全景解析
  4. 这些年,我们无法忘却的jQuery日历插件
  5. 为什么计算机连接u盘不显示内存不足,U盘明明有空间却提醒空间不足怎么解决...
  6. 银河麒麟桌面操作系统sp1 2203双硬盘ghost备份及手动分区还原
  7. 开源磁盘加密软件VeraCrypt教程
  8. pcm5102a解码芯片音质评测_音乐更重要,iQOO Pro配备独立解码芯片,Hi-Fi音质更懂你...
  9. 第五章、Zigbee模块的数据传输
  10. startup.bat闪退解决
  11. arcgis快速生成图框_arcgis图框的制作
  12. SNS、FaceBook、导航设计等等
  13. 微信小程序——从后台获取数据库数据并在前台显示(前端+后端+数据库)
  14. 计算机电路计数器pl什么意思,计数器原理—不懂就要看哦~~
  15. Orcal 用户权限
  16. Android应会的网络基本知识
  17. java购物车设计_Java面向对象课程设计——购物车
  18. 前段基础 HTML 第三章文字与段落标记----假期学习第二天
  19. 数学分析教程 第十三章学习感受
  20. FigDraw 2. SCI 文章绘图必备 R 语言基础

热门文章

  1. 什么样的人适合参加IT编程培训?
  2. python markdown2 样式_Python markdown2.markdown方法代碼示例
  3. variable ‘XXX cannot be implicitly captured in a lambda with no capture-default specified
  4. 矩阵分析之Householder Reduction
  5. 单目标跟踪OTB、VOT数据集介绍
  6. 执行unzip命令报错Archive: home.zip End-of-central-directory signature not found. Either this file is
  7. Squeeze-and-Excitation Networks论文翻译——中文版
  8. 分布式系统架构实例剖析
  9. modprobe XXX not found 解决与Depmod命令; insmod/modprobe的区别
  10. inplace = True 是什么意思