初识virtual memory
一、先谈几个重要的东西
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的更多相关文章
- php编译 :virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...
- reds Virtual Memory
Virtual Memory technical specification This document details the internals of the Redis Virtual Memo ...
- 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 ...
- Linux Process Virtual Memory
目录 . 简介 . 进程虚拟地址空间 . 内存映射的原理 . 数据结构 . 对区域的操作 . 地址空间 . 内存映射 . 反向映射 .堆的管理 . 缺页异常的处理 . 用户空间缺页异常的校正 . 内核 ...
- Cache and Virtual Memory
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandonAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRando ...
- 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 ...
- 编译时:virtual memory exhausted: Cannot allocate memory
一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...
- Virtual Memory PAGE TABLE STRUCTURE
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION The basic mechanism f ...
- 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 ...
随机推荐
- es6
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 解决问题:无法对 System程序集 添加Fakes程序集
为了在单元测试中指定DateTime.Now的值,我采用Microsoft Fakes技术的Shim. 主要参考了园里的http://www.cnblogs.com/FreeDong/p/335311 ...
- redis 缓存技术与memcache的区别
1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset( ...
- 记录 git 常用的操作命令总结
记录 git 常用的操作命令总结 2016-12-15 16:44:04 作为一名开发者,熟悉使用 git 代码管理工具是一项必备的基本技能.git 相较 SVN 而言,其优点不言而喻.git 的功能 ...
- CFD冲蚀模拟的一些理论
[TOC] 在CFD中计算颗粒对固体壁面的冲蚀往往采用冲蚀模型(Erosion Model). 1 冲蚀速率(Erosion Rate) 冲蚀速率定义为壁面材料在单位时间单位面积上损失的质量(单位:\ ...
- 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程
之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...
- springMVC异常&&重定向&&转发
SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...
- 轻量级C#编辑器RoslynPad
简介 RoslynPad是一个Apache 2.0协议开源的轻量级C#编辑器.支持自动完成,语法提示,修改建议等功能.很适合平时随手写个C#程序看看运行结果. 目前版本:0.10.1,无需保存也可以运 ...
- 【repost】JS原型与原型链终极详解
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...
- c# MongoDB 经纬度应用示例
class Program { static string mongodb = "mongodb://127.0.0.1:27017"; ...