物理与虚拟寻址

计算机系统的主存被组织成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. TCP 进阶

    转自: https://www.cnblogs.com/caoyusongnet/p/9087633.html 一. 端口号 标准的端口号由 Internet 号码分配机构(IANA)分配.这组数字被 ...

  2. 题解 洛谷 P4189 【[CTSC2010]星际旅行】

    一个比较直接的想法就是对每个点进行拆点,拆成入点和出点,限制放在入点和出点相连的边上,然后跑最大费用最大流即可. 但是这样复杂度无法接受,所以考虑模拟费用流来解决本题. 发现 \(H\) 都大于等于该 ...

  3. 从零开始学Electron笔记(七)

    在之前的文章我们介绍了一下Electron中的对话框 Dialog和消息通知 Notification,接下来我们继续说一下Electron中的系统快捷键及应用打包. 全局快捷键模块就是 global ...

  4. MongoDB 事务,复制和分片的关系

    摘要:本文尝试对Mongo的复制和分布式事务的原理进行描述,在必要的地方,对实现的正确性进行论证,希望能为MongoDB内核爱好者提供一些参考. 1.前言 MongoDB基于wiredTiger提供的 ...

  5. Flutter获取远程数据 刷新UI界面

    import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; void main() => r ...

  6. thymeleaf js绑定多个变量参数

    写法一: <img th:src="@{/css/bianji.png}" th:onclick="|viewById('${user.id}','${user.i ...

  7. Java基础(一)基础常识

    Java开发基础流程图: 也可参考这篇博客: https://www.cnblogs.com/xdp-gacl/p/3624567.html 常用的Windows的DOS命令 : dir : 列出当前 ...

  8. 设备管理的数据库路径是/storage/sdcard0/data/devuce-db

    设备管理的数据库路径是/storage/sdcard0/data/devuce-db 数据库文件名全路径是/storage/sdcard0/data/devuce-db/device.db 数据库文件 ...

  9. log4j2.xml配置使用

    jar包: log4j-api-2.10.0.jar log4j-core-2.10.10.jar log4j-1.2-api-2.10.0.jar log4j-slf4j-impl-2.10.10. ...

  10. 前端网(http://www.qdfuns.com/)不能访问了

    前端网(http://www.qdfuns.com/)不能访问了 之前写的一些知识点也找不到了,有点难受.... 这说明知识点还是放在本地电脑稳一点,多备份,云端时刻在变化... 希望博客园别也用着用 ...