一、先谈几个重要的东西

virtual memory是一个抽象概念,书上的原文是"an abstraction of main memory known as virtual memory"(参考资料p776)。那么什么是抽象概念。下面说说我个人对这个东西的理解。

所谓抽象概念是指抽象出来的概念,通过抽象这个动作得到的结果。那么抽象这个动作又是什么,即是怎么一个动作,思维做了什么动作或者做了一系列什么动作。举个生活中的例子,现在有排球、足球、篮球、乒乓球,我们按照某个方向(共性)对排球进行抽象,客体是排球,动作是抽象,那么抽象出来的结果是球,这里球就是一个抽象概念,球只存在于我们的概念中,一个圆圆的,可以滚动的东西。在大脑中,它就是这样,抽象是一个认识事物的方法,对这个事物进行抽象,抽象出那些相关的属性,去除不相关的属性。

我们将这些知识应用到virtual memory。解剖"an abstraction of main memory",客体是main memory,动作是abstract,那么main memory经过某一方向的抽象后就成了virtual memory,一个抽象概念,一个可以连续的存放信息的地方,每个地方都有一个地址属性,而舍弃了它是由什么材料组成等不相关信息(抽象方向决定了哪些属性相关,哪些属性不相关),在大脑中,它就是这样。(这里很难理解,包括我自己都不是很肯定,注意利用上段举出的关于球的例子)

谈了这么多我想大家,包括我,都有点晕了,哈哈,这家伙到底在说什么,说人话。

总结一下:抽象是我们认识事物的一种方法,对硬体按某一方向进行抽象得到抽象概念,抽象概念只存在于大脑中。经过对事物进行抽象,我们得到抽象的事物。

回归本节主题,virtual memory。在写这篇博文的过程中,我感觉到如果根据我前面的认知,作者的表述似乎不够准确,应该是这样"virtual memory" is "an abstraction of main memory and MMU",MMU负责虚拟地址和物理地址的转换。因为仅仅对memory进行抽象根本得不到virtual memory。(这里如果读不懂,先硬着头皮往下灌,将quetions存在心中看下面的内容)

二、virtual memory

前面已经讲到virtual memory是一个抽象概念,是大脑中对main memory + MMU 抽象的产物。那么main memory 是如何与MMU相加的,即main memory与MMU如何合作的。

合作的过程如下:

    1、processor首先发送virtual address给MMU;

    2、MMU从virtual address中提取某些连续栏位并将其发送到存储在main memory中的page table

    3、main memory返回physical address的部分连续栏位给MMU

    4、MMU根据virtual address和physical address的部分连续栏位计算出physical address,并发送给main memory

    5、main memory返回所需的data给processor。

在整个过程中MMU负责将虚拟地址翻译成物理地址。这里我只是做一个overview,详细的细节可以参考我给出资料。

三、TLB是什么

不了解cache的同仁,可以先我之前写的初识cache(http://www.cnblogs.com/midhillzhou/p/5608533.html),不然理解会很吃力。TLB从本质上说是一个cache,它存在于MMU的内部,用于加速地址转换。仔细思考上图,在MMU with TLB中, 在第1步MMU收到virtual address后,它首先先查看TLB中有没有对应的physical address:如果有,直接将地址取出来,发给main memory,然后main memory将所需data发给processor;如果没有,再进行上面步骤中的第2步第3步,然后将这一映射关系保存到TLB中,最后进行第4步第5步。

四、参考资料

<<computer systems a programmer's perspective>> second edition p775-p792

初识virtual memory的更多相关文章

  1. php编译 :virtual memory exhausted: Cannot allocate memory

    有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...

  2. reds Virtual Memory

    Virtual Memory technical specification This document details the internals of the Redis Virtual Memo ...

  3. ADDM Reports bug:Significant virtual memory paging was detected on the host operating system

    查看ADDM(数据库版本为ORACLE 10.2.0.5.0)报告时,发现其中有个结论非常不靠谱:Significant virtual memory paging was detected on t ...

  4. Linux Process Virtual Memory

    目录 . 简介 . 进程虚拟地址空间 . 内存映射的原理 . 数据结构 . 对区域的操作 . 地址空间 . 内存映射 . 反向映射 .堆的管理 . 缺页异常的处理 . 用户空间缺页异常的校正 . 内核 ...

  5. Cache and Virtual Memory

    Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandonAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRando ...

  6. is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of 40 GB virtual memory used

    昨天使用hadoop跑五一的数据,发现报错: Container [pid=,containerID=container_1453101066555_4130018_01_000067] GB phy ...

  7. 编译时:virtual memory exhausted: Cannot allocate memory

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  8. Virtual Memory PAGE TABLE STRUCTURE

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION The basic mechanism f ...

  9. Virtual Memory DEMAND PAGING - The avoidance of thrashing was a major research area in the 1970s and led to a vari- ety of complex but effective algorithms.

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION With the use of pagin ...

随机推荐

  1. AngularJS 过滤器

    过滤器可以使用一个管道字符(|)添加到表达式和指令中 AngularJS 过滤器可用于转换数据: currency 格式化数字为货币格式. filter 从数组项中选择一个子集. lowercase ...

  2. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5*  ...

  3. MySQL 处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本博文我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据. 防 ...

  4. 创建agsXMPP 自定义packet types

    在网上看了好多文章基本都是转载 没有能成功运行的,又没有别的资料,很是费解,无奈之下只好潜心研究,最终总结了几个要点给大家分享下,以免再次多浪费时间 agsXMPP是什么就不多描述了,重点说下我在创建 ...

  5. 5-3 bash脚本编程之二 条件判断

    1. 条件测试的表达式 1. [ expression ]  :注意这个中括号的前后都有一个空格 2. [[ expression ]] 3. test expression 2.条件判断的类型 1. ...

  6. linux基本知识1

    ls命令: -l:长格式 文件类型:第1位 -:普通文件 d:目录文件 b:块设备文件(block) c:字符设备文件(character) l:符号链接文件(symbolic link file) ...

  7. 【转】 XenServer架构之HA概述

    一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...

  8. JS 阶段练习~ 仿flash的图片轮换效果

    结合了所学的简单运动框架~  做这样一个综合小实例~~ -------------------------主要问题: 1.getByClassName  IE低版的兼容性 2.DOM不够严谨 … 各种 ...

  9. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  10. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...