物理与虚拟寻址

计算机系统的主存被组织成M个连续的字节大小的单元组成的数组。每个字节都有唯一确定的物理地址

物理寻址:CPU通过物理地址访问内存

虚拟寻址:CPU通过生成虚拟地址(Virtual Address/VA)来访问主存,CPU上有专门的内存管理单元来进行地址翻译。

地址空间

虚拟地址空间{0,1,2,.....,N-1},其中N=2^n,则称为n位虚拟空间

同理物理地址空间{0,1,2,.....,M-1},其中M=2^m,则称为m位物理空间

虚拟内存作为缓存的工具

与存储器层次结构种其他缓存一样,磁盘上的数据被分割成块,这些块作为主存和磁盘之间的传输单元。VM系统将虚拟内存分割为虚拟页(Virtual Page/VP),物理内存被分割位物理页(Physical Page/PP),每个页的大小P=2^p字节。

VM通过页表(Page Table) 来判断一个虚拟页是否被缓存在DRAM中,每个页表都是由页表条目(Page Table Entry)组成的数组。每个PTE由一个有效位和一个n位地址字段组成,有效位=1意味着当前虚拟页被缓存在了DRAM中,此时地址字段就是DRAM中相应的物理页的起始位置。

假设虚拟地址为n位,每页大小P=2p,则需要的PTE数量:2(n-p)

现在考虑缓存的命中与否:

  • 页命中:若有效位为1,则说明VP被缓存在DRAM中,故可直接通过地址字段找到相应物理地址

  • 缺页: DRAM缓存不命中称为缺页(Page Fault),一旦发生缺页程序就会选择一个牺牲页将需要的VP拷贝到原牺牲页的位置上

交换(Swapping)/页面调度(Paging):在磁盘和内存之间传送页。

虚拟内存作为内存管理的工具

  • 简化链接:独立的地址空间允许每个进程的内存印射使用相同的基本格式,而不用在意代码和数据实际上存在在内存何处

  • 简化加载: VM使得容易向内存中加载可执行文件和共享对象文件

内存印射:将一组连续的虚拟页印射到人一个文件中的任何位置

  • 简化共享:独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制

  • 简化内存分配: VM向用户进程提供了一个简单的分配额外内存的机制。

虚拟内存作为内存保护的工具



SUP:进程是否必须运行在内核模式下

READ:对页面读权限

WRITE:对页面写权限

地址翻译



虚拟页偏移量共p位,虚拟页数(n-p)位,虚拟地址n位,需要的PTE数量为2^(n-p),虚拟地址共n位。通过虚拟页偏移量和虚拟页数找到相应地址。

  • 页命中

  1. 处理器生成虚拟地址给MMU
  2. MMU生成PTE地址并请求从高速缓存中得到它
  3. 高速缓存返回PTE给MMU(检查是否在高速缓存中,即标志位是否为1)
  4. MMU通过PTE构造物理地址,并传给高速缓存
  5. 高速缓存返回所需的数据字

页面命中完全由硬件控制,而缺页要求硬件和操作系统内核协助完成

  • 缺页

  1. 同上
  2. 同上
  3. 同上(此时检查到标志位位0,即不再物理内存中)
  4. MMU触发一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序
  5. 缺页处理程序指定牺牲页,如果这个页面已经被修改就把它换出到磁盘中
  6. 缺页处理程序页面调入新的页面,并更新相应PTE
  7. 缺页处理程序返回原来进程,再次执行导致缺页的命令。CPU将该虚拟地址重新发给MMU,此时MMU会检测到标志位为1,执行上述4以后操作。

使用TLB(翻译后备缓冲器)加速地址翻译

多级页表

  • 节省空间,若一级页表中的一个PTE为空,则相应的二级页表根本不存在,这代表着巨大的潜在节约,因为对于一个典型的程序,4GB的虚拟地址空间的大部分都是未分配的。
  • 只有一级页表才需要在主存中,虚拟内存系统可以在需要时创建、页面调入或调出二级页表,这减少了主存的压力。

csapp第九章笔记-虚拟内存的更多相关文章

  1. 基于《CSAPP第九章 虚拟内存》的思考和总结

    在csapp的描述中,虚拟内存的形象更加具化,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,内存充当了磁盘的缓存,粗呢内存的许多概念与SRAM缓存是相似的.虚拟页面有以下三种 ...

  2. 流畅的python第九章笔记 python风格的python

    9.1对象表示形式 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员. 我们打印下面的A是默认输出这个对象的类型,我们对B进行了修改_ ...

  3. CSAPP:第九章 虚拟内存

    CSAPP:第九章 虚拟内存 关键点:虚拟内存.物理内存 9.1 物理地址和虚拟地址9.2 地址空间9.3 虚拟内存作为缓存的公工具 9.1 物理地址和虚拟地址   计算机的主存被组织成一个由M个连续 ...

  4. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  5. CSAPP学习笔记—虚拟内存

    CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图 代码工程地址: https://github.com/j ...

  7. Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化

    第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...

  8. JavaScript DOM编程艺术-学习笔记(第八章、第九章)

    第八章 1.小知识点: ①某些浏览器要根据DOCTYPE 来决定页面的呈现模式(标准模式 / 怪异模式--也称兼容模式): 兼容模式意味着浏览器要模仿老一辈的浏览器的怪异行为,来让老站点得到运行,并让 ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第九章

    第九章:文本 9.1 字符:在XML文档中,字符是指带有一个数字值的一个或多个字节,数字只与Unicode标准对应. 符号:符号(glyph)是指字符的视觉呈现.每个字符都可以用很多不同的符号来呈现. ...

随机推荐

  1. 微信小程序随手笔记

    1.全局导入vant时build后有问题(只能页面引入) 2.微信小程序只能用:https开头,在微信公众号里还要修改下配置 3.微信小程序里textarea与vant的van-popup有问题,手机 ...

  2. 初识Java对象

    初始Java对象 本文的概述顺序 1什么是面向对象编程(面向对象编程与 面向过程编程的区别) 2类和对象的的关系 3类的定义 4对象的创建 5对象使用的一些细节 5.1对象在内存中的产生及分布 5.2 ...

  3. Python3 迭代器深入解析

    第6章 函数 6.1 函数的定义和调用 6.2 参数传递 6.3 函数返回值 6.4 变量作用域 6.5 匿名函数(lambda) 6.6 递归函数 6.7 迭代器 6.8 生成器 6.9 装饰器 6 ...

  4. Ethical Hacking - Web Penetration Testing(2)

    INFORMATION GATHERING IP address. Domain name Info. Technologies used. Other websites on the same se ...

  5. Python数据分析之全球人口数据

    这篇文章用pandas对全球的人口数据做个简单分析.我收集全球各国1960-2019年人口数据,包含男女和不同年龄段,共6个文件. pop_total.csv: 各国每年总人口 pop_female. ...

  6. #python自动化测试#代码执行时间测量模块timeit

    1. timeit模块timeit模块可以用来测试一小段python代码的执行速度 class timeit.Timer(stmt = 'pass',setup = 'pass',timer=< ...

  7. 题解 UVA501 【Black Box】

    思路与中位数一题,解决方案比较像,使用对顶堆来解决. 具体实现为,使用两个堆,大根堆维护较小的值,小根堆维护较大的值,即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的. 将大于大根堆堆 ...

  8. WARNING: 'aclocal-1.14' is missing on your system.问题解决记录

    在编译LXC时,遇到一个问题,提示 'aclocal-1.14'缺失.如下:WARNING: 'aclocal-1.14' is missing on your system. You should ...

  9. MySQL之字段数据类型和列属性

    数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...

  10. Azure Load Balancer(一) 为我们的Web项目提供负载均衡

    一,引言 上节,我们讲到使用 Azure Traffic Manager 为我们的 Demo 项目提供负载均衡,以及流量转发的功能.但是Azure 提供类似的功能的服务远远不止这一个,今天我们就来讲一 ...