初识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
转载于:https://www.cnblogs.com/midhillzhou/p/5615320.html
初识virtual memory相关推荐
- DumpMem and Monster - Virtual Memory Explorers on Windows Mobile/CE
Windows Mobile 5 和 6的平台是建立在CE5.x的基础上的.当可用的内存很少时,平台会自动关闭应用程序.而且,在这个移动平台上,同时只能运行32个process.在桌面电脑上,我们有4 ...
- 【计算机基础】 Virtual memory 虚拟内存
Virtual memory 虚拟内存 虚拟内存的作用 将主存看成存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,高效实用主存 为每个进程提供一致的地 ...
- is running beyond the ‘VIRTUAL‘ memory limit. Current usage: 123.5 MB of 1 GB physical memory used
is running beyond the 'VIRTUAL' memory limit. Current usage: 123.5 MB of 1 GB physical memory used; ...
- WinCE 5.0 virtual memory space
要深入了解WinCE的memory结构,就不得不在这里先画个virtual memory space的图.这个图是针对WinCE 5.0的.由于WinCE 6的结构做了很大变化,关于WinCE 6的内 ...
- ES启动异常:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
现象 ES启动时出现异常 bin/elasticsearchmax virtual memory areas vm.max_map_count [65530] is too low, increase ...
- HADOOP:Current usage: 399.9 MB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory used.
[已解决]Current usage: 399.9 MB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory used. Kil ...
- es max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] /etc ...
- Flink:Container is running beyond virtual memory limits
1.美图 2.问题描述 以Yarn模式启动Flink时提示:The Flink Yarn cluster has failed. 详细错误信息为 Container [] is running bey ...
- virtual memory exhausted: Cannot allocate memory Linux虚拟内存不足,扩展虚拟内存的解决办法
Linux虚拟内存不足,扩展虚拟内存的解决办法 virtual memory exhausted: Cannot allocate memory 在编译软件的时候,出现了这个错误: virtual m ...
最新文章
- OpenCV学习笔记大集锦
- 灵活、高效的云原生集群管理经验:用 K8s 管理 K8s
- Linux 学会看日志文件处理问题
- VB讲课笔记12:文件管理
- 波士顿动力机器狗解锁“自动驾驶”,会跑步的Atlas真的很稳
- 延迟加载并渐现内容的jquery插件lazyFade
- modbus发送接收_自己编写MODBUS协议代码所踩过的坑
- Spring 使用注解注入 学习(四)
- conda常用命令和基础知识整理
- Java常见笔试题(99.9%必问)
- 阿里云盘 PC 版上线,百度网盘 SVIP 功能全免费
- STM32MP157(实验九)——SysTick定时器us延时
- 链表节点被删除时的资源释放
- caj 服务器正在运行中,紧急求助:caj阅读器打不开
- 网站打不开的原因及解决办法
- Tableau画地图
- 快递查询APP隐私条款
- 2022施工员-市政方向-通用基础(施工员)题库及答案
- 楼宇系统服务器,【产品介绍】楼宇管理平台
- 经典升级,长直播,马上开课 | 第 19 期高级转录组分析和R数据可视化火热报名中!!!...
热门文章
- 微信公招访问我服务器的那个端口,查看谁在使用某个网络端口
- mysql 数据库 应用_MySQL数据库的应用
- 退出页面删除cookie_Cookie 机制
- MySQL中文乱码问题
- Tomcat 6连接池配置
- 软件可靠性指标mtbf测试评估,软件可靠性评估.pdf
- 后台系统可扩展性学习笔记(五)负载均衡
- 二叉树笔记(深度遍历与广度遍历+13道leetcode题目(深度3道、广度10道))
- python set |_Python事件类| set()方法与示例
- Python---利用蒙特.卡罗方法计算圆周率近似值