物理与虚拟寻址

计算机系统的主存被组织成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. day7 python字符串的操作及方法

    1.字符串 1.1 字符串的操作 # 1.字符串的拼接 strvar = "我爱" + "中国" # 2.字符串的重复 strvar = "今天下午2 ...

  2. 面试官:连Spring三级缓存都答不好,自己走还是我送你?

    面试官:简历上写了精通Spring,那你回答一下Spring为什么用“三级缓存”去解决循环依赖? 我:.......应该有三个缓存的map结构 面试官:具体回答一下 我:平时没认真深入过 面试官:公司 ...

  3. 使用SQL语句进行数据复制

    使用SQL语句对数据或者表进行复制,一般用于两张表结构相同的时候使用. SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Serve ...

  4. Makefile中的一个坑

    问题描述:Makefile中,我想将一个变量的后缀全部进行替换,如将所有的.c后缀变成.d后缀 方法:$(CUR_SOURCE: .c = .d ) 说明:查阅相关资料,了解到上述这种语法就可以将所有 ...

  5. mybatis逆向工程生成java代码和xml配置

    mybatis官方提供了一个逆向工程包,可以针对数据库表自动生成mybatis执行所需要的Pojo.Mapper xml文件.Mapper 接口文件. mybatis-generator有很多种用法: ...

  6. etcd3.0集群安装

    etcd 是一个分布式一致性键值存储,用于共享配置和服务发现,Go编写,并使用 Raft 一致性算法来管理高可用复制日志. 特性 简单:支持curl方式的用户API(http+json)安全:可选ss ...

  7. LQB201803乘积尾零

    果然是练思维呀!!要是我的话估计就能挨个算一算呜呜呜 分解成 2和5相乘的式子 #include <iostream> using namespace std; //快速幂运算 int m ...

  8. luogu P5325 Min_25筛

    LINK:Min_25筛 新版感觉有点鬼畜 而且旧版的也够用了至少. 这个并不算很简单也不算很困难的知识点 学起来还是很麻烦的. (误入了很多dalao的blog 说的云里雾里的 甚是懵逼 这里推荐几 ...

  9. luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT

    LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...

  10. Typora+PicGo-Core(command line)+SMMS、github、gitee实现Typora图片上传到图床

    Typora+PicGo-Core(command line)+SMMS.github.gitee实现Typora图片上传到图床 1 安装插件2 配置config.json    2.1 设置SMMS ...