CSAPP第七章概念

CSAPP第七章概念

1.虚拟地址数=2^(虚拟地址位数)

最大可能的虚拟空间=虚拟地址数-1

2.

使用虚拟寻址,CPU需要将虚拟地址转换成物理地址,这样才能访问真实的物理内存

concepts:1)VM on disk,PM (DRAM cache)

2)page--cache blocks

3.page tables :an array of PTEs(page table entry) that map VP to PP

虚拟内存空间被组织为一个存放在硬盘上的M个连续的字节大小的单元组成的数组,每个字节都有一个唯一的虚拟地址

页数=虚拟地址数/页大小,每个页都需要一个PTE

操作系统通过将虚拟内存分割为大小固定的块来作为硬盘和内存之间的传输单位,这个块被称为虚拟页(Virtual Page, VP),每个虚拟页的大小为P=2^p字节。物理内存也会按照这种方法分割为物理页(Physical Page, PP),大小也为P字节。

CPU在获得虚拟地址之后,需要通过MMU将虚拟地址翻译为物理地址。而在翻译的过程中还需要借助页表

VP1,VP2,VP7,VP4被缓存到物理内存中(cached),VP3,VP6已被分配但尚未缓存到物理内存(uncached),VP0和VP5尚未分配(unallocated)

4.page hit

MMU根据虚拟地址在页表中寻址到PTE4,有效位为1,说明已经缓存到物理内存中,根据页表映射关系,指向PP1

5.page fault

虚拟页没有缓存在物理内存中

page fault execute page fault handler in kernel

page fault handler 选一个victim 在下述例子中选的是存放在PP3的VP4

如果牺牲页已被修改过,内核会先将它复制回硬盘(采用写回机制而不是直写也是为了尽量减少对硬盘的访问次数)

Kernel从disk复制VP3到PP3,更新PTE3

page fault handler 返回,重新执行导致缺页的命令

KEY POINT:demand paging

wait until the miss to copy the page to DRAM

In a system that uses demand paging, the operating system copies a disk page into physical memory only if an attempt is made to access it and that page is not already in memory (i.e., if a page fault occurs). It follows that a process begins execution with none of its pages in physical memory, and many page faults will occur until most of a process‘s working set of pages are located in physical memory.

6.局部性

根据空间局部性原则(一个被访问过的内存地址以及其周边的内存地址都会有很大几率被再次访问)与时间局部性原则(一个被访问过的内存地址在之后会有很大几率被再次访问),只要将工作集缓存在物理内存中,接下来的地址翻译请求很大几率都在其中,从而减少了额外的硬盘流量。

if(working set size<main memory size) after cold miss good performance for one process

if(working set size>main memory size)thrashing thrashing occurs when a computer‘s virtual memory resources are overused, leading to a constant state of paging and page faults, inhibiting most application-level processing.

Main memory refers to physical memory that is internal to the computer.

原文地址:https://www.cnblogs.com/wwqdata/p/12000123.html

时间: 2024-07-29 09:26:42

CSAPP第七章概念的相关文章

CSAPP第七章

7.1 1.函数后没跟函数体则为声明,跟了则为定义 下列情况仅为声明 1: 仅仅提供函数原型:void display(); 2: extern int a; 3: class A; 4: typedef 声明; 5: 在类中定义的静态数据成员的声明 class A{ public: static int a; //声明 }; 局部变量 仅由模块m定义和引用的本地符号 e.g.在模块中定义的带static的C函数和全局变量 注意函数中的局部变量如temp存在栈中,不存在symtab中 2.不在此

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 提供ROS接口的3D软件比较多,本章以最典型的Gazebo介绍为主,从Player/Stage/Gazebo发展而来,现在独立的机器人仿真开发环境,目前2016年最新版本Gazebo7.1配合ROS(kinetic)使用. 补充内容:http://blo

2017上半年软考 第七章 重要知识点

第七章项目范围管理 []项目范围管理概念 [][]项目范围管理的含义和作用 项目范围管理内容p289 项目范围对项目管理的重要性?p289 [][]项目范围管理的主要过程 项目范围管理的6个过程是? []编制范围管理计划和范围说明书 编制范围管理计划的内容是? 编制范围管理计划的输入.工具和技术.输出 编制范围管理计划输出是什么? 项目管理计划可以作为什么的依据p291 需求管理计划包括什么? []范围定义 范围定义的输入.工具和技术.输出 范围定义的作用是什么?p292 定义范围的最重要任务是

2017.2.21 activiti实战--第七章--Activiti与容器集成

学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 流程引擎工厂 7.1.1 ProcessEngine 创建processEngine的方法有三种: 1 通过配置文件 2 测试中通过ActivitiRule 3 通过ProcessEngines类 7.1.2 ProcessEngineFactory 与spring集成的目的有两个: 1 通过spring统

操作系统思考 第七章 缓存

第七章 缓存 作者:Allen B. Downey 原文:Chapter 7 Caching 译者:飞龙 协议:CC BY-NC-SA 4.0 7.1 程序如何运行 为了理解缓存,你需要理解计算机如何运行程序.你应该学习计算机体系结构来深入理解这个话题.这一章中我的目标是给出一个程序执行的简单模型. 当程序启动时,代码(或者程序文本)通常位于硬盘上.操作系统创建新的进程来运行程序,之后"加载器"将代码从存储器复制到主存中,并且通过调用main来启动程序. 在程序运行之中,它的大部分数据

软件工程 六、七章读书笔记

第六章 在第六章中主要是介绍了Scrum的方法论,在此方法的理论中,其原则主要强调了一个团队的互动互助的开发过程,重点强调了在一个项目里,一个团队是如何通过沟通产生进步,且这个沟通绝不是说有通信便可称之为“沟通”了,而是要有面对面的实时交流,虽然现在的通讯方式早已变得十分强大,但面对面的沟通仍是最有效率的交流方式,故而在此基础上又提出了一个新的团队合作活动——“每日立会”,这是在Sprint中我认为是十分有效的一个活动,将问题摆在明面上,大家互相了解各自的进度,一起解决项目中的问题,持续更新团队

《深入理解计算机系统》第七章 链接 读书笔记

第七章链接 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载.连接可执行于编译时.加载时.运行时.由叫链接器的程序执行. 链接器使得分离编译成为可能.使得可以把 大程序分解成小模块,利于管理. 理解链接器将帮助你构筑大程型序:避免一些危险的编程错误:帮助你理解语言的作用域规则是如何实现的:帮助你理解其他重要的系统概念:使你能够利用共享库. 7.1 编译器驱动程序 驱动程序的工作:1.运行C预处理器,将C源程序(.c)翻译成一个ASCⅡ码中间文件(.i):2.运行C

程序设计基础 第七章 数组与字符串

第七章 数组与字符串 A总结: 1.数组是同类型的集合,同一个数组的数组元素具有相同的数据类型,引用数组就是引用数组的各元素,通过下标的变化可以引用任意一个数组元素,注意不要进行下标越界的引用,那样会带来副作用. 2.数组类型在数据处理和数值计算中有十分重要的作用,数组与循环的结合可以解决很多的问题. 3.数组可以根据下标的多少分类:一维数组(一个下标)……… 4.C语言使用字符数组来存放字符串,该字符数组中包含一个’\0’字符,代表字符串的结尾. B解析: 7.1:数组的基本概念 :按一定的顺