一、先谈几个重要的东西

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. 尝试解析js面试题(一)【转发】

    解析: 1.Foo.getName(); //2 1)结果执行的是Foo对象的一个叫做getName()的属性,而1.4.5中的getName都是作为函数存在,所以可以排除1.4.5 2)剩下两个中, ...

  2. SQL拼接字段数据

    查询语句: SELECT STUFF ( ( SELECT ',' + --分隔符 KeyID --查询字段 FROM #tmp --查询数据表 WITH(NOLOCK) --查询条件 FOR XML ...

  3. XSS 防御方法总结

    1. XSS攻击原理 XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩 ...

  4. Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)

    AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...

  5. error at ::0 can't find referenced pointcut messageInsertAspect

    解决方法: http://stackoverflow.com/questions/10482563/aop-java-lang-illegalargumentexception-error-at-0- ...

  6. vim 中替换

    将80替换为10.0.0.19:80 :g/80/s//10.0.0.19:80/g

  7. 使用httpclient发送get或post请求

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

  8. QWhatsThis的用法

    QWhatsThis,为任何widget提供简单的描述,回答"What's This?"这个问题. 示例:(在MainWindow下运行) 定义全局变量 QAction *newA ...

  9. Linux 关于Transparent Hugepages的介绍

    透明大页介绍 Transparent Huge Pages的一些官方介绍资料: Transparent Huge Pages (THP) are enabled by default in RHEL ...

  10. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...