csapp第九章笔记-虚拟内存
物理与虚拟寻址
计算机系统的主存被组织成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位。通过虚拟页偏移量和虚拟页数找到相应地址。
- 页命中

- 处理器生成虚拟地址给MMU
- MMU生成PTE地址并请求从高速缓存中得到它
- 高速缓存返回PTE给MMU(检查是否在高速缓存中,即标志位是否为1)
- MMU通过PTE构造物理地址,并传给高速缓存
- 高速缓存返回所需的数据字
页面命中完全由硬件控制,而缺页要求硬件和操作系统内核协助完成
- 缺页

- 同上
- 同上
- 同上(此时检查到标志位位0,即不再物理内存中)
- MMU触发一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序
- 缺页处理程序指定牺牲页,如果这个页面已经被修改就把它换出到磁盘中
- 缺页处理程序页面调入新的页面,并更新相应PTE
- 缺页处理程序返回原来进程,再次执行导致缺页的命令。CPU将该虚拟地址重新发给MMU,此时MMU会检测到标志位为1,执行上述4以后操作。
使用TLB(翻译后备缓冲器)加速地址翻译
多级页表
- 节省空间,若一级页表中的一个PTE为空,则相应的二级页表根本不存在,这代表着巨大的潜在节约,因为对于一个典型的程序,4GB的虚拟地址空间的大部分都是未分配的。
- 只有一级页表才需要在主存中,虚拟内存系统可以在需要时创建、页面调入或调出二级页表,这减少了主存的压力。

csapp第九章笔记-虚拟内存的更多相关文章
- 基于《CSAPP第九章 虚拟内存》的思考和总结
在csapp的描述中,虚拟内存的形象更加具化,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,内存充当了磁盘的缓存,粗呢内存的许多概念与SRAM缓存是相似的.虚拟页面有以下三种 ...
- 流畅的python第九章笔记 python风格的python
9.1对象表示形式 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员. 我们打印下面的A是默认输出这个对象的类型,我们对B进行了修改_ ...
- CSAPP:第九章 虚拟内存
CSAPP:第九章 虚拟内存 关键点:虚拟内存.物理内存 9.1 物理地址和虚拟地址9.2 地址空间9.3 虚拟内存作为缓存的公工具 9.1 物理地址和虚拟地址 计算机的主存被组织成一个由M个连续 ...
- Android群英传笔记——第九章:Android系统信息和安全机制
Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...
- CSAPP学习笔记—虚拟内存
CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图 代码工程地址: https://github.com/j ...
- Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化
第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...
- JavaScript DOM编程艺术-学习笔记(第八章、第九章)
第八章 1.小知识点: ①某些浏览器要根据DOCTYPE 来决定页面的呈现模式(标准模式 / 怪异模式--也称兼容模式): 兼容模式意味着浏览器要模仿老一辈的浏览器的怪异行为,来让老站点得到运行,并让 ...
- o'Reill的SVG精髓(第二版)学习笔记——第九章
第九章:文本 9.1 字符:在XML文档中,字符是指带有一个数字值的一个或多个字节,数字只与Unicode标准对应. 符号:符号(glyph)是指字符的视觉呈现.每个字符都可以用很多不同的符号来呈现. ...
随机推荐
- DVWA(xss部分源码分析)
前言 DVWA靶场都不陌生,最新学习xss,从新又搞了一遍xss部分,从源码方面康康xss的原因,参考了很多大佬的博客表示感谢,网上也有很多DVWA靶场教程,就水一篇吧. 更多web安全知识欢迎访问: ...
- The Prices
题目描述 你要购买\(m\)种物品各一件,一共有\(n\)家商店,你到第\(i\)家商店的路费为\(d[i]\),在第家商店购买第\(j\)种物品的费用为\(c[i][j]\),求最小总费用. 输入格 ...
- 技术干货:Jenkins集成GitLab
Jenkins免密拉取GitLab项目 1.在Jenkins上为GitLab创建一个专有的拉取代码的账号 Jenkins需要构建哪些项目就在GitLab给予账号相应权限 我这里已经创建过Jenkins ...
- 【JVM之内存与垃圾回收篇】类加载子系统
类加载子系统 概述 完整图如下: 如果自己想手写一个 Java 虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件, ...
- 167两数之和II-输入有序数组
from typing import List# 这道题很容易能够想到,只需要遍历两边列表就可以了# 两层循环class Solution: def twoSum(self, numbers: Lis ...
- day12:闭包函数&匿名函数
闭包函数 闭包函数的定义: 如果内函数使用了外函数的局部变量并且外函数把内函数返回出来的过程 叫做闭包里面的内函数是闭包函数 一个简单的闭包函数示例: def songyunjie_family(): ...
- java代码之美(17) ---Java8 LocalDateTime
Java8 LocalDateTime 在java8之前我们在处理时间的时候都是用的Date,但它其实有很明显的缺点. 1.我们也会对日期做一些操作,比如加几天.加几分,当月的最后一天等等.有些计算实 ...
- web自动化 -- HTMLreport(二)测试报告输出内容居左对齐
一.需求痛点 1.报告输出内容是居中对齐,很难看 2.我们希望输出内容是居左对齐 3.痛点截图 二.解决办法 1.原因分析 HTMLreport的内容对齐方式,自然是修改HTMLreport的内容了 ...
- 为什么Python适合初学者,一般要学习多久
为什么Python适合初学者?一般Python要学习多久?很多人都觉得,Python是一门很好学的语言,非常适合入门.但更多人都是不清楚具体原因的.那么,我们不如一起来看看Python为何更适合初学者 ...
- pandas之groupby分组与pivot_table透视
一.groupby 类似excel的数据透视表,一般是按照行进行分组,使用方法如下. df.groupby(by=None, axis=0, level=None, as_index=True, so ...